user-0 提问: 关于while循环   字符

回复:
user: user-1
content: 有是一个粗心大意造成的问题

user: user-2
content: 我喜欢 for(;;) { scanf("%c",&ch);  if(ch=='Y')                                                     break; printf("%c",ch);  }

user: user-3
content: 哎呀，应该是： while(ch!=Y'||ch!='y')

user: user-0
content: 我想知道实现输入y继续，输入其他退出循环最简单的算法是什么

user: user-4
content: ch='Y' 赋值为真，当然一直循环

user: user-5
content: 以后把定值写在左边就不会出错了，=和==你用错了

user: user-6
content: ch='Y'||'y'的含义是： 将'Y'赋值给ch，并以ch的值作为逻辑值判断（当然为真）；或者将'y'的值作为逻辑值判断（还是为真）

user: user-0
content: 引用 16 楼 u013163178 的回复:#include <stdio.h> #include <malloc.h> int main(void) {	 	char ch='y';//把y换成a之类的循环也会执行，为什么？ 	while(ch=='Y'||ch=='y') 	{ 	scanf("%c",&ch); 	getchar(); 	printf("%c",ch); 	} 	return 0; } getchar()在这里起到了什么作用啊？

user: user-0
content: 引用 12 楼 u013823973 的回复:[quote=引用 8 楼 wenbo228228 的回复:] #include <stdio.h> #include <malloc.h> int main(void) { 	char ch='y';//把y换成a之类的循环也会执行，为什么？ 	while((ch=='y')||(ch=='Y')) 	{ 	scanf("%c",&ch); 	printf("%c",ch); 	} 	return 0; }  解决了==问题后，输入t程序结束，为什么输入y还是结束？ scanf后缓冲区里面还有个回车，在下一次的时候不会要你输入，直接把回车赋值给ch了造成循环结束 可以在循环里面刷新缓冲区[/quote]  怎么刷新，我没学过字符的操作

user: user-7
content: #include <stdio.h> #include <malloc.h> int main(void) {	 	char ch='y';//把y换成a之类的循环也会执行，为什么？ 	while(ch=='Y'||ch=='y') 	{ 	scanf("%c",&ch); 	getchar(); 	printf("%c",ch); 	} 	return 0; }

user: user-8
content: =和==不分啊

user: user-9
content: 引用 1 楼 worldy 的回复:ch='Y'||'y'  判断是否相等是==，不是= ch==('Y'||'y')，加上挎号，确保||运算最先执行  正解了啊， =是赋值操作，不会为false的

user: user-10
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-10
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-11
content: 楼主仔细看看，然后调试就出来了，很明显的问题啊

user: user-8
content: 引用 8 楼 wenbo228228 的回复:#include <stdio.h> #include <malloc.h> int main(void) { 	char ch='y';//把y换成a之类的循环也会执行，为什么？ 	while((ch=='y')||(ch=='Y')) 	{ 	scanf("%c",&ch); 	printf("%c",ch); 	} 	return 0; }  解决了==问题后，输入t程序结束，为什么输入y还是结束？ scanf后缓冲区里面还有个回车，在下一次的时候不会要你输入，直接把回车赋值给ch了造成循环结束 可以在循环里面刷新缓冲区

user: user-12
content: 上面打错了。 ch 都有初始值了，while肯定会执行的。

user: user-12
content: 引用 8 楼 wenbo228228 的回复:#include <stdio.h> #include <malloc.h> int main(void) { 	char ch='y';//把y换成a之类的循环也会执行，为什么？ 	while((ch=='y')||(ch=='Y')) 	{ 	scanf("%c",&ch); 	printf("%c",ch); 	} 	return 0; }  解决了==问题后，输入t程序结束，为什么输入y还是结束？  你要把 scanf("%c",&ch); 这句提到 if 上面去吧。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:不要使用 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-0
content: #include <stdio.h> #include <malloc.h> int main(void) { 	char ch='y';//把y换成a之类的循环也会执行，为什么？ 	while((ch=='y')||(ch=='Y')) 	{ 	scanf("%c",&ch); 	printf("%c",ch); 	} 	return 0; }  解决了==问题后，输入t程序结束，为什么输入y还是结束？