黑马程序员——c语言基础:scanf函数

本文介绍了C语言中scanf函数的基本用法,包括其阻塞式特性,如何接收用户输入并存储到变量中。文章详细阐述了scanf函数的格式,提供了示例代码展示其工作原理。此外,还总结了使用scanf函数时的多个注意事项,如输入数据类型的匹配、域宽设置、跳过输入数据以及避免使用换行符等问题。

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

1.scanf函数的介绍及使用

1)scanf函数是一个阻塞式函数:函数执行后,会等待用户输入,如果用户不输入任何内容,它会一直等待。

2)scanf函数的作用:接收用户从键盘输入的内容,并保存到指定的变量中。

3)scanf函数的格式:scanf("格式控制符",输入项的地址列表);

示例:

#include <stdio.h>

// 实现在键盘上输入年龄,然后打印出来

int main(int argc, const char * argv[]) {

    

    // 1.定义一个变量,用来储存用户输入的数据

    int age = 0;

    

    // 2.提示用户输入年龄

    printf("请输入年龄:\n");

    

    // 3.接收用户输入的数据,并传递给变量age

    scanf("%d",&age); // &为取地址符

    

    // 4.打印用户输入的年龄

    printf("您输入的年龄是:%d",age);

    

    return 0;

}


2. scanf函数的使用注意事项

1)scanf函数声明在头文件stdio.h中,所以要调用scanf函数,应先包含头文件stdio.h。

2)当用%d格式进行输出时,如果用户输入的是小数,则变量只保存整数部分。

3)当用%f格式输出实数时,可以用%mf格式,但不允许用%m.nf格式。

4)  当用%d%d格式输出两个整数时,输入的两个整数之间以空格或回车或tab隔开,不能用逗号等其他符号隔开。

5)如果在输入时,输入了多个空格、回车、tab都会被系统忽略。

6)如果要获取的内容是多个整数,中间输入了多个空格、回车、tab都会被系统忽略。

7)当需要接受数值型和字符型混合数据时,可以在输入的两个数据间用逗号等分隔符隔开:

   scanf("%d,%c,%d",&a,&ch,&b); // 输入时用逗号隔开:23,a,98

8)关于域宽:可以用一个十进制数指定输入数据宽度,系统自动按域宽输入数据:

   scanf("%5d",&a);  // 设置域宽为5,即使用户输入多位:12345678 也只会读取前5位,即:12345

9)关于“*”:表示按指定格式读入数据但不赋予相应的变量,作用是跳过相应的读入数据:

   scanf("%d%*d%d",&a,&b); // 假如用户输入 23 12 34,则会将23赋值给a,将34赋值给b,而跳过12

10)scanf中尽量不要使用\n。

   如果使用了:scanf("%d\n",&age); // 要在输入值后,再输入\n,或者在输入值后,随便输入一个内容。


3.scanf函数运行原理


1)当用户输入内容后,用户输入的内容会被保存在scanf的输入缓冲区中,然后,scanf函数会根据格式控制的字符要求,从输入缓冲区依次取它想要的内容。如果从缓冲区中取得的内容和我们的格式要求一致,则把值保存到变量中,如果格式不一致,则不修改变量的值:

scanf函数要求按%d%c%d格式输入,用户输入顺序为:23,空格,l,空格,34。23是%d格式,输出23,空格是%c格式,输出空格,l不是%d格式,输出b原来的值-1。所以最后的输出结果为:23, ,-1。


2)如果scanf缓冲区中还有内容,则scanf不会提示我们再次输入:


以上代码调用了三次scanf函数,要求用户依次整形,字符型,整型数据。但是用户一次性输入了23l89,这时scanf缓冲区中储存的值为:23,l,89。第一个scanf函数只取出了23,缓冲区里还有l和89。所以第二个scanf函数不会要求用户再次输入,而是直接取出l。这时缓冲区中还有数值89,同理,第三个scanf函数也不要求用户输入,而是直接取出89。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值