C语言——输入输出函数

目录

一、输出函数

1.putchar

2.printf

3.puts

二、输入函数

1.getchar

2.scanf

3.gets


是以计算机为中心,来描述输入输出的

C语言中输入输出需要通过函数实现,使用前加上 #include <stdio.h>

一、输出函数

1.putchar

输出单个字符

功能:向终端输出一个字符,需要传入一个参数,表示需要写向终端的字符。 返回值表示成功写入终端的字符的ascii码值。

int putchar(int c);  // 语法

/************************示例************************/
#include <stdio.h>
int main()
{
    char c ='c';
    putchar('a');   // 输出:a
    putchar('a'+1); // 输出:b
    putchar(c);     // 输出:c

    return 0;
}

2.printf

格式化输出函数

功能:按指定格式输出数据(支持字符串、整数、浮点数等多种类型),是最常用的输出函数。

格式说明符(部分常用):

  • %d:输出十进制整数
  • %f :输出浮点数(默认保留 6 位小数)
  • %c:输出单个字符
  • %s:输出字符串
  • %x:输出十六进制整数(小写)
  • %p:输出指针地址

修饰符(用于控制输出格式):

  • 宽度:如 %5d 表示输出占 5 个字符宽度(右对齐),%-5d 表示左对齐
  • 精度:如 %.2f 表示浮点数保留 2 位小数
  • 打印输出非控制字符

int printf(const char *format, ...); // 语法(format为格式控制字符串,...为可变参数)

/************************示例************************/
#include <stdio.h>
int main()
{
    printf("hello\n");     // 输出:hello
    printf("\tworld");     // 输出:    world
    printf("Y\b=");        // 输出:¥
    printf("\\ aaa\n");    // 输出:\ aaa
    printf("你好,老六!");  // 输出:你好,老六!

    return 0;
}
  • 打印输出控制字符

/************************示例************************/
#include <stdio.h>
int main()
{
    int num=26;
    printf(" 整型有符号 %d\n",num);   // 输出:整型有符号 26
    printf(" 整型八进制 %o\n",num);   // 输出:整型八进制 32
    printf(" 整型十六进制 %x\n",num); // 输出:整型十六进制 1a
    printf(" 整型十六进制 %X\n",num); // 输出:整型十六进制 1A

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

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

    float float_c =3.1415;
    printf("单精度浮点型:%f\n",float_c);

    double dd =7e5;
    printf("双精度浮点型:%lf\n",dd);
    printf("双精度浮点型(科学计数法):%e\n",dd);

    long long_d =8899712;
    printf(" 长整型:%ld\n",long_d);

    unsigned long long_e =8899712;
    printf(" 长整型无符号:%lu\n",long_e);

    printf("你好,老六,%s\n","张三"); // 输出字符串:你好,老六,张三

    printf("num mem address %p\n", &num); // 显式内存地址

    printf("100%%\n"); // 在printf中需要输出一个%的话,需要%%

    //扩展控制符
    printf("%5d\n", num);     // %nd n代表的位宽
    printf("%-5d\n", num);    // %nd n代表的位宽 -表示左对齐
    printf("%05d\n", num);    // 位宽不足的地方使用0填充

    printf("%.2f\n",float_c); // %.mf 指定小数点后的位数

    printf("%#o\n",num);      // 八进制前加前缀0
    printf("%#x\n",num);      // 16进制前加前缀0x

    return 0;
}

3.puts

输出字符串并自动换行

功能:输出一个字符串,并在末尾自动添加换行符 \n(无需手动写 \n)。

int puts(const char *str);  // 语法(str为要输出的字符串)

/************************示例************************/
#include <stdio.h>
int main() 
{
    puts("Hello World");  // 输出:Hello World(自动换行)
    puts("C语言");        // 输出:C语言(自动换行)

    return 0;
}

注意:只能输出字符串,无法格式化其他类型(如整数、浮点数)。

二、输入函数

1.getchar

输入单个字符

功能:从终端获取一个字符。这个函数不需要传递参数。返回值是从终端获取到的字符的ASCII码值。阻塞,程序由于某种条件没有具备,被迫进入等待状态。

int getchar(void);  // 语法

/************************示例************************/
#include <stdio.h>
int main()
{
    char c = 0;
    c = getchar();  // 获取字符
    putchar(c);     // 输出该字符

    return 0;
}

注意:返回值类型为 int(而非 char),因为需处理 EOF(值为 - 1,超出char范围)。

2.scanf

格式化输入函数

功能:按指定格式从输入设备读取数据,存储到变量中。

int scanf(const char *format, ...);  // 语法

/************************示例************************/
#include <stdio.h>
int main()
{
    // 接收方式1
    // 从终端接收数据。注意,没有给变量,不接收实际内容
    ret = scanf("hello");

    // 接收方式2
    //在接收数据的时候,需要严格匹配模板,否则接收失败
    int num = 0 ;
    int ret = 0 ;
    ret = scanf("plsnum %d",&num); // plsnum 123,严格按照这个格式
    printf("ret is %d, num is %d\n", ret, num);

    // 接收方式3,推荐,格式化字符串中,不写非控制字符(%d %s %c)
    // 整型数据接收,建议使用
    int num1 = 0;
    int num2 = 0;
    printf("请输入两个数:");
    scanf("%d %d",&num1,&num2); //10 10

    return 0;
}

注意:

  • 在接收变量的过程中,需要给变量取地址(&), 如果接收的是字符串,则不需要这个操作。
  • scanf 尽量少出现非控制字符。尤其是不要出现\n,例如 scanf("%d\n");

3.gets

读取字符串

功能:读取字符串(含空格),直到换行符为止(自动丢弃换行符)。

问题:不检查输入长度,若输入超过数组容量,会导致缓冲区溢出(安全漏洞),已被弃用,建议用 fgets 替代。

4.fgets

安全读取字符串

功能:从输入设备读取字符串(可包含空格),并限制最大读取长度(避免缓冲区溢出)。

char *fgets(char *str, int size, FILE *stream);   // 语法

/************************示例************************/
#include <stdio.h>
int main() 
{
    char str[10];  // 最多存9个有效字符(+1个'\0')
    printf("输入字符串:");
    fgets(str, 10, stdin);  // 从键盘读取,最多9个字符
    printf("你输入的是:%s", str);  // 包含换行符

    return 0;
}

特点

  • 最多读取 size - 1 个字符(剩余 1 个位置存结束符 '\0');
  • 会读取换行符 \n 并包含在字符串中;
  • 若输入长度超过 size - 1,剩余字符会留在输入缓冲区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值