当前位置: 首页 > news >正文

C语言学习笔记 - 39.数据类型 - scanf函数多变量输入用法

本知识点对应谭浩强《C程序设计(第五版)》第3章3.4.4节“用scanf函数输入数据”,是scanf函数的核心扩展用法,可实现一次输入多个不同类型的数据。


1. 多变量输入的基本语法

scanf函数支持一次从键盘读取多个数据,并赋值给多个变量。

1.1 基本格式

scanf(“输入控制符1输入控制符2…”, &变量1, &变量2, …);

核心规则

  • 每个输入控制符对应一个输入参数。

  • 每个变量前必须单独添加取地址符&,缺一不可。

  • 输入控制符的个数必须与变量的个数严格一一对应。

1.2 代码示例

#include <stdio.h> int main() { int i, j, k; // 定义三个整型变量 printf(“请输入三个整数:”); scanf(“%d%d%d”, &i, &j, &k); // 一次读取三个整数 printf(“i = %d, j = %d, k = %d\n”, i, j, k); return 0; }

1.3 输入与输出的关键区别

这是初学者最易犯的错误之一,必须牢记:

  • 输出时printf(“%d%d%d”, i, j, k);→ 变量前不需要加&

  • 输入时scanf(“%d%d%d”, &i, &j, &k);→ 每个变量前必须&


2. 多变量输入的分隔符规则

2.1 默认分隔符

当格式字符串中只有输入控制符,没有非输入控制符时,scanf使用以下空白字符作为默认分隔符:

  • 空格(最常用)

  • 制表符\t

  • 回车符\n

用户输入时,只要使用上述任意一种空白字符分隔多个数据,scanf都能正确识别。

2.2 合法输入示例

对于scanf(“%d%d%d”, &i, &j, &k);,以下输入方式都是合法的:

  1. 空格分隔

    1 2 3

    结果:i=1, j=2, k=3

  2. 回车分隔

    1 2 3

    结果:i=1, j=2, k=3

  3. 混合分隔

    1 2 3

    结果:i=1, j=2, k=3

2.3 非法输入示例

如果输入时没有使用任何分隔符,scanf会将连续的数字字符当作一个整数处理:

例如输入:

123

结果:i=123,程序会继续等待用户输入第二个和第三个整数,不会自动结束。


3. 含非输入控制符的多变量输入

3.1 规则说明

如果在多个输入控制符之间添加了非输入控制符(如逗号、分号、冒号等),则用户在输入时必须原样输入这些符号,否则会导致输入匹配失败。

3.2 代码示例

#include <stdio.h> int main() { int i, j, k; printf(“请输入三个整数(用逗号分隔):”); scanf(“%d,%d,%d”, &i, &j, &k); // 格式字符串中包含了逗号 printf(“i = %d, j = %d, k = %d\n”, i, j, k); return 0; }

3.3 不同输入方式的结果分析

用户输入

输入是否合法

变量值

原因说明

1 2 3

非法

i=1,j和k为随机值

第一个逗号匹配失败,scanf立即停止读取

1,2 3

非法

i=1, j=2,k为随机值

第二个逗号匹配失败,第三个变量无法赋值

1,2,3

合法

i=1, j=2, k=3

所有逗号都匹配成功,三个变量正确赋值


4. 常见错误与注意事项

  1. 忘记添加取地址符&

    scanf(“%d%d”, i, j); // 错误:变量前缺少&

    这是最严重的错误,会导致程序崩溃或产生不可预知的结果。

  2. 输入控制符与变量个数不匹配

    scanf(“%d%d”, &i, &j, &k); // 错误:两个控制符对应三个变量

    第三个变量k无法被赋值,会保留原来的随机值(垃圾值)。

  3. 非输入控制符未原样输入

    如格式字符串中指定了逗号分隔,但用户输入时使用空格分隔,会导致后续变量赋值失败。

  4. 连续输入无分隔符

    多个数字连续输入时,scanf会将其当作一个整数处理,导致程序等待更多输入。


5. 核心要点总结

  1. 语法核心scanf(“控制符…”, &变量, …)。支持一次给多个变量赋值。

  2. 关键区别输入时必须为每个变量加&,而printf输出时不需要。这是最重要的区别。

  3. 默认分隔:格式字符串无普通字符时,用空格、制表符、回车作分隔符。

  4. 原样输入:格式字符串中的非输入控制符(如逗号)必须由用户原样输入

  5. 必须分隔:输入多个数据时必须使用分隔符,否则会被当作一个数据处理。

  6. 失败处理:输入匹配失败时,未被赋值的变量会保留其原来的随机值

http://www.zskr.cn/news/1319768.html

相关文章:

  • 利用Taotoken多模型聚合能力为智能客服场景选择合适的AI引擎
  • [笔记] 系统分析师 目录
  • MPC-BE:Windows平台终极开源多媒体播放器架构深度解析与实战指南
  • openmv的目录
  • Steam挂卡自动化神器:Idle Master完整指南,告别手动等待
  • 如何在Windows和Linux上零成本体验macOS系统:macOS Unlocker跨平台虚拟化方案终极指南
  • 树莓派4/5上部署TensorFlow Lite实时物体识别系统全流程指南
  • 昆山2026年整形机构选择指南与合规避坑建议 - 资讯焦点
  • Blender 3MF插件终极指南:实现3D打印文件格式的完美导入导出
  • 免费开源m4s转MP4工具:轻松解决B站缓存视频格式限制问题
  • CPU流水线冲突避坑指南:结构冲突、数据冲突与性能损耗的量化分析
  • RK3588安防实战:从边缘智能到后端分析的全栈开发指南
  • 告别CPU轮询!深入对比HC32F4A0与STM32的ADC+DMA设计差异(以AOS外设为例)
  • PlotSquared终极指南:5分钟快速搭建Minecraft领地系统
  • Java 程序员第 20 阶段:Agent 工具调用开发,对接第三方接口自动任务
  • 从电源拓扑到代码:STM32F103驱动移相全桥的软硬件协同设计实战
  • 基于重心悬挂原理的走钢丝机器人:从物理平衡到CircuitPython实践
  • 大模型面试宝典:小白程序员必收藏,轻松搞定大厂面经(含代码题)
  • 重新定义Windows体验:Win11Debloat让你的系统更清爽、更高效
  • 告别老版本!STM32F103C8T6+ESP8266连接新版OneNet物联网平台全流程(附代码避坑)
  • 2026性价比之选东营黄金回收铂金回收白银回收靠谱诚信店铺推荐_转自TXT - 亦辰小黄鸭
  • 智慧职教刷课脚本:3分钟实现网课全自动学习的终极指南
  • 从零到专业:Python GUI开发的Pygubu Designer完整指南
  • 如何用Python自动化助手告别枯燥的词汇练习:词达人智能解决方案指南
  • 2026年四川GEO服务商深度评测:平台化能力与全链路服务选型推荐指南 - 资讯焦点
  • 2026性价比之选鄂州黄金回收铂金回收白银回收靠谱诚信店铺推荐_转自TXT - 亦辰小黄鸭
  • 别再只用random了!用Python实现帐篷混沌映射,让你的粒子群算法收敛更快
  • 别再只跑仿真了!用Vivado 2023.1给你的FPGA图像处理项目做个“硬件体检”
  • 2026届必备的五大AI学术方案推荐榜单
  • 基于Adafruit CRICKIT与3D打印的水面机器人DIY全攻略