求助,这段程序错误在哪?

曹宇 2011-11-12 01:48:31
#include <stdio.h>
void main ()
{
char a,b,c;
printf ("你是傻逼么?\n请输入y或n");
scanf ("%c",&a);
printf ("%s",((a=='y')?"你果真是SB\n":"你还不太傻\n"));
//--------------------------------------------
printf ("那么你有蛋么?\n输入Y或N");
scanf ("%c",&b);
//--------------------------------------------
if (b=='y') printf ("那么你蛋疼不?");
else printf ("要不要给你装个蛋?\n请输入Y或N来选择");

scanf ("%c",&c)
if (c=='y') printf ("每位收费让人民币5元,童叟无欺,请自备鸡蛋一个!");
else printf ("那你还在这混?回家玩儿蛋去!");
}


另外我给后面的语句用注释符号屏蔽了一条一条检查,前面正确的时候只能运行到询问你是否有蛋 然后我无论按什么键就会退出,为啥?


或者这个程序
#include <stdio.h>
void main ()
{
char a;
char b;
char c;
printf ("你是傻逼么?\n请输入y或n");
scanf ("%c",&a);
if (a=='y') printf ("你果然是个傻逼");
else printf ("你还有点理智");
//break;
printf ("你有蛋么?y/n?");
scanf ("%c",&b);
if (b=='y') printf ("蛋疼不?");
else printf ("没蛋那就滚蛋");


}

我编译了 没错误

但是为什么只能输入一次 第二次就不能输入一输就退出。
第一次输入后就提示请输入任意键退出。。。??
为啥??
...全文
70 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
曹宇 2011-11-13
  • 打赏
  • 举报
回复
恩,谢谢了!书上在描述输入函数的时候说明了机器只能接受第一个,后面的要放入键盘缓冲区留个下个需要读取的函数。。。
我没想到这一点。。。
呵呵!
谢谢啦!
biaobiao99 2011-11-12
  • 打赏
  • 举报
回复
scanf("%c",&a);
while(getchar()!='\n') ;

加上后面这条语句, 就算 你输入“yes” 它也只接受 第一个‘y’ 字符, 后面的其他都清除掉直到换行符(换行符也 清除掉了); 这样 就不影响 你后面的 scanf(); 了
尘缘udbwcso 2011-11-12
  • 打赏
  • 举报
回复
scanf()和getchar()函数是从输入流缓冲区 中读取值的,而并非从键盘(也就是终端)缓冲区读取。而读取时遇到回车(\n)而结束的,这个\n会一起读入输入流缓冲区的,所以第一次接受输入时取走字 符后会留下字符\n,这样第二次的读入函数直接从缓冲区中把\n取走了,显然读取成功了,所以不会再从终端读取!因此后面只要加上fflush(stdin)函数释放缓冲区数据就可以了.

解决办法:可以在scanf()函数之 后加个fflush(stdin);,还有加getch(); getchar();也可以,
尘缘udbwcso 2011-11-12
  • 打赏
  • 举报
回复

scanf()和getchar()函数是从输入流缓冲区 中读取值的,而并非从键盘(也就是终端)缓冲区读取。而读取时遇到回车(\n)而结束的,这个\n会一起读入输入流缓冲区的,所以第一次接受输入时取走字 符后会留下字符\n,这样第二次的读入函数直接从缓冲区中把\n取走了,显然读取成功了,所以不会再从终端读取!因此后面只要加上fflush(stdin)函数释放缓冲区数据就可以了.

解决办法:可以在scanf()函数之 后加个fflush(stdin);,还有加getch(); getchar();也可以,
lengxujun 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 programmingpower 的回复:]
getchar()意思就是用两个getchar()么?

fflush(stdin);
清除缓存这样的命令书上为啥没有呢?

谢谢啦!
[/Quote]

读一读《C Primer Plus》或者》《The C Programming Language》。
曹宇 2011-11-12
  • 打赏
  • 举报
回复
getchar()意思就是用两个getchar()么?

fflush(stdin);
清除缓存这样的命令书上为啥没有呢?

谢谢啦!
拥有你才更好 2011-11-12
  • 打赏
  • 举报
回复
这个问题太常见了,处理办法也特别多。
你可以用getchar()去吃掉你输入前一个字符后按下的回车键。
無_1024 2011-11-12
  • 打赏
  • 举报
回复
scanf ("%c",&a);
fflush(stdin);
在么一个scanf后面加一个这个就行了
曹宇 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hnuqinhuan 的回复:]
在每次输入后要清楚缓存 fflush(stdin);
[/Quote]

非常感谢之,果然搞定了!
fflush(stdin);这段语句在书上能学到么?
我就怕语法学了 可是在软件使用上有很多类似fflush(stdin);的东西没学到怎么办?

谢谢了!
無_1024 2011-11-12
  • 打赏
  • 举报
回复
在每次输入后要清楚缓存 fflush(stdin);

69,371

社区成员

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

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