char ch[4];
char* ptr;
ptr = ch;
while(1)
{
cin >> *ptr;
if(*ptr == '\n')
break;
ptr++;
}
这里我只写了一些示例代码,我试图摆脱while循环时用户写入ENTER键,但它不工作。请帮帮我。先谢谢你。cin不接受输入作为ENTER
char ch[4];
char* ptr;
ptr = ch;
while(1)
{
cin >> *ptr;
if(*ptr == '\n')
break;
ptr++;
}
这里我只写了一些示例代码,我试图摆脱while循环时用户写入ENTER键,但它不工作。请帮帮我。先谢谢你。cin不接受输入作为ENTER
要获取单个字符,请使用std::istream::get
。这也适用于获取换行符。
而是获得在一个循环中的字符,直到你得到一个换行符,为什么不使用类似std::getline
:
std::string str;
std::getline(cin, str);
或者,如果你只是想获得最大的三个字符,你可以使用std::istream::getline
:
char ch[4];
cin.getline(ch, 4, '\n');
为什么选择'istream :: getline()'或'istream :: get()'与在'cin'上使用<<运算符? – 2012-04-16 17:52:13
@RandallCook“>>”操作符跳过包含换行符的空格。 – 2012-04-17 00:06:57
您正在读取字符值的输入。这就是*ptr
的含义。我想你只需要简单的ptr,它是一个指向字符数组的指针,这是一种用来接收数据的东西。你所写的基本上是这样的:
char c;
cin >> c;
我不认为这是你的意思,也不会即使它是工作,因为作为约阿希姆Pileborg上面所指出的,>>
运营商跳过空白像换行。一般来说,阅读输入时总是最好的。提供足够的空间,并使用可自动增长的变量(如std::string
)或告知系统有多少空间(如fgets()
)。
以下将读取一行:
istream& getline (char* s, streamsize n);
提取操作将跳过领先的白色空间,在遇到任何后续的空白停止执行。所以,当你想做这样的事情时,使用std :: istream :: get()或std :: istream :: getline()。
将输入读入简单的字符数组通常是一个坏主意,因为缓冲区可能会溢出,并且程序可能崩溃或恶意代码可能会执行。最好使用std :: string。 – 2012-04-16 06:37:10