如果用户输入一个包含空格的句子,while 循环将在这些空格之一处停止。为什么会这样?'\0' 和空格是一样的还是我做错了什么?
int main ( )
{
char user_input[200];
cin>>user_input;
int i=0;
while(user_input[i]!='\0')
{
i++;
}
cout<<i;
return 1;
}
谢谢大家,我很感激你的帮助。
如果用户输入一个包含空格的句子,while 循环将在这些空格之一处停止。为什么会这样?'\0' 和空格是一样的还是我做错了什么?
int main ( )
{
char user_input[200];
cin>>user_input;
int i=0;
while(user_input[i]!='\0')
{
i++;
}
cout<<i;
return 1;
}
谢谢大家,我很感激你的帮助。
\0
是带有 ASCII 码的空终止字符0
。我想空格是另一个带有 ASCII 32 的字符。事实上,你正在这样做。
cin >> user_input;
它需要输入,直到您按空格或输入。所以你的user_input
字符串中没有空格。使用它而不是cin
.
cin.getline (user_input, 200, '\0') ;
这是使用>>
char 数组读取的问题。标记时它在空白处分裂。尝试打印user_input
到屏幕以确认这一点。
在这种情况下,使用getline
into astd::string
通常更安全(如 daknøk 所述)。我假设输入可能会被回车终止?
std::string user_input;
std::getline( std::cin, user_input, '\n' );
这是因为输入空格时您的输入停止读取。您可以使用
cin.unsetf(ios::skipws)
默认情况下,它设置为跳过空格。有了这个,你会得到你想要的结果。