虽然遇到NULL字符后C中的循环不会中断

时间:2015-05-18 12:37:09

标签: c while-loop

这是添加字母数字字符串中的数字的代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
int total=0;
char ch;
printf("enter the string\n");
ch=getchar();
while(ch!='\0')
{
    printf("I am here !!");
    if (!(isalpha(ch)))
        total+=(int)ch;
    ch=(char)getchar();
    printf("I am here !!");
}
printf("\ntotal is %d",total);
return 0;
}

无论我输入什么字符,每个字符都会有4个“我在这里”。

我尝试使用

while((ch=getchar())!='\0');

但它给出了同样的问题。

2 个答案:

答案 0 :(得分:9)

getchar在输入结尾处不返回'\0':它是从空终止的C字符串读取,而是从控制台,文件或其他一些流。

如果没有其他输入,getchar会返回EOF。这是您应该检查以决定何时停止循环的条件。

Stack Overflow提供了很多关于如何实现循环读取的好例子getcharlink#1; link#2;请注意示例中使用的数据类型。)

答案 1 :(得分:3)

它不起作用的原因是因为'\0'无法从键盘插入,因此getchar()不太可能返回'\0',这是一种正确的测试方式输入结束将是

int ch;

while (((ch = getchar()) != EOF) && (ch != '\n'))

这是因为EOF表示用户有意想要停止输入数据,而'\n'通常是在stdin被刷新时会看到的最后一件事,因为它会触发冲洗。