scanf用法及在\n中真正的含义

     scanf() 函数是 C 语言中一个非常重要的标准输入函数, ⽤于读取⽤⼾的键盘输⼊。程序运⾏到这个语句时,会停下来,等待⽤⼾从键盘输⼊。 ⽤⼾输⼊数据、按下回⻋键后, scanf() 就会处理⽤⼾的输⼊,将其存⼊变量。 它的原型定义在头⽂件 stdio.h 。

     上⾯⽰例中, scanf() 的第⼀个参数 %d ,表⽰⽤⼾输⼊的应该是⼀个整数。 %d 就是⼀个占位 符, % 是占位符的标志, d 表⽰整数。第⼆个参数 &a表⽰,将⽤⼾从键盘输⼊的整数存⼊变量 a 。因为scanf() 传递的不是值,⽽是地址 。如果这⾥的变量是指针变量(⽐如字符串变量),那就不⽤加 & 运算符。

下⾯是⼀次将键盘输⼊读⼊多个变量的例⼦。

scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。 所以,⽤⼾输⼊的数据之间,有⼀个或多个空格不影响  scanf() 解读数据。

\n 在 scanf 里的真正含义

在 scanf 的格式字符串(如 "%f\n")中,\n 并不表示“等待用户输入换行”,而是表示:“跳过所有连续的空白字符(包括空格、Tab、换行符等),直到遇到一个非空白字符”。

举例说明:

scanf("%f\n", &ac);  // 注意这里的 \n

你输入 3.6 并按 回车,此时:

%f 会读取 3.6,但 \n 会让 scanf 继续等待,因为它要跳过所有空白(包括你刚输入的回车)。

你必须再输入一个非空白字符(如随便按一个数字或字母),scanf 才会结束。

这显然不符合直觉!

如何正确使用 scanf 读取浮点数?

方法 1:直接去掉 \n(推荐)

scanf("%f", &ac);  // 正确:读取浮点数后,遇到回车或空格就结束

此时输入 3.6 并按回车,程序会立即处理,不会等待额外输入。

方法 2:明确匹配换行符(不推荐)

如果你想严格匹配“浮点数 + 换行”,可以这样写:

scanf("%f%*c", &a);  // %*c 读取并丢弃一个字符(如换行符)

但这种方法仍然不够健壮(比如用户输入 3.6 空格 也会出问题),所以推荐直接去掉 \n。

而在 printf 中,\n 是正常的换行符,例如:

printf("%d\n", ac);  // 输出整数后换行

这里的 \n 就是字面意思,表示“换行”,不会导致任何问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值