int main()
{
int c,nl,nt,Blanks;
nl = 0;
nt = 0;
Blanks = 0;
while ((c= getchar()) != '5'){
if (c ='\n')
nl++;
if(c='\t')
nt++;
if(c = 's')
Blanks ++;
}
printf("No of lines is %d \n No of tabs %d \n and no of blanks %d \n",nl,nt,Blanks);
return 0;
输出:
No of lines is 12
No of tabs 12
and no of blanks 12
RUN SUCCESSFUL (total time: 5s)
输出是输入的任何字符的编号,它根本不区分它们。此外,当我使用EOF使循环在文件结束时停止时,循环没有停止,程序继续运行。
答案 0 :(得分:3)
在C中,使用=
分配,例如
x = 5;
并使用==
进行比较。例如
if (x == 5) { /* do something */ }
如果你使用了错误的,例如
if (x = 5) { /* do something */ }
这将导致分配,而不是比较。表达式x = 5
始终为true
,因为x
非零,而非零与C中的true
相同。这意味着{{1永远都会执行。
此外,/* do something */
不代表'5'
,它代表字符EOF
。您应该将5
替换为'5'
。
EOF
除此之外,您似乎正在使用while ((c = getchar()) != EOF)
测试空格(' '
)。这是错的。 's'
代表C中的字符's'
。s
代表C中的' '
字符。
还有一些建议:这与问题没有直接关系,但由于你是C的新手,我会给你一个重要的指针。
绝不使用没有大括号的space
语句。例如
if
相反,请使用
if (/* condition */)
/* do something */
我知道,时间更长,但稍后您可能决定添加另一行代码,例如。
if (/* condition */) {
/* do something */
}
你会对if (/* condition */)
/* do something */
/* do something else */
始终执行的原因感到困惑,天气/* do something else */
是否为/* condition */
。
答案 1 :(得分:1)
您的if
错了。您错过了每个=
中的第二个if
,现在您将值分配给c
,结果为true
。此外,您可以使用else if
,因为案例是独占的。
int main()
{
int c,nl,nt,Blanks;
nl = 0;
nt = 0;
Blanks = 0;
while ((c= getchar()) != '5'){
if (c =='\n')
nl++;
else if(c=='\t')
nt++;
else if(c == 's')
Blanks ++;
}
printf("No of lines is %d \n No of tabs %d \n and no of blanks %d \n",nl,nt,Blanks);
return 0;
}