首页 > 代码库 > 雪泥鸿爪-教学中的debug(13) EOF与换行符

雪泥鸿爪-教学中的debug(13) EOF与换行符

http://oj.hi-hi.cn/JudgeOnline/problem.php?cid=1088&pid=9

问题 J: 实验8_5:统计元音字母个数

题目描述

编写一程序,用于统计从键盘输入的字符串中的元音字母(a,A,e,E,i,I,o,O,u,U)的个数。

输入

每行输入一字符串

输出

输出对应字符串中元音字母的个数。

样例输入

abcio efgaeio ak akkkksd

样例输出

3 5 2
 
学生问, 请问这个错在哪儿?样例输出是正确的啊
 
 1 #include<stdio.h> 2 int main(void) 3 { 4     char ch; 5     int i=0; 6     while(scanf("%c",&ch)!=EOF) 7     { 8         if(ch==a||ch==A||ch==e||ch==E||ch==i||ch==I||ch==o||ch==O||ch==u||ch==U) 9             i++;10         if(ch==\n)11         {12             printf("%d\n",i);13             i=0;14         }15     }16     return 0;17 }

答案:

解决办法:在return 0; 前面加上if(i) printf("%d\n",i);原因: 文件最后一行有不是以\n结尾而是直接EOF的,例如最后一行是这样的 ab<EOF> 没有回车。键盘输入是行缓冲方式,必须回车,然后再按Ctrl+Z产生EOF , 所以从键盘输入无法产生我说的情况,但是OJ测试程序时数据文件有这样的数据。
View Code

 

 



雪泥鸿爪-教学中的debug(13) EOF与换行符