博客
关于我
第15节 数据的输入
阅读量:312 次
发布时间:2019-03-03

本文共 2153 字,大约阅读时间需要 7 分钟。

用scanf函数输入数据是一种高效且灵活的方式,适用于从键盘读取用户输入的各种场景。以下是关于scanf函数的详细说明和实践案例。

用scanf函数输入数据

scanf函数是C语言中一个强大的输入函数,它能够从标准输入读取数据并将其存储在变量中。函数的基本调用形式为:

#include 
int main() { int a, b; scanf("%d %d", &a, &b); printf("a + b = %d\n", a + b); return 0;}

格式控制符的使用

scanf函数依赖于格式控制符来指定要读取的数据类型和格式。常用的格式控制符包括:

  • %d:用于读取整数(默认为十进制)。
  • %ld:用于读取长整数(如long类型)。
  • %hd:用于读取短整数(如short类型)。
  • %o:用于读取八进制整数。
  • %x:用于读取十六进制整数。
  • %u:用于读取无符号整数。
  • %c:用于读取单个字符。
  • %f:用于读取浮点数(支持小数或指数形式)。

例如,可以使用以下代码读取两个整数:

int a, b;scanf("%d %d", &a, &b);printf("a + b = %d\n", a + b);

输入数据的分割

在实际应用中,输入数据可能包含多个值之间的分隔符,如空格、逗号、回车等。scanf函数能够处理这些分隔符,直接读取所需的数据。常见的分隔符包括:

  • 空格():默认分隔符。
  • 逗号(,):可以通过修改格式字符串来启用。
  • 回车(\n):自动处理换行符。
  • 制表符(\t):处理水平制表符。

例如,可以使用以下代码读取两个整数:

int a, b;scanf("%d%d", &a, &b);

或者:

int a, b;scanf("%d,%d", &a, &b);

不同类型数据的自然分割

scanf函数支持混合类型输入,即在一次读取操作中同时读取不同类型的数据。例如,可以读取一个运算符和两个整数:

#include 
int main() { int a, b, c; char op; scanf("%d%c%d", &a, &op, &b); if (op == '+') { c = a + b; printf("会算%c,结果是:%d\n", op, c); } else { printf("不会算%c\n", op); } return 0;}

输入数据的缓冲区

scanf函数默认使用内置缓冲区进行输入操作,这通常是高效的选择。然而,在某些情况下(如多次读取大数据量),可以使用scanf_s函数,它会显式地分配和释放缓冲区,避免内存泄漏。

例如:

#include 
int main() { int a, b, c; scanf_s("%d", &a); scanf_s("%d", &b); scanf_s("%d", &c); printf("%d,%d,%d\n", a, b, c);}

输入示例:

1 2 3 4 5

输出结果:

1,2,3,4,5

指定宽度的输入

有时你需要确保输入的数据符合特定的宽度要求。可以使用宽度指定符(如0)来限制输入的字符数量。例如:

#include 
int main() { int a, b; scanf_s("%2d%3d", &a, &b); printf("%d,%d\n", a, b);}

输入示例:

12 345

输出结果:

12,345

注意控制字符和类型的匹配

在使用scanf函数时,必须确保输入的字符与格式控制符匹配,否则会导致错误或未预期的结果。例如:

#include 
int main() { double a, b; int c, d; scanf_s("%lf%lf", &a, &b); scanf_s("%d", &c); scanf_s("%d", &d); printf("%f,%f,%d,%d\n", a, b, c, d);}

输入示例:

1.000000 2.000000 3 4

输出结果:

1.000000,2.000000,3,4

实践项目

在键盘上输入以下数据,使程序能够正确读取:

a=3 b=7x=8.5y=71.82

完整代码如下:

#include 
int main() { int a, b; float x, y; scanf_s("a=%d b=%d", &a, &b); scanf_s("%f %f", &x, &y); printf("%d %d %f %e", a, b, x, y); return 0;}

输入示例:

3 78.571.82

输出结果:

3 7 8.500000 7.182000e+01

通过上述方法,你可以灵活地读取和处理各种输入数据,充分发挥scanf函数的强大功能。

转载地址:http://yjqm.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度
查看>>
OpenCV与AI深度学习 | OpenCV常用图像拼接方法(一) :直接拼接
查看>>
OpenCV与AI深度学习 | OpenCV常用图像拼接方法(三):基于特征匹配拼接
查看>>
OpenCV与AI深度学习 | OpenCV常用图像拼接方法(二) :基于模板匹配拼接
查看>>
OpenCV与AI深度学习 | OpenCV常用图像拼接方法(四):基于Stitcher类拼接
查看>>
OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
查看>>
OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | T-Rex Label !超震撼 AI 自动标注工具,开箱即用、检测一切
查看>>
OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
查看>>
OpenCV与AI深度学习 | YOLOv10在PyTorch和OpenVINO中推理对比
查看>>
OpenCV与AI深度学习 | YOLOv11来了:将重新定义AI的可能性
查看>>
OpenCV与AI深度学习 | YOLOv8自定义数据集训练实现火焰和烟雾检测(代码+数据集!)
查看>>
OpenCV与AI深度学习 | YOLOv8重磅升级,新增旋转目标检测,又该学习了!
查看>>
OpenCV与AI深度学习 | 一文带你读懂YOLOv1~YOLOv11(建议收藏!)
查看>>
OpenCV与AI深度学习 | 五分钟快速搭建一个实时人脸口罩检测系统(OpenCV+PaddleHub 含源码)
查看>>
OpenCV与AI深度学习 | 什么是 COCO 数据集?
查看>>
OpenCV与AI深度学习 | 低对比度缺陷检测应用实例--LCD屏幕脏污检测
查看>>
OpenCV与AI深度学习 | 使用 MoveNet Lightning 和 OpenCV 实现实时姿势检测
查看>>
OpenCV与AI深度学习 | 使用 OpenCV 创建自定义图像滤镜
查看>>
OpenCV与AI深度学习 | 使用 SAM 和 Grounding DINO 分割卫星图像
查看>>