问题描述
- 小程序的小问题,求大神进来看看
-
为什么循环的退出条件只有在单独输入EOF的时候才有效?
为什么前面输入字符再输入EOF的话会输出奇怪的东西(c is't a letter. -1)?//程序从标准输入读取字符,直到遇到文件结尾。程序检查并报告该字符是否是一个字母。如果是的话,程序还应该报告该字母在字母表中的位置,否则返回-1#include<stdio.h>#include<ctype.h>int main (void){ char ch = NULL; while ((ch = getchar()) != EOF){ if (!isalpha(ch)) printf(""%c isn't a lettter. -1n""); else{ if(isupper(ch)) printf(""%c is the %d in the alphabetn"" ch ch - 'A' +1); else printf(""%c is the %d in the alphabetn"" ch ch - 'a' +1); } } printf(""Done.n""); return 0;}
解决方案
getchar()在你输入几个字符后按回车才读取第一个字符,其余的字符和回车被放到缓冲区,其中ctrl+z以0x1a放入缓冲区的,
再次被getchar读入时就不是EOF了。
只有在一行的开头输入ctrl+z,其他字符+回车,才被getchar在第一次读入时,返回-1,即oxff,也就是EOF。
解决方案二:
你可以不要用getchar输入,用scanf输入试试
解决方案三:
getchar()在你输入几个字符后按回车才读取第一个字符,其余的字符和回车被放到缓冲区,其中ctrl+z以0x1a放入缓冲区的,
再次被getchar读入时就不是EOF了。
只有在一行的开头输入ctrl+z,其他字符+回车,才被getchar在第一次读入时,返回-1,即oxff,也就是EOF。
时间: 2024-11-25 17:38:00