【C语言】标准输入/输出(printf, scanf, gets, puts, getchar, putchar)

标准文件 文件指针 设备
标准输入 stdin 键盘
标准输出 stdout 屏幕
标准错误 stderr 您的屏幕

标准输入/输出的函数在标准库stdio.h。

#include <stdio.h>

1、printf   输出

printf :格式化输出,输出到标准输出stdout中。

printf:   int  printf(const  char  *format, ...)

参数:format是字符串(包含输出的内容,也可以包含占位符(格式化说明符))。

返回:输出的字符总数。若失败,返回负数。

注意:printf 输出不包括换行符'\n',需手动添加。

format 说明符(占位符):

类型 合格的输入 参数的类型
%a、%A 读入一个浮点值(仅 C99 有效)。 float 
%f、%F 浮点数。以小数形式输出单、双精度实数。例如:-732.103 float 
%e、%E 浮点数。以指数形式输出单、双精度实数。例如:7.12e4 float 
%g、%G 浮点数。以%f或%e中较短的输出宽度输出单、双精度实数 float 
%i 读入十进制,八进制,十六进制整数 。 int 
%d 十进制整数。正数不输出符号 int 
%o 八进制整数。 int 
%x、%X 十六进制整数。 int 
%u 无符号的十进制整数。 unsigned int 
%c 单个字符 char 
%s 字符串。将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。 char 
%p 读入一个指针 。(指针存储内存地址。获取内存地址:&变量名)
%[] 扫描字符集合 。
%% 读 % 符号。
#include <stdio.h>

int main(void)
{
    int i = 10;
    float f = 3.1415926;
    char c = 'a';
    char s[6] = "hello";
    printf("int m: %6d \n", i);        // 宽度为6的整数
    printf("float k: %.2f \n", f);     // 2位小数的浮点数
    printf("char c: %c \n", c);        // 单个字符
    printf("string s: %s \n", s);      // 字符串
    printf("string s = %s, the first char is %c \n", s, s[0]);      // 字符串中第一个字符
    printf("int m memory address is %p \n", &i);                    // 整数m的内存地址
    return 0;
}

// 结果:
int m:     10 
float k: 3.14 
char c: a
string s: hello
string s = hello, the first char is h
int m memory address is 000000000061FE14

2、scanf   输入

scanf :从标准输入stdin,读取格式化输入。

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

参数:format是字符串(包括占位符)。

返回:成功匹配或赋值的个数。若到达文件末尾或发生错误,返回NULL。

注意:scanf 碰到空格就停止读取。 

// scanf 不能显示输入的提示信息,用printf 提前输出提示信息。
#include <stdio.h>

int main(void)
{
    char s[16];
    printf("Input: ");
    scanf("%s", s);      // 读取输入的字符串
    printf("Output: %s", s);
    return 0;
}

// 结果:
Input: good luck    【输入:good luck】
Output: good
// 若scanf中有提示信息,则输入内容时要手动把提示信息一并输入。
#include <stdio.h>

int main(void)
{
    char s[16];
    // printf("Input: ");
    scanf("Input: %s", s);      // 读取输入的字符串(提示信息也需输入)
    printf("Output: %s", s);
    return 0;
}

// 结果:
Input: good luck       【输入:Input: good luck】
Output: good

字符串是指针,指向字符数组。字符串名本身就表示了内存地址(第一个字符的内存地址)。

而整数,则需要通过 "&变量名" 获取内存地址。

#include <stdio.h>

int main(void)
{
    int m, n;
    printf("Input two number: ");
    scanf("%d %d", &m, &n);            // 读取输入的整数
    printf("Output two number: %d %d", m, n);
    return 0;
}

// 结果:
Input two number: 1 2          【输入:1 2】
Output two number: 1 2

3、gets, puts   输入/输出整行字符

gets(s):读取输入的一行字符串,从标准输入stdin读取一行 并存储到字符串s指向的内存空间。

gets:   char  *gets(char  *str)

参数:str是指向字符数组的指针,该数组存储读取的字符串。

