C语言学习笔记 - 40.数据类型 - scanf用法3 - 一次给多个变量键盘赋值
一、核心语法与基本用法
scanf函数支持一次从键盘读取多个输入值,并依次赋值给多个变量,是C语言中批量输入数据的核心方式。
1. 基本语法格式
scanf("格式控制串", &变量1, &变量2, ..., &变量n);
-
格式控制串:包含多个格式声明(如
%d、%f、%c),与后续变量一一对应,指定输入数据的类型。 -
取地址符
&:每个变量前必须添加,表示将输入数据存储到该变量对应的内存地址中。这是scanf与printf最核心的区别(printf输出时不需要加&)。
2. 完整示例代码
#include <stdio.h>
int main()
{
int i, j, k; // 定义3个整型变量
// 一次读取3个整数,分别赋值给i、j、k
scanf("%d%d%d", &i, &j, &k);
// 输出3个变量的值验证
printf("i=%d, j=%d, k=%d\n", i, j, k);
return 0;
}
3. 运行与输入说明
编译运行程序后,在终端输入3个整数,按回车键确认即可完成赋值。
二、输入分隔符规则
当格式控制串中仅包含格式声明(无其他普通字符)时,输入的多个数值之间必须用空白字符分隔,scanf会自动跳过任意数量的空白字符。
1. 合法分隔符
-
空格(最常用)。
-
回车键(Enter)。
-
水平制表符(Tab)。
2. 输入示例(以上述代码为例)
以下3种输入方式完全等价,程序都会正确将1赋值给i、2赋值给j、3赋值给k:
-
空格分隔:
1 2 3。 -
回车分隔:
1 2 3 -
Tab分隔:
1 2 3。
3. 常见错误:连续输入无分隔符
如果输入123,scanf会将其识别为单个整数123,赋值给第一个变量i,然后继续等待输入j和k的值,此时程序会处于阻塞状态,直到输入剩余两个数值。
三、格式控制串中的非输入控制符
如果格式控制串中包含除格式声明外的普通字符(称为非输入控制符,如逗号、分号、冒号等),输入时必须在对应位置原样输入这些字符,否则会导致输入匹配失败,后续变量无法正确赋值。
1. 带非输入控制符的示例
#include <stdio.h>
int main()
{
int i, j, k;
// 格式控制串中包含逗号作为分隔符
scanf("%d,%d,%d", &i, &j, &k);
printf("i=%d, j=%d, k=%d\n", i, j, k);
return 0;
}
2. 正确与错误输入对比
|
输入方式 |
结果说明 |
|---|---|
|
|
正确,i=1、j=2、k=3 |
|
|
错误,仅i=1,j和k为随机垃圾值 |
|
|
错误,仅i=1、j=2,k为随机垃圾值 |
3. 原理说明
scanf会严格按照格式控制串的字符序列匹配输入内容。当遇到非输入控制符时,会要求输入流中对应位置必须是完全相同的字符,否则匹配终止,后续变量不再赋值。
四、常见错误与注意事项
-
忘记添加取地址符
&-
错误写法:
scanf("%d%d", i, j);。 -
后果:编译可能通过,但运行时会出现段错误(程序崩溃)或赋值结果完全错误。这是scanf最常见的错误。
-
-
输入格式与控制串不匹配
-
例如控制串为
%d,%d但输入1 2,会导致第二个变量赋值失败。 -
排查方法:严格对照格式控制串的每一个字符,确保输入完全匹配。
-
-
输入非法字符导致输入终止
-
例如输入
- 例如输入12a3,%d格式会读取到12后,遇到非法字符a`立即终止输入,后续变量无法赋值。 -
后果:未赋值的变量会保留其初始随机值。
-
-
数值类型与格式声明不匹配
-
例如用
%d读取浮点型数据,或用%f读取整型数据,会导致赋值结果完全错误。 -
双精度浮点型变量输入时必须使用
%lf格式声明(输出时可用%f)。
-
五、VSCode环境运行提示
-
在VSCode中运行程序后,输入区域会显示在终端底部,输入完成后必须按回车键确认,程序才会读取缓冲区中的数据。
-
如果程序处于等待输入状态,终端会显示闪烁的光标,此时输入对应格式的数据并回车即可。
-
若输入错误导致程序异常,可按
Ctrl+C强制终止程序运行。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)