《C语言中“输入魔法师”:scanf函数的奥秘与技巧》

在这里插入图片描述

🚀个人主页:fasdfdaslsfadasdadf
📖收入专栏:C语言


🌍文章目入

    • 一、引言
    • 二、`scanf`函数的基本语法
    • 三、格式说明符的种类及用法
      • (一)整数输入
      • (二)浮点数输入
      • (三)字符和字符串输入
      • (四)其他格式说明符
    • 四、格式修饰符的使用
      • (一)宽度修饰符
      • (二)跳过输入
    • 五、`scanf`函数的高级用法
      • (一)输入多个数据
      • (二)处理输入缓冲区
    • 六、`scanf`函数的注意事项
    • 七、总结
    • 八、示例代码

一、引言

在C语言的世界里,scanf函数是输入操作的核心工具,它能够从标准输入(通常是键盘)读取数据,并将其存储到指定的变量中。无论是简单的数据读取,还是复杂的格式化输入,scanf都能轻松应对。本文将带你深入探索scanf函数的用法,让你成为输入操作的高手。

二、scanf函数的基本语法

scanf函数的基本语法如下:

int scanf(const char *format, ...);
  • format 是一个格式控制字符串,它决定了输入的格式。它由普通字符和格式说明符组成。普通字符用于匹配输入中的特定字符,格式说明符则用于指定输入数据的类型和存储位置。
  • ... 表示可变参数列表,这些参数是变量的地址(通过取地址运算符&获取),用于存储输入的数据。
  • 函数返回值为成功读取的输入项数,如果输入失败则返回EOF(通常为-1)。

三、格式说明符的种类及用法

(一)整数输入

  1. %d%i:用于输入十进制整数。

    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    printf("输入的整数是:%d\n", num);
    

    输入:123
    输出:输入的整数是:123

  2. %u:用于输入无符号十进制整数。

    unsigned int num;
    printf("请输入一个无符号整数:");
    scanf("%u", &num);
    printf("输入的无符号整数是:%u\n", num);
    

    输入:456
    输出:输入的无符号整数是:456

  3. %x%X:用于输入十六进制整数。

    int num;
    printf("请输入一个十六进制数:");
    scanf("%x", &num);
    printf("输入的十六进制数是:%x,十进制表示为:%d\n", num, num);
    

    输入:ff
    输出:输入的十六进制数是:ff,十进制表示为:255

  4. %o:用于输入八进制整数。

    int num;
    printf("请输入一个八进制数:");
    scanf("%o", &num);
    printf("输入的八进制数是:%o,十进制表示为:%d\n", num, num);
    

    输入:377
    输出:输入的八进制数是:377,十进制表示为:255

(二)浮点数输入

  1. %f:用于输入浮点数。

    float num;
    printf("请输入一个浮点数:");
    scanf("%f", &num);
    printf("输入的浮点数是:%f\n", num);
    

    输入:3.14
    输出:输入的浮点数是:3.140000

  2. %lf:用于输入double类型的浮点数。

    double num;
    printf("请输入一个双精度浮点数:");
    scanf("%lf", &num);
    printf("输入的双精度浮点数是:%lf\n", num);
    

    输入:3.14159
    输出:输入的双精度浮点数是:3.141590

(三)字符和字符串输入

  1. %c:用于输入单个字符。

    char ch;
    printf("请输入一个字符:");
    scanf("%c", &ch);
    printf("输入的字符是:%c\n", ch);
    

    输入:A
    输出:输入的字符是:A

  2. %s:用于输入字符串。

    char str[50];
    printf("请输入一个字符串:");
    scanf("%s", str);
    printf("输入的字符串是:%s\n", str);
    

    输入:Hello
    输出:输入的字符串是:Hello

(四)其他格式说明符

  1. %p:用于输入指针地址(较少使用)。
    int *ptr;
    printf("请输入一个指针地址:");
    scanf("%p", &ptr);
    printf("输入的指针地址是:%p\n", ptr);
    
    输入:0x12345678
    输出:输入的指针地址是:0x12345678