返回:指针,指向读取到的字符串。若没有读取到内容或发生错误,返回NULL。

注意:读取到换行符 或到达文件末尾 就停止。

可能导致缓冲区溢出,若避免,可使用fgets函数,例如:fgets(str20stdin)从标准输入stdin读取最多20个字符(包括结束符'\0')存储到str指向的内存。

puts(s):输出字符串,将字符串s写入到标准输出stdout中。

puts:   int  puts(const  char  *str)

参数:str是要输出的字符串。

返回:字符串长度(包括结束符'\0')。若发生错误,返回NULL。

注意:碰到空字符就停止,且输出中不包括空字符。换行符会被追加到输出中(即输出中包括换行符'\n')。

#include <stdio.h>

int main(void)
{   
    char s[16];
    printf("Input: ");
    gets(s);               // 读取输入的内容
    printf("Output: ");
    puts(s);               // 输出读取的内容
    return 0;
}

// 结果:
Input: good luck       【输入:good luck】
Output: good luck

4、getchar, putchar   输入/输出一个字符

getchar():读取输入的一个字符,从标准输入stdin获取一个字符(包括回车)。

getchar:  int  getchar(void)

参数:无。

返回:读取的字符(无符号char强制转为int形式) 。如果到达文件末尾或发生读错误,则返回 EOF。

注意:正常输入以按回车(换行符'\n') 结束。

putchar(c):输出一个字符,即将指定字符写入到标准输出stdout。

putchar:    int putchar(int char)

参数:char是要输出的字符。

返回:输出的字符(无符号char强制转为int形式) 。如果发生错误,则返回 EOF。

#include <stdio.h>

int main(void)
{
    char c;
    printf("Enter a value: ");
    c = getchar();         // 读取输入的内容
    printf("The value is: ");
    putchar(c);            // 输出一个字符
    return 0;
}

// 结果:
Enter a value: abc  【输入abc】
The value is: a

 同一时间只能输入/输出一个字符,可用循环输入/输出多个字符。

#include <stdio.h>

int main(void)
{   
    printf("Enter a value: ");
    char c;
    // 通过循环输入/输出多个字符
    while((c = getchar()) != '\n' && c != EOF)
    {
        putchar(c);
    } 
    return 0;
}

// 结果:
Enter a value: abc    【输入abc】
abc

相关推荐

  1. C语言标准输入输出

    2024-04-03 05:30:03       38 阅读
  2. C++标准输入输出和名字空间

    2024-04-03 05:30:03       27 阅读
  3. C语言】(7)输入输出

    2024-04-03 05:30:03       35 阅读
  4. C语言】格式化输入/输出

    2024-04-03 05:30:03       22 阅读
  5. C语言中的输入输出详解

    2024-04-03 05:30:03       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 05:30:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 05:30:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 05:30:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 05:30:03       20 阅读

热门阅读

  1. 【webrtc】m98: 音视频流同步 StreamSynchronization

    2024-04-03 05:30:03       17 阅读
  2. uniapp小程序使用uQRCode.js生成二维码

    2024-04-03 05:30:03       14 阅读
  3. 游戏盾SDK为小程序APP提供安全的网络保障!

    2024-04-03 05:30:03       12 阅读
  4. 云原生学些-第一章-云原生到底是什么?

    2024-04-03 05:30:03       16 阅读
  5. MySQL、Redis 和 Zookeeper 实现分布式锁方法及优缺点

    2024-04-03 05:30:03       15 阅读
  6. react native的事件通知 DeviceEventEmitter

    2024-04-03 05:30:03       14 阅读
  7. 【SpringCloud】Eureka注册中心 代码详细介绍

    2024-04-03 05:30:03       19 阅读
  8. linux防火墙设置端口对外开放

    2024-04-03 05:30:03       16 阅读
  9. Clickhouse为什么如此快?

    2024-04-03 05:30:03       12 阅读
  10. 关于其他服务器篡改请求头导致登录失效

    2024-04-03 05:30:03       15 阅读
  11. 大语言模型开发各个阶段的评估方法(未完)

    2024-04-03 05:30:03       15 阅读