来到Guet以后也一直在忙,今天终于抽出一小点时间写写学习
总结,太不容易了~~~
过了GCTA的入门考核之后,选择了机器学习方向,但这段时间一直也没能深入学习C语言,也没有加紧学习Python,社团活动太多,好忙啊!
好在还能在leetcode里刷点题,做做作业。
不过我在做作业中也发现了一些挺诡异的问题,比如:
int a,b;
printf("Welcome to my calculator !");
scanf ("%d",&a);
char c = getchar ();
scanf("%d",&b);`
switch(c)
{
case '+' : a += b; break;
case '-' : a -= b; break;
case '*' : a *= b; break;
case '/' : a /= b; break;
}
printf("%d",a);
return 0;
当我自认为这么写就应该没问题的时候,满怀欣喜地按了一下F11。
(目前我用的还是dev,当然最近打算换掉,具体原因等以后再写)
结果,不管输入什么,返回的都是0.00000(好像是这样…反正结果肯定不对),我百思不得其解,就不断调整调试运行,结果还是不行,当时就不明白怎么会这样。
过了几天,实在无法可解,就心生疑惑,难道scanf不能连续输入吗?我这就翻轮子去,结果还真是不能。
第一个scanf可以正常读取数据,但下一个变量c读取的却是回车键,接着scanf读取了输入缓冲区内的键入内容(没具体排查到底是什么内容,反正不是我预期的数字),这就造成非法输入,程序自然不能正常运行。
那么如何解决呢?
终于,在网上找到了两个可行的办法:
- 方法一
这个就是我在几天前做的实训题里用的方法,发现scanf不能正常读入的时候就直接删掉,换成循环输入。就像下面的代码:
while (getchar() != '\n')
/*这里是你想执行的代码段*/
- 方法二
这个是一种文件操作。
fflush(stdin);
由于山人在意运行时间长短以及空间多少这方面的问题,就直接采用了方法二,果然正常运行,完美解决!
PS:山人还是一个菜渣渣,写这个也是纯粹为了给自己看,如果有哪里不正确的,还请大佬指点,山人洗耳恭听!非常感谢!