C++ 正在计算'cin.getline()'是否成功

C++ 正在计算'cin.getline()'是否成功,c++,validation,file-io,cin,getline,C++,Validation,File Io,Cin,Getline,以下是基本代码片段: while (true) { cin.getline(str, STRSIZE); if (str[0] == '\n') { break; } } 本质上,当用户只输入一个单独的返回键时,循环应该结束。 当然,此代码不起作用,因为\n会被刷新,并且不会在str中结束,以验证是否输入了单独的\n。我不奇怪为什么这不起作用;我知道为什么 如何验证是否输入了一个单独的\n,从而退出while循环? 我知道一个人可以做到以下几点: while (cin >>

以下是基本代码片段:

while (true)
{
  cin.getline(str, STRSIZE);
  if (str[0] == '\n') { break; }
}
本质上,当用户只输入一个单独的返回键时,循环应该结束。 当然,此代码不起作用,因为
\n
会被刷新,并且不会在
str
中结束,以验证是否输入了单独的
\n
。我不奇怪为什么这不起作用;我知道为什么

如何验证是否输入了一个单独的
\n
,从而退出
while循环?


我知道一个人可以做到以下几点:

while (cin >> str);
然而:

  • >
    一次只接受一个单词
  • 在我的实际代码中,使用了
    for循环
    ,而不是
    while循环
如果
cin.getline()
无法读取一行,
cin
将处于错误状态

您可以使用:

while (cin.getline(str, STRSIZE))
{
   if ( str[0] == '\0' ) { break; }

   // Use str
}
如果
cin.getline()
读取一行失败,
cin
将处于错误状态

您可以使用:

while (cin.getline(str, STRSIZE))
{
   if ( str[0] == '\0' ) { break; }

   // Use str
}

哦,所以当我调用
cin.getline()
时,
str
将设置为
\0
,而不是调用之前的
str
垃圾?@SirJony,这是正确的
str
将设置为空字符串,而不是
\0
。有什么区别?顺便说一下,我使用的是
char[]
,而不是
string
。很抱歉没有说清楚。@SirJony,
\0
可以是
char
的值,而不是字符串。它可以是
str[0]
的值,但不能是
str
的值。细微但重要的区别。哦,是的,当然。我的意思是
str[0]=\0
,而不是
str=\0
。哦,所以当我调用
cin.getline()
str
将被设置为
\0
,而不是调用之前的
str
垃圾?@SirJony,这是正确的
str
将设置为空字符串,而不是
\0
。有什么区别?顺便说一下,我使用的是
char[]
,而不是
string
。很抱歉没有说清楚。@SirJony,
\0
可以是
char
的值,而不是字符串。它可以是
str[0]
的值,但不能是
str
的值。细微但重要的区别。哦,是的,当然。我的意思是
str[0]=\0
,而不是
str=\0