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

在这里,我只是写了一些示例代码,当用户输入 ENTER 时,我试图摆脱一个 while 循环,但它不起作用。请帮我。先感谢您。

4

4 回答 4

6

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

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

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

或者,如果您只想获得最多三个字符,您可以使用std::istream::getline

char ch[4];
cin.getline(ch, 4, '\n');
于 2012-04-16T06:39:19.750 回答
1

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

char c;
cin >> c;

我认为这不是您的意思,即使是这样,它也不会起作用,因为正如 Joachim Pileborg 上面指出的那样,>>操作员会像换行符一样跳过空格。一般来说,在读取输入时,最好是非常健壮。提供足够的空间,或者使用可以自动增长的变量(如std::string)或告诉系统你有多少空间(如fgets())。

于 2012-04-16T06:39:32.357 回答
1

以下将读取一行:

istream& getline (char* s, streamsize n );
于 2012-04-16T06:42:45.147 回答
1

提取运算符将跳过前导空白并在遇到任何后续空白时停止执行。所以,当你想做这样的事情时,使用 std::istream::get() 或 std::istream::getline()。

于 2014-03-05T08:50:02.000 回答