c输入输出的问题,搞不明白

ggshelley 2012-11-23 04:54:00
代码如下:
double x,y;
while((scanf("%lf%lf",&x,&y)!=2)||x==0||y==0)
{
printf("!");
scanf("%*s");
printf("?");
}
为什么当我输入是:1空格0回车时,程序只输出"!",接着再输入一个数才显示"?",搞不明白啊!
...全文
127 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2012-11-23
  • 打赏
  • 举报
回复
引用 12 楼 mujiok2003 的回复:
什么编译器? 代码正确, VS 2010 OK。
忽略这个。
mujiok2003 2012-11-23
  • 打赏
  • 举报
回复
输入"1 0\n" 在执行完scanf("%lf%lf", &x, &y)后,输入流中剩'\n'

scanf("%*s"); //'\n'被跳过,此时输入流中已经没有内容了。要输入流中提取一个字符串并抛弃,等待着你提供更多输入
mujiok2003 2012-11-23
  • 打赏
  • 举报
回复
什么编译器? 代码正确, VS 2010 OK。
ggshelley 2012-11-23
  • 打赏
  • 举报
回复
引用 8 楼 gaohuaid 的回复:
引用 楼主 ggshelley 的回复: 代码如下: double x,y; while((scanf("%lf%lf",&x,&y)!=2)||x==0||y==0) { printf("!"); scanf("%*s"); printf("?"); } 为什么当我输入是:1空格0回车时,程序只输出"!",接着再输入一个数才显示"?",搞不明白啊……
嗯 弄懂了 谢谢!
buyong 2012-11-23
  • 打赏
  • 举报
回复
1、你这个代码不知所云,根本不能清空缓冲流。清空应该用fflush(stdin) 2、你这个代码就是先输入2个数,然后进入循环,执行第一个printf,然后再输入一个数,接着执行第二个printf 3、建议你看看msdn或者其他的scanf的例子,看看正确的用法
转角天边 2012-11-23
  • 打赏
  • 举报
回复
我也没见过这种清空缓冲流的方法啊
搬砖随想录 2012-11-23
  • 打赏
  • 举报
回复
引用 楼主 ggshelley 的回复:
代码如下: double x,y; while((scanf("%lf%lf",&x,&y)!=2)||x==0||y==0) { printf("!"); scanf("%*s"); printf("?"); } 为什么当我输入是:1空格0回车时,程序只输出"!",接着再输入一个数才显示"?",搞不明白啊!

你的scanf("%*s")语句的问题。
当你输入1空格0后,开始执行while循环体中的语句,printf("!");
然后scanf("%*s")等待你的输入。完成后在执行下条printf语句。
你这种方法貌似不能达到清空缓冲流中的非法输入的目的吧。。
七擒关羽 2012-11-23
  • 打赏
  • 举报
回复

double x,y;
while((scanf("%lf%lf",&x,&y)!=2)||x==0||y==0)
{
printf("!");
scanf("%*s");//输入缓存回车
printf("?");
}
ggshelley 2012-11-23
  • 打赏
  • 举报
回复
引用 5 楼 anhuizhuanjiao 的回复:
引用 4 楼 ggshelley 的回复: 引用 2 楼 anhuizhuanjiao 的回复:引用 1 楼 ywj1225 的回复: C/C++ code?12scanf("%*s"); 想干啥? +1,这是要干啥 为了清空缓冲流的非法输入,向缓冲流读取string数据,但不赋值,就相当于直接丢弃! 个人理解! 用fflush(stdio);
这个我知道啊,但为什么这个程序运行结果是这样子的
转角天边 2012-11-23
  • 打赏
  • 举报
回复
引用 4 楼 ggshelley 的回复:
引用 2 楼 anhuizhuanjiao 的回复:引用 1 楼 ywj1225 的回复: C/C++ code?12scanf("%*s"); 想干啥? +1,这是要干啥 为了清空缓冲流的非法输入,向缓冲流读取string数据,但不赋值,就相当于直接丢弃! 个人理解!
用fflush(stdio);
ggshelley 2012-11-23
  • 打赏
  • 举报
回复
引用 2 楼 anhuizhuanjiao 的回复:
引用 1 楼 ywj1225 的回复: C/C++ code?12scanf("%*s"); 想干啥? +1,这是要干啥
为了清空缓冲流的非法输入,向缓冲流读取string数据,但不赋值,就相当于直接丢弃! 个人理解!
ggshelley 2012-11-23
  • 打赏
  • 举报
回复
为了清空缓冲流的非法输入,向缓冲流读取string数据,但不赋值,就相当于直接丢弃!
转角天边 2012-11-23
  • 打赏
  • 举报
回复
引用 1 楼 ywj1225 的回复:
C/C++ code?12scanf("%*s"); 想干啥?
+1,这是要干啥
wjain 2012-11-23
  • 打赏
  • 举报
回复

scanf("%*s");
想干啥?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