四、格式修饰符的使用

格式修饰符可以对格式说明符的行为进行进一步的定制,包括宽度、精度等。

(一)宽度修饰符

宽度修饰符用于指定输入的最大字符数。

char str[10];
printf("请输入一个字符串(最多5个字符):");
scanf("%5s", str);  // 最多读取5个字符
printf("输入的字符串是:%s\n", str);

输入:HelloWorld
输出:输入的字符串是:Hello

(二)跳过输入

在格式说明符中使用*可以跳过某些输入内容。

int num1, num2;
printf("请输入两个整数(中间用空格分隔):");
scanf("%d%*d%d", &num1, &num2);  // 跳过第二个整数
printf("第一个整数是:%d,第二个整数被跳过\n", num1);

输入:123 456 789
输出:第一个整数是:123,第二个整数被跳过

五、scanf函数的高级用法

(一)输入多个数据

可以同时输入多个数据,并按格式说明符存储到对应的变量中。

int num1, num2;
float f;
char str[50], ch;printf("请输入一个整数、一个浮点数、一个字符串和一个字符(用空格分隔):");
scanf("%d %f %s %c", &num1, &f, str, &ch);printf("整数:%d\n", num1);
printf("浮点数:%f\n", f);
printf("字符串:%s\n", str);
printf("字符:%c\n", ch);

输入:123 3.14 Hello A
输出:

整数:123
浮点数:3.140000
字符串:Hello
字符:A

(二)处理输入缓冲区

scanf会从输入缓冲区中读取数据,但有时可能会残留一些字符(如换行符)。可以通过以下方式清理输入缓冲区:

#include <stdio.h>void clear_input_buffer() {int c;while ((c = getchar()) != '\n' && c != EOF) {}  // 清空缓冲区直到换行符或文件结束符
}int main() {int num;char str[50];printf("请输入一个整数:");scanf("%d", &num);clear_input_buffer();  // 清理缓冲区printf("请输入一个字符串:");fgets(str, sizeof(str), stdin);  // 使用fgets读取字符串str[strcspn(str, "\n")] = 0;  // 去掉换行符printf("输入的整数是:%d\n", num);printf("输入的字符串是:%s\n", str);return 0;
}

输入:

123
Hello

输出:

输入的整数是:123
输入的字符串是:Hello

六、scanf函数的注意事项

  1. 格式匹配问题:输入的数据必须与格式说明符匹配,否则可能导致输入失败或错误。
  2. 输入缓冲区问题scanf可能会在缓冲区中残留换行符等字符,影响后续输入。可以通过getchar()clear_input_buffer()清理缓冲区。
  3. 字符串输入问题%s会忽略字符串中的空格,如果需要读取包含空格的字符串,建议使用fgets()
  4. 输入验证:在实际应用中,建议对输入进行验证,确保用户输入合法数据。

七、总结

scanf函数是C语言中功能强大的输入工具,通过灵活使用格式说明符和格式修饰符,可以实现各种复杂的输入需求。掌握scanf函数的用法,不仅能让你的代码输入更加灵活,还能帮助你更好地理解和应用C语言的格式化输入操作。希望本文能帮助你全面掌握scanf函数,让你在C语言编程中游刃有余。

八、示例代码

以下是一个综合示例,展示了scanf函数的多种用法:

#include <stdio.h>int main() {int num1;float num2;char str[50], ch;printf("请输入一个整数:");scanf("%d", &num1);printf("请输入一个浮点数:");scanf("%f", &num2);printf("请输入一个字符串(最多10个字符):");scanf("%10s", str);printf("请输入一个字符:");scanf(" %c", &ch);  // 注意前面的空格,用于跳过缓冲区中的换行符printf("输入的整数是:%d\n", num1);printf("输入的浮点数是:%f\n", num2);printf("输入的字符串是:%s\n", str);printf("输入的字符是:%c\n", ch);return 0;
}

