scanf 与 printf 输入输出函数

本文详细介绍了C语言中的格式化输入输出函数scanf和printf。scanf通过控制字符串进行格式化输入,需要变量地址作为参数,而printf可以混合输出各种类型数据,两者在参数列表和控制符匹配上有共同点和不同点。文中还讨论了控制符、间隔符、占位控制和类型控制符等概念,以及在使用时应注意的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

格式化输入输出函数

所谓格式化输入输出,就是不再如同上一节介绍的函数那样,都是单纯地输入输出一个字符或者一行文字。格式化输入输出,就是要将各种类型数据(包括整型、浮点型以及字符串等类型的常量或变量),混合在一起进行输入输出。在C语言中格式化输入函数主要使用scanf(或scanf_s)函数,格式化输出函数主要是printf函数。

格式化输入输出函数,能够对各种类型的数据混合地输入输出,主要是依靠一个格式控制字符串来实现的。在格式控制字符串内通过%符号加字母,对输入输出的目标数据的类型进行预先标明。控制字符串内的%符号后面的字母,我们称之为输入输出控制符。控制字符串内的每一个控制符,在控制字符串后面必须有一个相应类型的常量、变量或表达式。控制串内的控制字符与控制串后面的输入输出目标,在类型与个数上必须是一一对应的,否则在输入输出时就会出现混乱。

scanf函数

scanf函数从标准输入流中,读取用户输入一段或多段文字,并将每段文字转换到各种类型的变量中去。

函数格式:int scanf( const char *format, ... );

scanf函数主要分为控制字符串与列表参数两部分。控制字符串也就是双引号内的部分,只允许放两种文字:控制符与间隔符。控制字符串内多段控制符之间,只能是空格、逗号或者单独指定的某种间隔符。如果在控制串内随意加入一些文字,尤其是想把要打印的文字放入scanf函数的控制字符串内,那将是非常错误的。例如:scanf(“请输入你的工号%d和姓名%d”, &n, &s); 这样的语法不但会被笑掉大牙,而且程序运行的结果也不如所想。

[例3-7] 测试scanf的控制字符串

//scanf的控制字符串内除了控制符外,就只能时间隔符号了。

#include <stdio.h>

int main( )

{

int nNumb;

char sName[20];

//下面这行代码是一个错误的scanf的用法

scanf("请输入你的工号%d和姓名%s", &nNumb, &sName);

printf("你输入的工号是:%d \n", nNumb);

printf("你输入的姓名是:%s \n", sName);

return 0;

}

/* printf("请输入一个员工的工号、姓名【以空格间隔】\n");

scanf("%d %s", &nNumb, &sName);

*/

将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:

a)运行之后观察是否有打印出“请输入……”的提示文字,输入一个工号和姓名后能否打印出输入的内容;

b)最好能在调试模式下单步执行,在监视器内观察scanf函数执行后,两个变量内的数据是否发生了变化;

c)用下方注释内的两行代码,代替语法错误的scanf那一行代码,再重新编译运行并查看结果;

d)最好能在调试模式下单步执行,观察scanf函数执行后两个变量内数据的变化情况。

结论:如果你想要先对用户提示再让其输入数据,你就必须用两行代码来实现。而不能像[例3-7]那样,直接将要输出的文字放在scanf的控制字符串中。

scanf函数的参数列表

在C语言中只有极少数的函数,带有…这样的参数格式,scanf与printf函数就属于这种特殊的函数。

这三个点代表控制字符串之后的参数列表中,参数的个数不受限制。普通函数的参数个数必须是固定的,比如getchar函数的参数个数是0个,putchar函数的个数是1个。如果调用普通函数时,参数的个数或类型不匹配,编译器在编译时都会报错。

值得注意的是:scanf的参数列表内,带入的每个变量都必须用&符号取变量的地址。取变量的地址带入之后,在输入数据之后scanf才将用户输入的数据,能按照每个变量的地址送入到对应的变量中。

[例3-8] 测试scanf的参数列表

//参数列表中的变量忘记了取地址的话,问题很严重。

#include <stdio.h>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值