目录
是以计算机为中心,来描述输入输出的
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,剩余字符会留在输入缓冲区。

1989

被折叠的 条评论
为什么被折叠?



