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

C语言输入与输出:从零掌握数据的“对话”


手把手教你理解C语言中输入(Input)与输出(Output)的核心操作。


一、输入与输出是什么?

C语言通过标准库函数实现程序与用户(或设备)的“对话”:

  • 输出:程序将数据展示给用户(如打印到屏幕)。
  • 输入:用户向程序传递数据(如键盘输入)。

二、基础输出函数:printf()

printf() 是C语言最常用的输出函数,支持格式化输出

1. 基本用法

#include <stdio.h>

int main() {
    printf("Hello, World!\n");  // 输出字符串并换行
    printf("数字:%d,小数:%.2f\n", 10, 3.1415);  // 格式化输出
    return 0;
}

2. 格式符表(核心符号)

格式符说明示例
%d整型printf("%d", 100);
%f浮点型(默认6位小数)printf("%.2f", 3.1415); → 输出 3.14
%c单个字符printf("%c", 'A');
%s字符串printf("%s", "Hello");

三、基础输入函数:scanf()

scanf() 用于从键盘读取数据,需注意变量地址传递(使用 &)。

1. 基本用法

#include <stdio.h>

int main() {
    int age;
    printf("请输入年龄:");
    scanf("%d", &age);  // 读取整数并存入变量age的地址
    printf("你的年龄是:%d\n", age);
    return 0;
}

2. 输入多个值

int num1, num2;
scanf("%d %d", &num1, &num2);  // 输入时用空格分隔两个整数

四、字符与字符串的输入输出

1. 单个字符:getchar()putchar()

char c = getchar();  // 读取一个字符(包括换行符)
putchar(c);          // 输出字符

2. 字符串:fgets()(安全输入)

避免使用不安全的 gets(),优先用 fgets()

char name[50];
printf("请输入姓名:");
fgets(name, sizeof(name), stdin);  // 安全读取字符串(含空格)
printf("你的姓名:%s", name);

五、常见问题与解决

1. scanf() 的“残留换行符”问题

输入数值后,若直接调用 getchar() 会读到残留的 \n

int num;
char ch;
scanf("%d", &num);
// ch = getchar();  // 此时ch读取到的是换行符,而非用户输入

解决方案:清空输入缓冲区

int c;
while ((c = getchar()) != '\n' && c != EOF);  // 清除残留内容

2. 格式符与变量类型不匹配

float price;
scanf("%d", &price);  // 错误!应用 %f

六、输入输出对比总结

操作类型常用函数关键点
输出printf格式符需与数据类型严格匹配
输入scanf变量前加 &,注意缓冲区问题
字符串fgets安全、可读包含空格的字符串

七、实战代码:用户信息录入

#include <stdio.h>

int main() {
    char name[50];
    int age;

    printf("请输入姓名:");
    fgets(name, sizeof(name), stdin);

    printf("请输入年龄:");
    scanf("%d", &age);

    // 清空输入缓冲区残留的换行符
    int c;
    while ((c = getchar()) != '\n' && c != EOF);

    printf("\n录入结果:\n");
    printf("姓名:%s", name);
    printf("年龄:%d\n", age);

    return 0;
}

运行效果

请输入姓名:Alice Smith  
请输入年龄:30  

录入结果:  
姓名:Alice Smith  
年龄:30  

总结

  1. 输出printf,注意格式符;输入scanffgets,警惕缓冲区问题。
  2. 字符串输入优先选 fgets,避免 gets 的安全隐患。
  3. 细节决定成败:地址符 &、格式符匹配、缓冲区清理是关键!

相关文章:

  • STC89C52单片机学习——第20节: [8-2]串口向电脑发送数据电脑通过串口控制LED
  • MyBatis源码分析の配置文件解析
  • 创建postgis数据库
  • 【matlab例程】三维下的TDOA定位和EKF轨迹滤波例程,TDOA的锚点数量可自定义(订阅专栏后可获得完整代码)
  • 每日一题---腐烂的苹果(广度优先搜索)
  • Java常见的几种内存溢出及解决方法
  • MATLAB中events函数用法
  • 函数的引用/函数的默认参数/函数的占位参数/函数重载
  • 面试vue2开发时怎么加载编译速度(webpack)
  • 用C++新建快捷方式
  • 第5章 构造、析构、拷贝语义学3:对象复制语意学
  • 高频面试题(含笔试高频算法整理)基本总结回顾24
  • 【ElasticSearch】学习笔记
  • 零基础上手Python数据分析 (3):Python核心语法快速入门 (下) - 程序流程控制、函数与模块
  • 用ST7789屏幕导致负片(反色)的问题
  • 基于DeepSeek R1的检验检查超声影像综合预约排班和路径最优化研究
  • yolo环境 pytorch环境配置 CUDA安装
  • Google最新生图模型Gemini-2.0-Flash-Exp免费用
  • 大华SDK协议在智联视频超融合平台中的接入方法
  • lws-minimal-ws-server前端分析
  • AI世界的年轻人|他用影像大模型解决看病难题,“要做的研究还有很多”
  • 上海浪琴环球马术冠军赛明日启幕!五一假期在这里感受精彩
  • 200枚篆刻聚焦北京中轴线,“印记”申遗往事
  • 徐徕任上海浦东新区副区长,此前已任区委常委
  • 牛市早报|今年第二批810亿元超长期特别国债资金下达,支持消费品以旧换新
  • 顺利撤离空间站,神十九乘组踏上回家之旅