4.C语言输入输出函数

一、输入输出的本质

在 C 语言中,输入输出是以 计算机为中心 来定义的:

  • 输入(Input):把数据“输入”到计算机;
  • 输出(Output):把计算结果“输出”到终端(屏幕)或文件中。

C语言的标准输入输出头文件是:

#include <stdio.h>

二、字符输入输出函数

1. putchar()

向终端输出一个字符。

int putchar(int c);
  • 参数:要输出的字符;
  • 返回值:输出字符的 ASCII 码;
  • 示例
#include <stdio.h>
int main()
{
    char c = 'c';
    putchar('a');
    putchar('a' + 1);  // 输出 b
    putchar(c);        // 输出 c
    return 0;
}

2. getchar()

从终端读取一个字符(阻塞输入)。

int getchar(void);
  • 返回值:获取到的字符的 ASCII 码;
  • 示例
#include <stdio.h>
int main()
{
    char c = 0;
    c = getchar();  // 等待输入
    putchar(c);     // 输出输入的字符
}

阻塞输入:程序会暂停等待用户输入,直到按下回车。


三、格式化输出函数:printf()

1. 基本格式

int printf(const char *format, ...);
  • format 是格式控制字符串;
  • ... 表示可变参数(多个输出值)。

2. 常用格式说明符

类型控制符示例输出
有符号整形%d26
无符号整形%u888899
八进制%o32
十六进制(小写)%x1a
十六进制(大写)%X1A
字符%c'a'
字符串%s"hello"
浮点数%f3.141500
双精度%lf700000.000000
科学计数法%e7.000000e+05
指针(内存地址)%p0x7ffee123abcd
输出百分号%%%

3. 示例:04printf.c

#include <stdio.h>
#include <unistd.h>

int main()
{
    int num = 26;
    printf("整形有符号 %d\n", num);
    printf("整形8进制 %o\n", num);
    printf("整形16进制 %x\n", num);

    char c = 'a';
    printf("字符类型 %c, ASCII : %d\n", c, c);

    unsigned int b = 888899;
    printf("整形无符号 %u\n", b);

    float f = 3.1415;
    printf("float %f\n", f);

    double d = 7e5;
    printf("double %lf, 科学计数法 %e\n", d, d);

    long l = 8899712;
    printf("long %ld\n", l);

    printf("字符串示例: %s\n", "张三");
    printf("变量地址: %p\n", &num);
    printf("100%% 完成!\n");
}

4. 扩展控制符

控制符功能示例
%5d宽度为5,右对齐 26
%-5d宽度为5,左对齐26
%05d不足5位补000026
%.2f保留两位小数3.14
%#o八进制前加 0032
%#x十六进制前加 0x0x1a

四、格式化输入函数:scanf()

int scanf(const char *format, ...);

1. 使用注意

  1. 输入变量要加取地址符号 &
  2. 接收字符串不加 &
  3. 不要在格式中加入多余字符(如 \n)。

2. 示例

#include <stdio.h>
int main()
{
    int num = 0;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    printf("你输入的是: %d\n", num);
    return 0;
}

3. 扩展练习(来自 06scan_lianxi.c

int num1 = 0, num2 = 0;
printf("请输入两个整数: ");
scanf("%d %d", &num1, &num2);
printf("两数和为: %d\n", num1 + num2);

五、字符串输入输出函数

1. gets()(不推荐)

从终端读取一行字符串(不安全,可能导致缓冲区溢出)。

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

建议使用 fgets() 替代:

fgets(str, 50, stdin);

2. puts()

向终端输出一个字符串,并自动换行。

#include <stdio.h>

int main()
{
    char str[50] = "nihao, zhangsan";
    puts("hello");
    puts(str);
}

输出结果:

hello
nihao, zhangsan

六、printf 与转义字符总结

转义符功能示例
\n换行printf("Hello\n");
\t制表符(4个空格)printf("\tHi");
\b退格printf("Y\b=");
\\输出反斜杠printf("\\");
\r回到本行开头用于动态刷新输出
%%输出百分号printf("100%%");

七、小结

函数功能返回值
putchar()输出单个字符输出字符的 ASCII 值
getchar()输入单个字符输入字符的 ASCII 值
printf()格式化输出成功输出字符数
scanf()格式化输入成功输入项数
puts()输出字符串(自动换行)正常返回非负值
gets()输入字符串(不安全)返回输入字符串指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值