无限循环怎么解决?
下面的判断语句我输入小数的话就无限循环怎么解决啊?printf("please input:year=");
scanf("%d",&year);
while(year<1)
{
printf("Input error, please input again year=");
scanf("%d",&year);
}
printf("please input:month=");
scanf("%d",&month);
while(month<1||month>12)
{
printf("the %d year nothave %d month please input:month=",year,month);
scanf("%d",&month);
}
printf("please input:day=");
scanf("%d",&day);
while(day<1||day>31)
{
printf("the %d month nothave %d day please input:day=",month,day);
scanf("%d",&day);
oggplay 发表于 2014-7-28 09:57
实际测试,你的输入跟小数点没关系,因为scanf已经把你的格式固定为int了,如果你输入2.9,那么year就等于2 ...
setbuf(stdin, NULL); 还是不要这么写吧
目的是清空但这个应该是关闭吧
感觉最好还是
char ch;
while((ch = getchar())!='\n');
还是这样好点吧 本帖最后由 大黑鱼 于 2014-7-27 18:30 编辑
{:2_25:} scanf后加入fflush(stdin); 其他没看 但是你输入后没清理 本帖最后由 Nightnjl 于 2014-7-27 22:02 编辑
输入小数当然是无限循环呀,小数的话就是year就是0然后你的循环条件就成立了撒。你把条件改成year>0就好了撒 俺来学习一下 路过~~~ 你得创建个函数来判断输入的字符是不是符合规格。 大概! 看了一下! 正如牡丹所说! 应该先清理一下! 不然回车键也就被你输进去了!{:2_27:} 实际测试,你的输入跟小数点没关系,因为scanf已经把你的格式固定为int了,如果你输入2.9,那么year就等于2,这个问题还是你的输入缓冲区问题。可以这么写:
#include <stdio.h>
int main( ){
int year;
int i;
printf("please input:year=");
scanf("%d",&year);
i=year;
setbuf(stdin, NULL);
while(i<0||i>5000)//公元前?公历5000年够用了吧
{
printf("Input error, please input again year=");
scanf("%d",&year);
i=year;
setbuf(stdin, NULL);
}
printf("\n");
return 0;
}
大家好,我年纪有点大了,要是早点认识你们,我也许早都学习了,人生一大遗憾啊 牡丹花下死做鬼 发表于 2014-7-28 10:17
setbuf(stdin, NULL); 还是不要这么写吧
目的是清空但这个应该是关闭吧
1、fflush( ),不建议使用
2、setbuf(stdin, NULL)使stdin输入流由默认缓冲区转为无缓冲区
3、while((c = getchar()) != '\n' && c != EOF)具有可移植性
============================================
等我学习到I/O流再和你讨论,嘿嘿
生吃小甲鱼 发表于 2014-7-28 10:12
大家好,我年纪有点大了,要是早点认识你们,我也许早都学习了,人生一大遗憾啊
亡羊补牢,未为晚也 路过看看 我擦。你想写什么。。用while
用if啊。。 『浴火凤凰』 发表于 2014-7-29 21:07
我擦。你想写什么。。用while
用if啊。。
循环怎么用if?
{:1_1:} 学习一下
页:
[1]