c-意外输出可能与数据类型有关



我正在做一本书中的练习,以制作一个计算空白制表符和换行符的程序。代码如下:

#include <stdio.h>
main()
{
int blanks, tabs, newlines = 0;
int c;
while ((c = getchar()) != EOF)
if (c ==' ')
++blanks;
if (c == 't')
++tabs;
if (c == 'n')
++newlines;
printf("n Blanks: %d. n Tabs: %d. n New lines: %d. n", blanks, tabs, newlines);
}

程序似乎检查了第一个if语句,发现它是真的,然后回到while循环的开头,为什么会发生这种情况,解决方案是什么?

kingvon@KingVon:~/Desktop/C$ ./a.out
counts blanks
but not tabs
or new lines
Blanks: 5. 
Tabs: 0. 
New lines: 0. 

将{}添加到while循环中。如果使用不带{}的循环,它只循环它后面的第一行,但当使用{}时,它循环{}之间的所有代码。

while ((c = getchar()) != EOF){
if (c ==' ')
++blanks;
if (c == 't')
++tabs;
if (c == 'n')
++newlines;
};

最新更新