C语言的输入输出必须要遵循scanf和printf的格式,就是你是什么格式你就要输入什么。
一、输入问题
#include <stdio.h>int main(){ int a,b;scanf("%d,%d",&a,&b);printf("a+b=%d",a+b);return 0;}
这个程序我们可以看到它运行的结果是错误的!为什么呢,因为我们在scanf中已经指定了输入格式,输入格式是两个数中间用逗号隔开,所以我们输入时也必须在输入的两个数之间加逗号隔开,我们再次输入试一下
这样就对了!哪假如把逗号改成别的字符,还需要输入别的字符吗?
#include <stdio.h>int main(){ int a,b;scanf("%d+%d",&a,&b);printf("a+b=%d",a+b);return 0;}
我们把","改成了"+",我们再试试直接用空格隔开两个数,看看结果对吗?
答案是错的,那我们在输入的两个数之间加入逗号呢?
答案还是错的,最后我们试着也在输入的时候在两个数之间加入"+"。
哇哦!答案终于对了!所以我们可以得出一个结论就是scanf中的输入格式是什么样的,我们输入时也就必须和其中格式完全一致,否则就会出现读取错误。
我们平时的输入一般以空格隔开,一般不会以逗号隔开,所以我们将程序改成我们日常习惯的输入然后再试试结果。
#include <stdio.h>int main(){ int a,b;scanf("%d %d",&a,&b);printf("a+b=%d",a+b);return 0;}
我们将程序改成这样,我们再输入试试。
没问题了!那我们要是把scanf中的空格去掉呢?
#include <stdio.h>int main(){ int a,b;scanf("%d%d",&a,&b);printf("a+b=%d",a+b);return 0;}
我们把程序改成这样,按理是不是我们输入的时候不用空格直接连着输入两个数呢?不!如果你输入三位数,这样程序怎么知道你是把前两位赋值给了a,还是把前1位赋值给了a呢?这样会造成歧义,所以如果scanf中两个%d之间什么也不加就是默认空格隔开了,我们再试一下程序看看!
好的!没有问题!这样我们就搞清了输入格式。
二、输出问题
先看这样一个程序,猜猜它的输出是什么。
#include <stdio.h>int main(){ int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);return 0;}
你猜对了吗?
有了上面输入问题的铺垫相信大家都可以很快明白为什么是这样输出了。
那我们再试着去掉逗号看看,把程序改成这样。
#include <stdio.h>int main(){ int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("a=%db=%dc=%d",a,b,c);return 0;}
输出自然也是紧挨的。
那我们如果在之间加上空格呢?把程序修改成下面这样。
#include <stdio.h>int main(){ int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("a=%d b=%d c=%d",a,b,c);return 0;}
看看输出
哇哦!输出之间也有了空格,所以我们可以得出结论:输入scanf下的%d之间,因为输入歧义性问题有空格和无空格实际上是一样的,而输出的printf下的%d之间,如果有空格就输出空格,如果没有就不输出。
总结
总之,无论输入与输出,都遵循着一定的格式,我们必须严格按照我们自己所规定的格式进行输入输出,否则就会造成不小的麻烦。细节决定成败,态度决定高度。让我们一起加油!