| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1090 人关注过本帖
标题:奇怪的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) 时就输入不了字符了,为什么???




没事儿你就多到这儿转转
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
快速回复:奇怪的scanf,这个地方必须加循环才能输入??
数据加载中...
 
   



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

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