2

如果用户输入一个包含空格的句子,while 循环将在这些空格之一处停止。为什么会这样?'\0' 和空格是一样的还是我做错了什么?

int main ( )
{
    char user_input[200];
    cin>>user_input;
    int i=0;
    while(user_input[i]!='\0')
    {
        i++;
    }
    cout<<i;
    return 1;

}

谢谢大家,我很感激你的帮助。

4

3 回答 3

9

\0是带有 ASCII 码的空终止字符0。我想空格是另一个带有 ASCII 32 的字符。事实上,你正在这样做。

cin >> user_input;

它需要输入,直到您按空格或输入。所以你的user_input字符串中没有空格。使用它而不是cin.

cin.getline (user_input, 200, '\0') ;
于 2012-10-22T15:09:09.900 回答
3

这是使用>>char 数组读取的问题。标记时它在空白处分裂。尝试打印user_input到屏幕以确认这一点。

在这种情况下,使用getlineinto astd::string通常更安全(如 daknøk 所述)。我假设输入可能会被回车终止?

std::string user_input;
std::getline( std::cin, user_input, '\n' );
于 2012-10-22T15:09:16.430 回答
1

这是因为输入空格时您的输入停止读取。您可以使用

cin.unsetf(ios::skipws)

默认情况下,它设置为跳过空格。有了这个,你会得到你想要的结果。

于 2012-10-22T17:12:39.507 回答