c语言小结——scanf

在给给变量输入值时,我们需要用到scanf。scanf()函数用于读取用户键盘输入,当用户按下回车键时,输入量会存入变量中。

scanf的基本用法

其用法与printf类似。

int c=0;
scanf("%d",&c);

&为取地址符,就是把输入的变量存入c的地址中。 

scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。

scanf()处理用户输入的原理,用户的输入先放入缓存区,当按下回车键后,按照占位符对缓存进行解读。

解读用户输入时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条 件的字符为⽌。

#include <stdio.h>
int main()
{
 int x;
 float y;
 
 // ⽤⼾输⼊ " -13.45e12# 0"
 scanf("%d", &x);
 printf("%d\n", x);
 scanf("%f", &y);
 printf("%f\n", y);
 return 0;
}

上⾯⽰例中, scanf() 读取⽤⼾输⼊时, %d 占位符会忽略起⾸的空格,从 - 处开始获取数据,读 取到 -13 停下来,因为后⾯的 . 不属于整数的有效字符。这就是说,占位符 %d 会读到 -13 。 第⼆次调⽤ scanf() 时,就会从上⼀次停⽌解读的地⽅,继续往下读取。这⼀次读取的⾸字符 是 . ,由于对应的占位符是 %f ,会读取到 .45e12 ,这是采⽤科学计数法的浮点数格式。后⾯的 # 不属于浮点数的有效字符,所以会停在这⾥。

关于scanf的多个占位符的示例,可参考上一篇printf,于其用法差不多。

scanf("%d%f",&a,&b)

scanf的返回值

scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或 者遇到读取到⽂件结尾,则返回常量 -1,也就是EOF。

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 float f = 0;
 int r = scanf("%d %d %f", &a, &b, &f);
 printf("a=%d b=%d f=%f\n", a, b, f);
 printf("r = %d\n", r);
 return 0;
}

 

在vs中输入三次CTRL+Z才会结束输入,输入2个数,返回值r=2,如果一个数也不输入返回值就是-1。

 赋值忽略符

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 int c = 0;
 scanf("%d:%d:%d", &a, &b, &c);
 printf("%d %d %d\n", a, b, c);
 return 0;
}

上⾯⽰例中,如果⽤⼾输⼊1:2:3 ,就会正确解读1:2:3。问题是⽤⼾可能输⼊其他 格式,⽐如 1 2 3,这种情况下, scanf() 解析数据就会失败。因此scanf提供了赋值忽略符*

只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 int c = 0;
 scanf("%d%*c%d%*c%d", &a, &b, &c);
 printf("%d %d %d\n", a, b, c);
 return 0;
}

上⾯⽰例中, %*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的 变量,解读后不必返回。这个%c是上式中:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值