输入:

123
3.14
HelloWorld
A

输出:

输入的整数是:123
输入的浮点数是:3.140000
输入的字符串是:HelloWorl
输入的字符是:A

通过这个示例,你可以看到scanf函数的强大功能和灵活的用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33362.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Quickwit+Jaeger+Prometheus+Grafana搭建Java日志管理平台

介绍 生产服务应用可观测性在当下比较流行的方案&#xff0c;其中出现了大量高性能、开箱即用、易上手的的开源产品&#xff0c;大大丰富了在可观测性领域产品的多样性&#xff0c;本文讲述基于OTLP协议推送Java项目遥测数据&#xff08;日志、指标、链路&#xff09;到后端存储…

Unity Timeline 扩展

这里认为大家已经会timeline的基本使用了&#xff0c;只介绍怎么自定义扩展。 第一步.自定义Track 首先要自定义一条轨道。剪辑是要在轨道里跑的&#xff0c;系统自带的轨道我们加不了自定义剪辑&#xff0c;得新建自己用的。这个很简单。 [TrackClipType(typeof(TransformTw…

文生图技术的演进、挑战与未来:一场重构人类创造力的革命

摘要 文生图&#xff08;Text-to-Image Generation&#xff09;技术作为生成式人工智能&#xff08;Generative AI&#xff09;的核心分支&#xff0c;正在以颠覆性力量重塑内容生产范式。本文系统梳理文生图技术从早期实验到多模态大模型的演进路径&#xff0c;分析其在设计、…

如何手动使用下载并且运行 QwQ-32B-GGUF

首先使用安装 pip install ModelScope 使用 ModelScope 下载对应的模型 modelScope download --model Qwen/QwQ-32B-GGUF qwq-32b-q4_k_m.gguf 第二步开始下载 ollama git clone https://githubfast.com/ggerganov/llama.cpp # githubfast.com 可以加速下载 切换到目录&am…

SPring 学习积累1 关于下载相关jdk maven 版本

3.15.1 注意下载的版本 有些是不适配的&#xff0c;官网有提示&#xff1b; 3.15.2 注意配置环境变量时需要注意admistartor 中的java路径和系统变量是否一致&#xff0c;一行要一致&#xff0c;不然后续安装maven之后&#xff0c;使用命令 mvn -version时会显示以下错误&…

Excel(函数篇):Vlookup函数 详细用法

目录 Vlookup函数基础用法精确查找易错问题员工信息查询表 进阶用法近似匹配&#xff08;模糊查找&#xff09;结合通配符查找反向查找 高级技巧多条件查找动态列查询 错误处理屏蔽错误值处理数字/文本格式问题注意事项常见错误解决方案 拓展用法跨表与跨工作簿查找查找返回多列…

对最近的刷题做一个小总结(关于动态规划和贪心)

文章目录 1. 小总结2. 两道算法题2.1 数组中两个字符串的最小距离2.2 孩子们的游戏 1. 小总结 最近刷了很多算法题&#xff0c;真正了解到的算法应是dfs&#xff0c;多元dfs&#xff0c;以及动态规划和贪心。 dfs和多元dfs目前并没有真正深入研究过&#xff0c;不过熟悉套路之…

jmeter分布式原理及实例

一、执行原理 二、相关注意事项 关闭防火墙所有上网控制机、代理机、服务器都在同一个网络上所有机器的jmeter和java版本必须一致关闭RMI.SSL开关 三、配置和执行 配置&#xff1a; 修改bin/jmeter.properties文件&#xff1a; 代理机&#xff1a; 修改服务端口&#xff1…

C++ STL 详解 ——vector 的深度解析与实践指南

一、vector 的核心概念与底层机制 1.1 动态数组的本质 连续内存存储&#xff1a;与普通数组相同&#xff0c;vector 使用连续的内存空间&#xff0c;支持 O (1) 时间复杂度的随机访问。动态扩容特性&#xff1a;通过push_back等操作自动调整容量&#xff0c;无需手动管理内存…

