请原谅我的标题写的有些夸张,但实际情况往往比想象的更离奇。好了进入主题。小A最近正在学习C语言,这时候小A上小学的儿子小B跑过来问:“爸爸,这道数学题怎么算?”,小A看了看题目说“一百天是多少个礼拜零多少天?”
好了,我们的小A,看到题目后不假思索,一迅雷不及掩耳盗铃之势写下了如下代码:
#include <stdio.h>
int main(void)
{
int days;
int week,day;
printf("please in put a number:");
scanf ("%d",&days)
printf("%d are %d week(s) %d day(s)\n",days, days/7,days%7);
return 0;
}
这是小A自己测试的结果:
小A高兴地说:“来儿子,看爸爸给你算。“
这时候,小B小心翼翼的敲下:一百天, 然后把计算结果填在了作业本上。不料第二天小B哭着鼻子说:”爸爸,你骗我,答案是错的,全班就我一个人的答案是错的。~~(>_<)~~ “,小A说怎么可能,拿过来给我看看,小B把作业本给爸爸看。
小A说,这个只能输入数字,小B说:”爸爸,一百天就是100天 啊,“
小A想了想,最后改了程序如下:
#include <stdio.h>
int main(void)
{
int days;
int week,day;
printf("please in put a number:");
while (1)
{
int ret;
ret=scanf ("%d",&days);
if(ret == 1)
{
break;
}
printf("输入有误,请重新输入:");
while (getchar() != ‘\n‘);
}
printf("%d are %d week(s) %d day(s)\n",days, days/7,days%7);
return 0;
}
然后小A自己又测试了一下:
然后小B说让他再试试,这次小A紧紧的看着小B。意想不到的事还是发生了。(呵呵,小B真调皮)
小A看到这种情况仔细想了想100tian很明显不符合输入,即使结果是正确的也不行,我是处女座,再改:
#include <stdio.h>
int main(void)
{
int days;
int week,day;
printf("please in put a number:");
while (1)
{
int ret;
ret=scanf ("%d",&days);
if(ret == 1 && getchar() == ‘\n‘)
{
break;
}
printf("输入有误,请重新输入:");
while (getchar() != ‘\n‘);
}
printf("%d are %d week(s) %d day(s)\n",days, days/7,days%7);
return 0;
}
测试结果:
小A这次觉得可以了,然而万万没想到,淘气的小B还是那么淘气:
哎,我们可怜的小A被儿子小B这么疯了。小A抬起沉重的手指再改。
#include <stdio.h>
int main(void)
{
int days;
int week,day;
printf("please in put a number:");
while (1)
{
int ret;
ret=scanf ("%d",&days);
if(ret == 1 && getchar() == ‘\n‘ && days >= 0)
{
break;
}
printf("输入有误,请重新输入:");
while (getchar() != ‘\n‘);
}
printf("%d are %d week(s) %d day(s)\n",days, days/7,days%7);
return 0;
}
完了小A再测试:
明明输100,为什么不运行了? 然后小A又敲了一次100
这次为什么又执行了,于是小A仔细看了看程序,终于找到了,原来是这句引起来的。
if(ret == 1 && getchar() == ‘\n‘ && days >= 0)
{
break;
}
printf("输入有误,请重新输入:");
while (getchar() != ‘\n‘);
因为键盘输入一个负数,前面两个条件都满足,只有第三个不满足,在程序中,程序把内存中的-100 放到 days中去了,然后释放内存,也就是说内存里现在什么都没有了,所以while (getchar() != ‘\n’);这句话就一直等待用户输入。然后被读走,导致程序没有反应。知道原因后小A这样改了程序:
#include <stdio.h>
int main(void)
{
int days;
int week,day;
printf("please in put a number:");
while (1)
{
int ret1,ret2;
ret1=scanf ("%d",&days);
if(ret1 == 1 && (ret2 = getchar()) == ‘\n‘ && days >= 0)
{
break;
}
printf("输入有误,请重新输入:");
if (ret1 != 1 || ret2 != ‘\n‘)
{
while (getchar() != ‘\n‘);
}
}
printf("%d are %d week(s) %d day(s)\n",days, days/7,days%7);
return 0;
}
小A看到这里心里暂时是满意了。
谁知道后面还有一只更大的虫子,愿小A学习之路多钻研。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zhangli401x/article/details/47752207