c - 行、选项卡 ,'s' 计数问题和 EOF 错误

标签 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 使循环在到达文件末尾时停止时,循环没有停止并且程序继续运行。

最佳答案

在 C 语言中,使用 = 进行赋值,例如。

x = 5;

并使用==进行比较。例如。

if (x == 5) { /* do something */ }

如果你用错了,例如。

if (x = 5) { /* do something */ }

这将导致分配,而不是比较。表达式 x = 5 始终为 true,因为 x 为非零,非零与 相同在 C 中为 true。这意味着 /* do some */ 将始终被执行。

<小时/>

另外,'5'并不代表EOF,它代表的是字符5。您应该将 '5' 替换为 EOF

while ((c = getchar()) != EOF)

除此之外,您似乎正在使用 's' 测试空格 (' ')。这是错误的。 's' 表示 C 中的字符 s' ' 表示 C 中的空格 字符。

<小时/>

还有一些建议:这与问题没有直接关系,但由于您显然是 C 语言新手,所以我会给您一个重要的指导。

切勿使用不带大括号的 if 语句。例如。

if (/* condition */)
    /* do something */

相反,使用

if (/* condition */) {
    /* do something */
}

我知道它更长,但稍后您可能会决定添加另一行代码,例如。

if (/* condition */)
    /* do something */
    /* do something else */

你会很困惑为什么 /* do something else */ 总是总是执行,天气 /* condition */ 是否为 true

关于c - 行、选项卡 ,'s' 计数问题和 EOF 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844504/

相关文章:

c - 将字符串从结构传递到字符串数组 - C

c++ - std::locale 没有 lconv::p_cs_precedes 的等价物?

c - 除了内存分配之外的段错误

C: 使用 fgetc() 解析文件 - EOF 无限循环

Python 3.0 - 如何输出计数最多的字符?

c - Linux内核模块编译错误: implicit declaration of function ‘open’

python - "EOFError: Ran out of input"尝试 pickle 时不断出现此错误

c - fscanf() != EOF 作为循环的退出条件在错误的时间退出

javascript - TinyMCE,显示字符数而不是字数

javascript - 单击按钮重置角色倒计时