line,tabs,' s计算问题和EOF错误

时间:2014-07-19 20:07:50

标签: c eof charactercount

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使循环在文件结束时停止时,循环没有停止,程序继续运行。

2 个答案:

答案 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;
}