我正在使用 Turbo C++ 3.0 编译器
使用以下代码时..
char *Name;
cin >> Name;
cout << Name;
当我输入空格时……它唯一的保存字符是在空格之前键入的……就像我输入“QWERT YUIOP”一样……名称将包含“QWERT”;
任何解释为什么?
当cin
用于读取字符串时,它会自动在空格处中断,除非您另外指定。
std::string s;
std::cin >> noskipws >> s;
或者,如果您想获得一整行,请使用:
std::getline(cin, s);
You'll also want to allocate storage for a raw char
array, but with C++ you should use std::string
or std::wstring
anyway.
您需要为要读取名称的字符数组分配空间。 char *Name;
将不起作用,因为它只声明了一个 char 指针而不是一个 char 数组。就像是char Name[30];
也cin <<
唯一允许我们在字符串中输入一个单词(char name[30])。
但是,有一个 cin 函数可以读取包含空格的文本。
cin.get(name, MAX)
get 将读取包括空格在内的所有字符,直到读取了 Max 个字符或达到行尾字符 ('\n'),并将它们放入 name 变量中。
您刚刚声明了一个不指向任何内容的字符指针。您需要为您的字符串分配空间。最常见的方法是在堆栈上分配空间,IE:
char Name[50];
请记住,char 指针本身只是将地址放置到实际内存所在的位置。您仍然必须获得一块内存并将地址存储在指针中。上面的代码在堆栈上创建了一个名称数组,您可以使用名称存储最多 49 个字符和一个空终端。
或者,对于可变长度字符串,使用 std::string。