输入输出函数
目录
1.对单个字符串的输入输出(getchar、putchar)
一、函数
C语言中输入输出需要通过函数实现,使用前加上#include,如:
#include <stdio.h>
#include <string.h>
#include "head.h"
二、函数接口
1.对单个字符串的输入输出(getchar、putchar)
函数名 | 功能 | 使用形式 |
putchar | 向终端输出一个字符 (传入一个字符的ASCII码值,将该值对应的字符显示在屏幕上) | putchar('a'); putchar(100); putchar(ch); putchar(ch+5); |
getchar | 从终端接收一个字符,表达式的结果为接到字符的ASCII码值 | char ch = 0; ch = getchar(); |
2.格式化字符串的输入输出(printf、scanf)
函数名 | 功能 |
printf | 向终端输出格式化的字符串 |
scanf | 从终端接收格式化的字符串 |
3.字符串的输入输出
1. printf的使用形式
■ 1. 打印非输出控制符
printf("hello world\n");
=====================================================================
\0 字符串结束标志
\n 换行符
\b 退格符
\t 横向制表符
\v 纵向制表符
\r 回车符
\" " 字符
\\ \ 字符
■ 2. 打印输出控制符
int num = 0;
printf("num = %d\n", num);
=====================================================================
char ch = 0;
printf("ch = %c\n", ch);
=====================================================================
double d = 0;
printf("d = %lf\n", d);
=====================================================================
%d 按照十进制打印
%o 按照八进制打印
%x 按照十六进制打印
%c 按照字符打印
%u 按照无符号类型打印
%f 按照浮点数类型打印
%ld 按照long类型打印
%lf 按照double类型打印
%s 按照字符串打印
%p 按照指针打印
%e 按照指数打印
%% 打印%号
■ 3. printf打印多个输出控制符
□ 输出控制符个数必须与表达式个数一一对应
printf("num1 = %d, num2 = %d\n", num1, num2);
■ 4. 格式
%nd n:域宽,不足域宽,高位用空格补齐
%.mf m:小数点后保留m位有效数字
%-nd -:左对齐
%0nd 0:不足域宽,高位用0补齐
2. scanf使用形式
从终端接收字符串转换为 " " 中间的格式
■ 1. scanf接收非输入控制符
scanf("mn");
scanf("请输入一个数字");
□ 如果接收非输入控制符,需要在屏幕中将所有字符原封不动输入
□ scanf中尽量少出现非输入控制符
□ scanf认为' '和'\n'是用户结束数据的标志,所以不会读取到代码中
■ 2. scanf接收输入控制符
□ scanf除了%s可以不加&,其余都需要加&符号
int num = 0;
scanf("%d", &num);
=====================================================================
float f = 0;
scanf("%f", &f);
=====================================================================
double d = 0;
scanf("%lf", &d);
=====================================================================
char ch = 0;
scanf("%c", &ch);
=====================================================================
char str[32] = {0};
scanf("%s", ch);
=====================================================================
%d 将字符串转换为十进制
%c 从终端接收一个字符
_%c 从终端接收一个非空格和\n的字符
%f 将字符串转换为float类型
%lf 将字符串转换为double类型
%s 从终端接收一个字符串
■ 3. scanf接收多个输入控制符
int Num1 = 0;
int Num2 = 0;
scanf("%d %d", &Num1, &Num2);
3. 字符串的输入输出(puts、gets)
函数名 | 功能 | 注意事项 |
puts | 向终端打印一航字符串 | puts会多打印一个 \n 字符串 |
gets | 从终端接受一行字符串 | gets可以接收带' '的字符串,scanf无法接收带' '的字符串 |
■ 实际应用
/* 定义一个存储 32 个字符的字符数组str,并用字符串"hello world"初始化 */
char str[32] = {"hello world"};
/* 输出字符串,下两项作用相同(后自动跟一个换行) */
puts("hello world");
puts(str);
/* 输出字符串,下两项作用相同('/n'表示换行) */
printf("hello world\n");
printf("str = %s\n", str);
/* 定义字符数组str并初始化为全0(即每个元素都是\0)(常用于数组清零) */
char str[32] = {0};
/* 从终端读取字符串到str,直到遇到换行符为止(换行符会被丢弃,自动添加\0)*/
gets(str);
/* 用格式化输入函数读取字符串,遇到空格、制表符或换行符时停止 */
scanf("%s", str);
■ 缺点
□ gets 不检查数组长度,输入过长会导致缓冲区溢出
□ scanf 同样不检查输入长度,存在溢出风险,且无法读取含空格的字符串