1

我正在使用 Turbo C++ 3.0 编译器

使用以下代码时..

char *Name;
cin >> Name;
cout << Name;

当我输入空格时……它唯一的保存字符是在空格之前键入的……就像我输入“QWERT YUIOP”一样……名称将包含“QWERT”;

任何解释为什么?

4

3 回答 3

6

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.

于 2010-02-02T13:03:11.500 回答
2

您需要为要读取名称的字符数组分配空间。 char *Name; 将不起作用,因为它只声明了一个 char 指针而不是一个 char 数组。就像是char Name[30];

cin <<唯一允许我们在字符串中输入一个单词(char name[30])。
但是,有一个 cin 函数可以读取包含空格的文本。

cin.get(name, MAX)  

get 将读取包括空格在内的所有字符,直到读取了 Max 个字符或达到行尾字符 ('\n'),并将它们放入 name 变量中。

于 2010-02-02T12:58:32.247 回答
1

您刚刚声明了一个不指向任何内容的字符指针。您需要为您的字符串分配空间。最常见的方法是在堆栈上分配空间,IE:

char Name[50];

请记住,char 指针本身只是将地址放置到实际内存所在的位置。您仍然必须获得一块内存并将地址存储在指针中。上面的代码在堆栈上创建了一个名称数组,您可以使用名称存储最多 49 个字符和一个空终端。

或者,对于可变长度字符串,使用 std::string。

于 2010-02-02T12:58:24.900 回答