入Guet以来第一次学习总结

来到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读取了输入缓冲区内的键入内容(没具体排查到底是什么内容,反正不是我预期的数字),这就造成非法输入,程序自然不能正常运行。

那么如何解决呢?

终于,在网上找到了两个可行的办法:

  1. 方法一

这个就是我在几天前做的实训题里用的方法,发现scanf不能正常读入的时候就直接删掉,换成循环输入。就像下面的代码:

while (getchar() != '\n')
		/*这里是你想执行的代码段*/
  1. 方法二

这个是一种文件操作。

fflush(stdin);

由于山人在意运行时间长短以及空间多少这方面的问题,就直接采用了方法二,果然正常运行,完美解决!

PS:山人还是一个菜渣渣,写这个也是纯粹为了给自己看,如果有哪里不正确的,还请大佬指点,山人洗耳恭听!非常感谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值