2012-04-16 48 views
0
char ch[4]; 
char* ptr; 
ptr = ch; 
while(1) 
{ 
    cin >> *ptr; 
if(*ptr == '\n') 
break; 
ptr++; 
} 

这里我只写了一些示例代码,我试图摆脱while循环时用户写入ENTER键,但它不工作。请帮帮我。先谢谢你。cin不接受输入作为ENTER

+2

将输入读入简单的字符数组通常是一个坏主意,因为缓冲区可能会溢出,并且程序可能崩溃或恶意代码可能会执行。最好使用std :: string。 – 2012-04-16 06:37:10

回答

6

要获取单个字符,请使用std::istream::get。这也适用于获取换行符。

而是获得在一个循环中的字符,直到你得到一个换行符,为什么不使用类似std::getline

std::string str; 
std::getline(cin, str); 

或者,如果你只是想获得最大的三个字符,你可以使用std::istream::getline

char ch[4]; 
cin.getline(ch, 4, '\n'); 
+0

为什么选择'istream :: getline()'或'istream :: get()'与在'cin'上使用<<运算符? – 2012-04-16 17:52:13

+0

@RandallCook“>>”操作符跳过包含换行符的空格。 – 2012-04-17 00:06:57

1

您正在读取字符值的输入。这就是*ptr的含义。我想你只需要简单的ptr,它是一个指向字符数组的指针,这是一种用来接收数据的东西。你所写的基本上是这样的:

char c; 
cin >> c; 

我不认为这是你的意思,也不会即使它是工作,因为作为约阿希姆Pileborg上面所指出的,>>运营商跳过空白像换行。一般来说,阅读输入时总是最好的。提供足够的空间,并使用可自动增长的变量(如std::string)或告知系统有多少空间(如fgets())。

1

以下将读取一行:

istream& getline (char* s, streamsize n); 
1

提取操作将跳过领先的白色空间,在遇到任何后续的空白停止执行。所以,当你想做这样的事情时,使用std :: istream :: get()或std :: istream :: getline()。