user-0 提问: 疑问，求助！

回复:
user: user-0
content: 引用 3 楼 paschen 的回复:while是个死循环，你应该把getchar放到循环里，但是你每次输入后都会在缓冲区中留下一个换行符\n，所以你在下一次输入前需要前清空缓冲区好像是这样的，太复杂以至于自己忘记了，  引用 9 楼 hou09tian 的回复:[quote=引用 7 楼 qq_38080117 的回复:] [quote=引用 4 楼 hou09tian 的回复:] 1 问题分析 getchar()在C程序中的功能是接收一个字符，所以，在程序中，假设输入是“XXOOOXOOOX” 此时， int  c=  getchar() ; 代码获取的只是输入字符串的第一个字符，即'X'，接下来 while (c!=EOF) 中,EOF的值是-1，而c的值是'X'，而在while循环体中c的值不可能是EOF，while循环没有满足退出条件，所以相当于while是死循环，所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句，当输入时EOF时，退出while循环 	int c; 	while ((c = getchar()) != EOF) 	{ 		v = c == 'O' ? v + 1 : 0; 		u += v;  	} 以下为输出界面 我的程序返回的是字符，你的反悔的是数字吗？我好像懂点了[/quote] 你说的返回值指的是。。。。[/quote]  引用 9 楼 hou09tian 的回复:[quote=引用 7 楼 qq_38080117 的回复:] [quote=引用 4 楼 hou09tian 的回复:] 1 问题分析 getchar()在C程序中的功能是接收一个字符，所以，在程序中，假设输入是“XXOOOXOOOX” 此时， int  c=  getchar() ; 代码获取的只是输入字符串的第一个字符，即'X'，接下来 while (c!=EOF) 中,EOF的值是-1，而c的值是'X'，而在while循环体中c的值不可能是EOF，while循环没有满足退出条件，所以相当于while是死循环，所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句，当输入时EOF时，退出while循环 	int c; 	while ((c = getchar()) != EOF) 	{ 		v = c == 'O' ? v + 1 : 0; 		u += v;  	} 以下为输出界面 我的程序返回的是字符，你的反悔的是数字吗？我好像懂点了[/quote] 你说的返回值指的是。。。。[/quote]就是与EOF比较的是数字还是字符

user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-2
content: 引用 7 楼 qq_38080117 的回复:[quote=引用 4 楼 hou09tian 的回复:] 1 问题分析 getchar()在C程序中的功能是接收一个字符，所以，在程序中，假设输入是“XXOOOXOOOX” 此时， int  c=  getchar() ; 代码获取的只是输入字符串的第一个字符，即'X'，接下来 while (c!=EOF) 中,EOF的值是-1，而c的值是'X'，而在while循环体中c的值不可能是EOF，while循环没有满足退出条件，所以相当于while是死循环，所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句，当输入时EOF时，退出while循环 	int c; 	while ((c = getchar()) != EOF) 	{ 		v = c == 'O' ? v + 1 : 0; 		u += v;  	} 以下为输出界面 我的程序返回的是字符，你的反悔的是数字吗？我好像懂点了[/quote] 你说的返回值指的是。。。。

user: user-0
content: 引用 4 楼 hou09tian 的回复:1 问题分析 getchar()在C程序中的功能是接收一个字符，所以，在程序中，假设输入是“XXOOOXOOOX” 此时， int  c=  getchar() ; 代码获取的只是输入字符串的第一个字符，即'X'，接下来 while (c!=EOF) 中,EOF的值是-1，而c的值是'X'，而在while循环体中c的值不可能是EOF，while循环没有满足退出条件，所以相当于while是死循环，所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句，当输入时EOF时，退出while循环 	int c; 	while ((c = getchar()) != EOF) 	{ 		v = c == 'O' ? v + 1 : 0; 		u += v;  	} 以下为输出界面 问个问题，为啥这个程序执行这么慢呢？还有人家回复我说运行结果不对，你知道错在哪里吗？

user: user-0
content: 引用 4 楼 hou09tian 的回复:1 问题分析 getchar()在C程序中的功能是接收一个字符，所以，在程序中，假设输入是“XXOOOXOOOX” 此时， int  c=  getchar() ; 代码获取的只是输入字符串的第一个字符，即'X'，接下来 while (c!=EOF) 中,EOF的值是-1，而c的值是'X'，而在while循环体中c的值不可能是EOF，while循环没有满足退出条件，所以相当于while是死循环，所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句，当输入时EOF时，退出while循环 	int c; 	while ((c = getchar()) != EOF) 	{ 		v = c == 'O' ? v + 1 : 0; 		u += v;  	} 以下为输出界面 我的程序返回的是字符，你的反悔的是数字吗？我好像懂点了

user: user-0
content: 引用 2 楼 qq_38204686 的回复:while循环的时候你倒是重新输入啊  重新getchar谢谢

user: user-2
content: 1 问题分析 getchar()在C程序中的功能是接收一个字符，所以，在程序中，假设输入是“XXOOOXOOOX” 此时， int  c=  getchar() ; 代码获取的只是输入字符串的第一个字符，即'X'，接下来 while (c!=EOF) 中,EOF的值是-1，而c的值是'X'，而在while循环体中c的值不可能是EOF，while循环没有满足退出条件，所以相当于while是死循环，所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句，当输入时EOF时，退出while循环 	int c; 	while ((c = getchar()) != EOF) 	{ 		v = c == 'O' ? v + 1 : 0; 		u += v;  	} 以下为输出界面

user: user-3
content: while是个死循环，你应该把getchar放到循环里，但是你每次输入后都会在缓冲区中留下一个换行符\n，所以你在下一次输入前需要前清空缓冲区

user: user-4
content: while循环的时候你倒是重新输入啊  重新getchar

user: user-5
content: while (c!=EOF) 这个循环条件意义是什么， 这里一直死循环，没有退出条件