C语言的基本的输入输出

C语言的基本的输入输出

C语言的基本的输入输出

prinf()函数 在头文件stdio.h中

printf()函数是格式化输出函数,一般用于向标准输出设备按照规定格式输出信息。
printf()函数的格式为:
printf("<格式化字符串>",<参量表>);
printf()函数的另一种函数格式为:
int printf(const char *format, 参量表) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。
其中格式化字符串包括两部分的内容:
(1)一部分是正常的字符,这些字符将按照原样输出。
(2) 另一部分是格式化字符,以"%"号开始,后面跟一个或几个格式参数,用来确定 输出内容的格式。
参量表:
参量表是需要输出的一系列参数,其个数必须与前面的格式化字符串中的格式参数个数一样多
,参量表里的各参数用 " , "符号分开,且参量表里的顺序与前面的格式化参数一 一对应。否则
会出现一些意想不到的错误。
printf函数对参量表中各量求值的顺序是自右至左进行的。
但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右,
printf()函数的返回值为实际控制输出的字符数
例:C语言的基本的输入输出
可以看出第一个printf()它输出了100,总共3个字符,返回值为3。
C语言的基本的输入输出
可以看出第一个printf()的返回值为4,这是因为输出的有100还有\n总共4个字符所以返回值为4.
C语言的基本的输入输出
输出了两个空个加100加\n总共6个字符。
下面举一下printf()输出的例子:
C语言的基本的输入输出
hello+空格是正常的字符按原样输出,后面的按照格式参数控制输出。
例:
C语言的基本的输入输出
分析一下:输出语句从内到外依次输出,345先输出,345是三个字符,所以输出3,3是一个字符输出1。

scanf()函数 在头文件stdio.h中

scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取输入的信息。
scanf()函数的格式为:
scanf("<格式化字符串>",<地址表>);
scanf()函数的另一种函数格式为:
int scanf(const char *format, <地址表>) ;函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。
其中格式化字符串包括三部分的内容:
(1)格式说明符:格式化说明符与printf()函数中的格式说明符基本相同。
(2) 空白字符:空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。
(3) 非空白字符:一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。

注意: 地址表是需要读入的所有变量的地址,而不是变量本身。
如果是一般的变量,通常要在变量前加上一个" & “(取地址符);但输出时是变量名。
如果是数组,用数组名就代表了该数组的首地址。
如果是指针,直接用指针名本身,不要加” * "。

返回值: scanf()的返回值是成功匹配并赋值的输入项个数。 如果到达文件尾,它返回EOF(-1)。
C语言的基本的输入输出

例子:

C语言的基本的输入输出
赋值了两个返回值为2。
C语言的基本的输入输出
可以看出:空格自动剔除掉了(这里的空格被剔除是因为格式不是字符,如果是字符就是另一种情况),“ ,”非空白字符在输入时是必须按照格式化字符串的格式输入,它也被剔除了。
C语言的基本的输入输出
这里输出为这样是因为,把1给a,空格给b,2给了c。
在输入字符数据时。若格式控制串中无非格式字符,则认为所有输入的总府均为有效符。
C语言的基本的输入输出
这里输出这个是因为:把1给a,空格因为格式控制字符串里有剔除了,把2给b,这时候会有疑问,接下来有好几个空格
就算一个被剔除了还有好几个可以给c,为啥是把3给呢?,这是因为scanf()再剔除空格时如果是连续的一并剔除了直到
是非空格赋值。
如果在格式控制中加入空格作为间隔,则输入时各数据之间可加空格。
下面举一个比较重要的例子:
C语言的基本的输入输出
运行该程序,输入一个字符’ 1 '后回车(要完成输入必须回车),在执行scanf("%c",&a); 时’1’赋值给了a
但是回车符(\n)仍然留在缓冲区内,执行语句scanf("%c",&b);时,回车符(\n)赋值给了b。
要解决有两种方法:
(1)
将两个scanf()语句合并到一块。 例:scanf("%c%c",&a,&b);
(2)
可以加一个清楚缓冲区的函数fflush(stdin)。
C语言的基本的输入输出

C语言中,scanf("%d", &a),在设计这个语法结构时为什么要有地址符&,没有行不行?
答:
scanf是要把输入的东西赋给参数,但是c语言是值传递,这样函数内部的a和你传给它的a
不是同一个变量,达不到赋值的目的。所以要取地址来操作这样才能改变a的值。