这对我来说毫无意义,但希望你们其中一个人明白为什么要这样做.
我有一个赋值,需要用getchar()读取三个字符,因为彼此相邻的三个整数彼此相关,所以我设置了一个循环结构如下:
int c1,c2,c3 = 0; while(c3 != EOF) { c1 = getchar(); c2 = getchar(); c3 = getchar(); ... do something with them... }
问题是如果字符数不能被3整除,则不执行最后一次迭代.因此,如果输入了字符“Abcd”,它将在Abc上进行第一次迭代,但是第二次迭代不会对D执行任何操作.对于“Abcde”,但Abcdef会起作用.
这是一个家庭作业,所以不要为我解决这个问题,但是如果没有找到很多字符的话,这就像getchar一样奇怪它只是终止了循环吗?
解决方法
getchar是一个阻塞调用,因此在读取字符或遇到EOF之前不会返回.
因此,在相应的getchar调用之后检查c1,c2或c3中的任何一个是否为换行符(以查看输入行是否已结束),或按Ctrl D(* nix,OS X)或Ctrl Z(Windows )发出文件结束信号(EOF).在EOF之后,getchar将始终立即返回EOF.