scanf("%c",&c)不执行

本人新手,刚刚开始学习C语言,在做一个练习时出现了这样的问题。源码如下:
#include <stdio.h>
main()
{int result,month,age;
char c;
printf("\nInpit your result:");
scanf("%d",&result);
if (result<-14||result>1184)
{printf("Wrong Result!Press any key for end...\n");
scanf("%c",&c);/*意图通过这个命令让程序暂停运行,等到键入任意一个值时继续运行*/
exit(0);
}
month=(result+115)/100;
age=(result+115)%100;
printf("Your age is:%d,month:%d",age,month);
}

但是程序出现了这样的问题:那个scanf("%c",&c)不被执行,直接跳到了exit(0)结束程序。问一下各位高手。这是怎么回事?
使用Putchar();报错。不知道为什么。
#include <iostream> 报错。

我重新说一下:可能刚才描述的有问题。没错,是程序终止。另外。while 已经超过了我的知识范围。本人初学而已。我只是想知道为什么这种方法行不通。仍然感谢二楼的解决方案

如果真的没有问题。难道我的机器出了问题?
晕。。。

#include <stdio.h>
main()
{int result,month,age;
char c;
printf("\nInpit your result:");
scanf("%d",&result);
if (result<-14||result>1184)
{printf("Wrong Result!Press any key for end...\n");
scanf("%c",&c);/*意图通过这个命令让程序暂停运行,等到键入任意一个值时继续运行*/
exit(0);
}
month=(result+115)/100;
age=(result+115)%100;
printf("Your age is:%d,month:%d",age,month);
}

scanf()函数是从键盘缓冲区取数据,而不是直白的理解为我按一个键它才取走,因为你按下的键都被存入缓冲区,也就是说。你的这个函数没有起作用是因为你的键盘缓冲区还有字符,于是scanf()就不等你按下键,直接从缓冲区取走了。
记住scanf()不是直接和你打交道,你和scanf()之间还有个键盘缓冲区这样的中间代理人。

所以你的程序会出现没等你输入就直接结束了。

解决办法:
在scanf()前加入fflush(stdin);语句,你先不必观这个函数怎么来的,你只需要知道,你这样做了,键盘缓冲区就被清空。

以上是针对scanf()来说的。
但就你的程序目的来说。你用scanf()来让程序暂停很不好!

解决办法:
调用dos命令:
把scanf()语句换成 system("pause");
就可以让程序暂停了。这个语句是所有编译器都支持的。而且很安全。
不过这样做调用的是dos操作系统命令,只在win系统下用。不过已经满足你的连续需求了。

最后,你的程序结构有店不好。
你的
if (result<-14||result>1184)
{printf("Wrong Result!Press any key for end...\n");
scanf("%c",&c);/*意图通过这个命令让程序暂停运行,等到键入任意一个值时继续运行*/
exit(0);
}
你暂停继续运行之后,程序马上退出了,你后来的语句就没法执行了,我相信这不是你的本意吧。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-07-30
都什么啊?程序没有错,只是你还不完全了解scanf()
在第一次输入result的时候需要以一个回车结束也就是'\n'而这个字符仍然被保留在流中,当执行下一次scanf()时会自动把'\n'当作输入给c赋值,就样就形成了你以为没执行但实际上已经执行完了。
如果想这么用必须在下一次执行scanf()前清空流:
fflush(stdin);
scanf("%c",&c);就ok了
或者就最好用getch()实现,但需要连接#include <conio.h>
希望你能明白。顺便说一下楼上有的说用getchar()这个和用scanf()的结果是一样的因为getchar()也是从流中读取只有getch()从控制台无回显地取一个字符。
第2个回答  2008-07-30
scanf("%c",&c);
exit(0);

你把这两句改成 putchar();试试
你的问题我也不知道为什么,但要实现按任意键以继续的功能,一般就用句putchar();就可以了

你在一开始加句
#include <iostream>
试试
第3个回答  2008-07-30
if 有没有结束程序的功能
while 只有跳出该循环的功能

应该用while 和if一起,等到判断正确了就跳出while就能实现你的愿望了.
初学要学会调试功能,知道程序是怎么走了 哈哈
祝你好运!!!
第4个回答  2008-07-30
没问题啊
第5个回答  2008-07-30
fflush(stdin);
scanf("%c",&c);

参考资料:NB

相似回答