scanf()函数的用法

1 scanf()函数简介

scanf()函数的作用是从标准的输入流中读取数据,并将读取到的数据保存到指定的变量中。其格式为

int scanf( const char *format [, argument]... );

其中,参数format指定了读取数据的方式;argument是一个参数列表,其类型是变量的地址,scanf()函数读取到的数据就保存到这些变量中。scanf()函数的返回值是保存数据的参数的数量,即对参数列表argument中多少个参数进行了赋值。

2 format参数

format参数是一个字符串。该字符串包含了格式说明符、空白字符和其他字符。

2.1 格式说明符

格式说明符也就是format参数中的百分号%。当scanf()函数遇到其参数中的格式说明符时,就开始从数据流中读取数据,并将数据转化为格式说明符指定的格式,保存到参数列表中的相应参数中。例如

int i;

scanf(“%d”, &i);

scanf()函数中的格式说明符%使得该函数开始读取输入数据流中的数据,并将该数据保存到参数i中。

2.2 空白字符

空白字符指的是空格符(‘ ‘)、tab符(‘\t’)和新行符(‘\n’)。

2.2.1 format格式与输入流匹配

当scanf()函数遇到空白字符时,该函数会读取输入数据流中连续的空白字符,但是不会存储这些字符,直到读取到输入数据流中非空白字符为止。例如

int i;

char ch;

scanf(“%d %c”, &i, &ch);

此时在控制台输入窗口中输入“123 a”。对于scanf()函数的format参数,首先第一个格式说明符%使得scanf()函数从数据流中读取“123”并且将其转换为整形保存到变量i中;之后对于format参数中的空格符,scanf()函数从输入数据流中读取连续的空白字符,但是并不将该字符保存到参数列表中的参数;最后第二个格式说明符%使得scanf()函数从数据流中读取“a”,并将其转换为字符类型保存到变量ch中。

2.2.2 format格式与输入流不匹配

(1)当format包含空白字符而输入流不包含时

当format包含空白字符而输入流数据中不包含空白字符时,即

scanf(“%d %c”, &i, &ch);

而此时在控制台输入窗口中输入“123a”,scanf()函数的format参数的第一个格式说明符%使得scanf()函数从数据流中读取数据,需要注意的时,虽然此时输入的数据中不包含空白字符,但是scanf()函数无法将其中的“a”转换为整形,因此第一个格式说明符%使得scanf()函数从数据流中读取的数据为“123”,转换为整形后保存到变量i中;之后,在format参数中是一个空白字符,在“2.2.1 format格式与输入流匹配”中提到,空白字符使得scanf()函数读取输入数据流中连续的空白字符,但是此时输入数据中不包含空白字符,因此format参数中的空白字符并没有起作用,即此时scanf()函数并没有读取输入数据流中的数据;最后,format参数的第二个格式说明符%使得scanf()函数从数据流中读取数据“a”,并将其转换为字符类型保存到ch中。此时,i的值是123,而ch的值是’a’。

(2)当format不包含空白字符而输入流包含时

当format包含不空白字符而输入流数据中包含空白字符时,即

scanf(“%d%c”, &i, &ch);

而此时在控制台输入窗口中输入“123 a”,scanf()函数的format参数的第一个格式说明符%使得scanf()函数从数据流中读取数据“123”,之后format参数的第二个格式说明符%使得scanf()函数从数据流中读取数据,需要注意的是,此时读取到的数据不是“a”而是空格符。因此,i的值是123,而ch的值是’ ’。

2.3 其他字符

format参数中的其他字符指的是除了空白字符和格式说明符之外的其他字符。format参数中的其他字符要与输入数据流中的字符匹配,例如

scanf(“%d,%c”, &i, &ch);

此时,在控制台输入窗口中输入“123,a”,才能保证i的值是123,ch的值是’a’。如果format参数中的其他字符与输入数据流中的字符不匹配,则scanf()函数停止读取数据。

如果在控制台中输入“123a”,此时i的值是123,而ch的值是调用scanf()函数之前的值。

3 星号符号

格式说明符%之后除了跟指定数据类型的字符之外,还可以跟星号*。例如

%*d

scanf()函数遇到该符号时,只是从数据流中读取数据,但是并不把读取到的数据存储到参数列表中的参数。例如

scanf("%*d %d%c", &i, &ch);

在控制台输入窗口中输入“123 456a”,此时,i的值是456,而ch的值是’a’。

  • 12
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值