前言:从本质上来说,C语言的全部功能都是通过各种函数实现的,故可认为C语言是典型的函数式语言。
输入函数
scanf函数:(运用该输入函数的时候不要忘记写取地址符号&)以回车键表示输入完毕
相必各位在刚开始学习输入函数的时候,输入东西时会这样写,就比如请输入两个整型数字,大家很可能会把着两种情况搞混淆:
代码运行时:
(一般情况)
输入多个数字时:需要用空格或者换行来间隔这多个数字(scanf函数会自动吞掉空格和换行的)
输入多个字符时:不需要,因为空格和换行本来就是字符。
scanf函数内部格式控制符之间,如果要用东西来间隔开多个格式控制符号,标准情况下只能用空格间隔开来,前提是如果你想输入数字时只用空格或Tab键或换行来间隔所输入的数字,如果你想不用任何东西来间隔所输入的字符。以下是输入东西时的一般情况。
情况1、当输入函数scanf运行时,两个输入数字或者字符没有用空格或换行或Tab键间隔开时
数字:
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d%d",a,b);
return 0;
}
这时我们运行它。(以输入1和2两个数字为例)
如果我们输入数字的时候没有在这两个数之间加上空格或者换行(不管多少个都可以,只要有就行)我们以空格为例,那么就会输出这样。
为什么呢?
原因很简单,数字1和2之间如果没用空格隔开,那么系统会自动把1和2两个数字判定为一个数字12,这时你再按下换行键光标就会下移,因为它想找到第二个数字,直到你再输入第二个数字,再按下换行键,它才判定输入完成,才能正常运行起来。
而正常运行的时候是这样的:
或者说是这样:(以换行为例)
由两种输入方式及导致其输出结果的原因是:scanf函数运行时会吞掉换行符和空格符
字符:
#include<stdio.h>
int main()
{
char a,b;
scanf("%c%c",&a,&b);
printf("%c%c",a,b);
return 0;
}
这时我们运行它:(以输入j和k两个字符为例)
为什么会如此呢?
因为j和k系统会自动把它们认为是两个字符,所以就不需要在两个字符间加一个空格了,至于当程序运行时,在输入字符时,在字符间加空格对其输出的影响,下面就会讲到。
比如当给输入的两个字符加一个空格时:
、
因为scanf函数的格式控制字符间没有用空格(标准情况下)来占位,这时当scanf函数运行时,j会赋给a,而空格会赋给b,于是就输出这样的结果了。
情况2、
当输入函数scanf中两个输入数字或字符用空格间隔开时
数字:
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d%d",a,b);
return 0;
}
(不要忘记在运行时,输入数据时,要用空格或者换行或者Tab键将数据间隔开来)事实上对于数据的输入,scanf函数内的格式控制字符是否被间隔开来对于数据的正常输出都没有太大的影响,只要记得scanf函数运行时,输入数据时要用空格或者换行或者Tab键将数据间隔开来就可以了
字符:
而对于字符的输出就有影响了
#include<stdio.h>
int main()
{
char a,b;
scanf("%c %c",&a,&b);
printf("%c%c",a,b);
return 0;
}
这时我们运行它:(以输入j和k两个字符为例)
输入字符时没有用空格间隔开,也不需要。
空格也是一个字符,如果当scanf函数运行时,你用空格或Tab键或换行来间隔 所输入的两个字符,(以空格为例)你会得到这样的输出结果:
为什么呢?
因为scanf函数的格式控制字符间有空格占着,这是就不怕会有将空格或换行或Tab赋值给字符变量的情况了。
(二般情况)
一般情况下,对于“%d%d”的数据输入,中间不能用“,”或“;”等方式分割,二般情况下,你可以在scanf函数内将格式控制字符串变为“%d,%d”或“%d;%d”的形式,此时我们的正确输入形式为:
1,2
或者
1;2
好了,就讲到这里了,写这个实在太累了······
标签:字符,函数,换行,scanf,空格,应用,输入 From: https://blog.csdn.net/2401_87630688/article/details/143420360