在循环内部分配的变量起作用,但在外部则不起作用。为什么?

时间:2017-06-22 22:24:12

标签: c variables

我刚开始尝试学习C编程,我真的想了解它是如何工作的。

我想编写一个程序来计算我按ENTER,SPACE和TAB的次数。以下代码有效:

    while( (text = getchar()) != EOF){

    if(text == '\n')
        ++newlines;

    if(text == ' ')
        ++blanks;

    if(text == '\t')
        ++tabs;
}

但是,以下代码不起作用:

text = getchar();

while( text != EOF){

    if(text == '\n')
        ++newlines;

    if(text == ' ')
        ++blanks;

    if(text == '\t')
        ++tabs;
}

我想知道为什么它在循环中分配变量时有效,但不在它之外。

如果我将它分配到循环外并在控制台中运行程序,程序只需在按Enter后停止。

1 个答案:

答案 0 :(得分:3)

在第一种情况下,每次运行循环时都会获得一个新字符。 while循环将在每次到达循环结束时重新检查条件。在第二种情况下,您仍然每次都要检查,但值不会改变 - 它与您开始时的值相同。所以,如果第一个角色不是EOF ......那么......你无限循环!

您可以通过在再次迭代之前重新更新text来修复第二种情况:

text = getchar();

while( text != EOF){

    if(text == '\n')
        ++newlines;

    if(text == ' ')
        ++blanks;

    if(text == '\t')
        ++tabs;

    text = getchar(); //added
}
相关问题