我试图从K& R书中运行这段代码来计算输入中的字符数:
int main()
{
int count=0;
while(getchar()!=EOF)
count++;
printf("%d",count);
return 0;
}
我没有在Code :: Blocks中获得任何输出,因为每次单独处理输入的每个字符后, getchar 再次因为while循环而要求输入新的输入,并且控制没有&#39 ; t前进到打印行。然后,为什么我在Ideone上获得所需的输出。例如,如果我输入Hello,它会给出输出5,而不是要求输入新的输入。这里有什么问题?
答案 0 :(得分:1)
输入失败时,getchar()
函数会返回EOF
。这并不意味着它会读取一个" EOF字符"或类似的东西。您不应该将EOF视为意义"文件结尾"在这种情况下。
当您从Code :: Blocks运行程序时,您从未做过任何导致输入失败的事情。所以输入永远不会失败,所以你的循环条件总是如此。
当ideone运行程序时,它使用您在运行程序时提供的输入作为输入。当所有输入都已处理完毕后,尝试获取更多输入失败,因此循环中断。
答案 1 :(得分:0)
如评论部分所述,您无法通过按Enter键到达EOF
。
退出while循环的一种方法是,当您按if
它将退出循环时,您可以使用break
编写一些space
语句,如下例所示。
另一种方法是按Ctrl + d
退出循环。
int main(){
int count=0;
while(getchar()!=EOF){
count++;
if(getchar() == ' '){
break;
}
printf("%d",count);
}
return 0;
}
答案 2 :(得分:0)
尝试类似的东西:
int main()
{
int count = 0;
while(getchar() != '\t') // If tab is entered we break
{
count++; // iterate
printf("%d\n", count); // print counter
}
return 0;
}
当您输入标签时,控制台将停止询问输入。但只有在退出循环时才会打印出打印件。
编辑:
我认为Ideone有一种特殊的方式来处理EOF。似乎Ideone在计算输出文本区域中的所有内容时会自动输入EOF。我发现即使写\n
也无法手动重现EOF。但是,使用字符作为退出循环的方法似乎正常工作。
我不知道它是否可以帮到你,但我在Ideone常见问题解答中找到了这个。