【发布时间】:2010-02-02 12:56:16
【问题描述】:
我正在使用 Turbo C++ 3.0 编译器
使用以下代码时..
char *Name;
cin >> Name;
cout << Name;
当我输入空格时......它唯一保存在空格之前输入的字符.. 就像我输入“QWERT YUIOP”一样...名称将包含“QWERT”;
任何解释为什么??
【问题讨论】:
-
转储 Turbo C++,使用更好的编译器。
我正在使用 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);
您还需要为原始 char 数组分配存储空间,但对于 C++,您无论如何都应该使用 std::string 或 std::wstring。
【讨论】:
您需要为要读取名称的字符数组分配空间。 char *Name; 将不起作用,因为它只声明了一个 char 指针而不是一个 char 数组。类似char Name[30];
另外cin << 只允许我们在字符串中输入一个单词(字符名[30])。
但是,有一个 cin 函数可以读取包含空格的文本。
cin.get(name, MAX)
get 将读取所有字符,包括空格,直到 Max 个字符 已读取或到达行尾字符 ('\n') 并将它们放入 进入名称变量。
【讨论】:
你刚刚声明了一个不指向任何东西的字符指针。您需要为您的字符串分配空间。最常见的方法是在堆栈上分配空间,IE:
char Name[50];
请记住,char 指针本身只是将地址放置到实际内存所在的位置。您仍然必须获得一块内存并将地址存储在指针中。上面的代码在堆栈上创建了一个 Names 数组,您可以使用 Name 存储最多 49 个字符和一个空终端。
或者,对于可变长度字符串,使用 std::string。
【讨论】:
std::string。为此,您需要 21 世纪的编译器。