在新生群里甚至可以聊C语言

最近有幸考上大学了,耶,终于从高中熬出来了。
然后欣然加了我们的新生群。

新生群里首先是一堆学长和新生在群相册爆照,我不以为意,因为很明显,我的颜值才应该是最高的。
打开群相册以后我发现,emmmm,开学以后可能这个学校只有我是死肥宅了。

害怕.gif

今天中午吃饭的时候想开空调,拿手机正准备打开遥控器,突然发现QQ又99+了,看了一下未读信息,发现新生群聊的很high。
打开新生群,发现有人问了一个问题。

1

我心里突然咣当一声,哇,他们暑假都开始学C语言了,我暑假好像啥也没学会啊,我怕是开学要输在起跑线上。
然后我又发现,不对,为什么软工的人在计科新生群里问问题。。。。。。

不过这不是重点,正可谓软工计科一家亲,况且天下谁人不学C,我也想凑个热闹,看了一下这个代码。
很明显,尽管是个缩略图,我还是发现第一行不是#include "stdio.h",于是我回复了两句,看看能不能收获一波粉丝。

2

我不禁感叹这照片右下角的暂停标志,看来现在B站啥都有,肥宅快乐APP实锤了。

他试了试,发现加上#include之后可以运行了,欣然感谢,但是他又发现问题没那么简单,因为好像有什么怪怪的。

3

嗯?为什么怪怪的?打开大图看一看。

4

我一看,不得了,这标题里的Lenovo吸引了我的注意。最近联想R7000P发售,刚发售不到几秒就清仓卖光了,就很气人。
但是很明显,联想R7000P卖光了跟这个问题并没有什么关系,那具体是什么问题呢?一看,这个程序输出了maxmum=2,显然这不对。
看来这确实是有问题。

问题出在哪里?
带着这个问题,我找到了我的好朋友,经过他提醒,我扣了一个差不多的代码,点运行,走。

发现输出结果居然是2.000000,喵喵喵???
后来经过dalao学长提醒,原来是输入不应该加逗号。

但是新手难免喜欢问为什么,他问了为什么加上这个逗号程序就会输出2而不是3呢?学长们给出了解释。

那么这很明显也超出了我的理解范畴了,因为我也啥也不会,我看不懂是什么意思。

那么我试了试,先输出a和b的值

#include "stdio.h"
int main(){
  float a,b;
  scanf("%f",&a);
  scanf("%f",&b);
  printf("%f",a>b?a:b);
  printf("%f",a);
  printf("%f",b);
  return 0;
}

输入2 3,输出结果是3.000000 2.000000 3.000000(空格是为了观察加的,实际输出结果不应有空格),一切安好。输入2, 3之后就很神奇了,输出了2.000000 2.000000 0.000000
为什么b是0呢?是不是scanf没给b数字3?再给b来个初始值1,发现输出变成了2.000000 2.000000 1.000000

那么为什么呢?
后来我翻了翻C Primer Plus找到了答案。

吃完饭后,我去书柜里找到了吃灰的C Primer Plus(第五版),除了身上落下了岁月的痕迹,她还是曾经的模样,没有变。

那么我在书里看到了啥子?

那么我看到这段文字的第一反应就是,太长不看。
后来硬着头皮看了看,发现,哇塞,原来是这样。

2, 3输入以后,第一个scanf希望要的是%f,所以按照规则,从头读,读到了2,再往下读一个,发现不是数字,是非数字字符,所以第一个scanf咔擦停住,按照给的a的指针,给a赋值为2.000000。
那么第二个scanf,根据规则,“在程序下一次开始读取输入时,它将从前面被放弃的那个非数字字符开始。”,那么scanf应该是从上一个非数字字符,也就是逗号开始读,发现逗号是非数字字符,所以停止,相当于scanf啥也没读。
可能有这样的疑惑:那回车符和空格咋没事呢?因为还是根据规则,回车、空格和制表符是特殊情况,就是用来整分割使的,除非读的是%c,否则人家scanf就不搭理这个字符。

那么通过这个故事可以得出什么呢?
输入输出还是用iostream吧2333333

看来大家暑假都不是用来玩的,我也得学点什么了!
QUQ

上一篇
下一篇