【SpringBoot】——在做一些项目中所学到的新的技术栈和一些小技巧(主要为MQ,详细请看目录和文章)

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大三学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

0经验cursor开发一款跨端app

设备&#xff1a;mac电脑cursor 1.输入诉求 我要实现一个跨端的地址应用&#xff0c;使其可以在ios、安卓、小程序和网页端都可以使用。这是一个demo的项目&#xff0c;功能不必要太过复杂&#xff0c;下面需要你和我多次沟通完成这个任务。你先根据我的内容输入&#xff0c…

Element Ui - 编辑时表单校验信息未清空问题处理

Element Ui 关闭对话框清空验证消息&#xff0c;清除form表单的操作 首先在对话框 取消按钮 添加 click事件&#xff0c;例如&#xff1a;&#xff08;ps&#xff1a;callOf 里面的addGroupData和ref - - &#xff09; <div slot"footer" class"dialog-foo…

OpenCV图像加权函数:addWeighted

1 addWeighted函数 在OpenCV 里&#xff0c;addWeighted 函数的作用是对两个图像进行加权求和&#xff0c;常用于图像融合、图像过渡等场景。函数如下&#xff1a; cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 参数解释 src1&#xff1a;第一个输入图…

Science Robotics 利用机器学习进行鳐鱼的仿生设计

对于海洋生物而言&#xff0c;生物力学和流体动力学力都会对游泳速度施加物理限制&#xff0c;促使游泳策略和鳍形状的趋同进化。鉴于这些限制是与尺度相关的&#xff0c;如雷诺数&#xff08;Re&#xff09;&#xff0c;这就产生了自然运动缩放定律&#xff0c;该定律根据生物…

基于ssm的一家运动鞋店的产品推广网站的设计

项目简介 一家运动鞋店实现了以下功能&#xff1a; 实现了用户在线选择试题并完成答题&#xff0c;在线查看考核分数。管理员管理收货地址管理、购物车管理、字典管理、留言版管理、新闻信息管理、产品管理、产品收藏管理、产品评价管理、产品订单管理、单页数据管理、用户管…

什么是后训练?大语言模型训练后优化方法综述,87页pdf

大语言模型&#xff08;LLMs&#xff09;的出现彻底改变了自然语言处理领域&#xff0c;使其在从对话系统到科学探索的各个领域中变得不可或缺。然而&#xff0c;其预训练架构在特定场景中往往表现出局限性&#xff0c;包括推理能力受限、伦理不确定性以及领域特定性能欠佳等问…

python开发订单查询功能(flask+orm bee)

1. 搭建python环境。 可以参考其它文档。 此处python使用 3.12 IDE随意&#xff0c;PyCharm 或 Eclipse PyDev也可以。 2. Flask 2.1 安装Flask pip install Flask 2.2 一个最简单的flask实例 创建一个工程&#xff0c; 新建一个 main.py文件&#xff0c; 输入以下内容…

工作记录 2017-01-11

工作记录 2017-01-11 序号 工作 相关人员 1 协助BPO进行Billing的工作。 修改邮件上的问题。 更新RD服务器。 郝 更新的问题 1、修改了Patient Insurance的文件上传。 1.1 文件存储改为MedI“EHRWfs”Account“patientInfo”MRN 1.2 “Upload Files” to “Upload/Vie…

基于javaweb的SpringBoot个人健康管理系统小程序微信小程序设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

b站视频下载工具软件怎么下载

自行配置FFMPEG环境 请优先选择批量下载&#xff0c;会自处理视频和音频文件。 如果要下载更高质量请登陆。 没有配置FFMPEG下载后会有报错提示&#xff0c;视频音频文件无法合并生成mp4文件 更新批量下载标题&#xff0c;只取视频原标题&#xff0c;B站反爬机制登陆后下载多了…