标题:奇怪的scanf,这个地方必须加循环才能输入??
取消只看楼主
hahahan
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-4-10
 问题点数:0 回复次数:1 
奇怪的scanf,这个地方必须加循环才能输入??

某书上的一道题,从键盘输入一个正整数,如过是7的倍数就输出到屏幕。要求不断输入与输出,
直到使用者选择退出。



#include <stdio.h>
#include <conio.h>
main()
{
int t=0;
char flag='\0';
do
{ printf("\nPlease input the num :");
scanf("%d",&t);
if (t%7==0)
printf("\nCannot be output!");

else
printf("\nthe number canbe output:%d",t);

printf("\nContinue?(Y/N)");
do{
scanf("%c",&flag);
}while(flag!='y'&&flag!='Y'&&flag!='n'&&flag!='N');

}while(flag=='y'||flag=='Y');
printf("Press any key to quit the window...");
getch();
}


现在这样写运行是正常的(win-tc)。
但把红色部分改为


do{printf("\nContinue?(Y/N)");
scanf("%c",&flag);
}while(flag!='y'&&flag!='Y'&&flag!='n'&&flag!='N');

这样就出现问题了:跳出两行 Continue?(Y/N) ,也就是printf("\nContinue?(Y/N)");运行了两次,为何????


红色部分再改一下,只写


printf("\nContinue?(Y/N)");
scanf("%c",&flag);

也就是不要检查字符是否为y、n的循环,运行到 Continue?(Y/N) 时就输入不了字符了,为什么???



搜索更多相关主题的帖子: scanf printf output include 
2007-09-01 11:41
hahahan
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-4-10
得分:0 
回复:(vbc)并不是这样的.找了很久终于找到了.如:#i...

谢谢!! 是这个问题,我在前面加了个getchar(); 就ok了,我提的两个问题都是由这个原因引起的。


#include <stdio.h>
#include <conio.h>
main()
{
int t=0;
char flag='\0';
do
{ printf("\nPlease input the num :");
scanf("%d",&t);
if (t%7==0)
printf("\nCannot be output!");

else
printf("\nthe number canbe output:%d",t);

getchar();
do{printf("\nContinue?(Y/N)");
scanf("%c",&flag);
}while(flag!='y'&&flag!='Y'&&flag!='n'&&flag!='N');

}while(flag=='y'||flag=='Y');
printf("\n\nPress any key to quit the window...");
getch();
}

好多书本上问什么就有两个 scanf连用,而且运行竟然不出问题的例子(比如连续两次简单的数字输入)???

我想起来了,以前我在论坛上好想问过类似问题,就想知道 输入 输出 缓冲 等等这些东东到底怎么回事。
盼望高手给个完整解答。


没事儿你就多到这儿转转
2007-09-01 16:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-166991-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.448463 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved