1.输入输出
概念
输入--->计算机--->输出
键盘 内存 显示
2.输入输出功能
(1).C语言本身并不提供输入输出功能。
使用的是c语言函数库中的 "标准输入输出" 函数
(2).c语言函数库提供的输入输出函数
getchar/putchar //操作一个字符 'a'
gets / puts //操作一个字符串 //"abcd" (放到 数组 再说)
scanf/printf //格式化的函数
(3).需要加上 <stdio.h> 头文件
3.函数
getchar/putchar
getchar
int getchar(void); //函数原型
功能:
从键盘获取一个字符
参数:
void --- 表示为空 //表示使用时不需要给实参
返回值:
返回值 表示 获取到的字符的 ASCII码值
putchar
int putchar(int c);
功能:
输出一个字符
参数:
@c --- 表示要输出的的字符
返回值:
成功 输出了的字符的ASCII码值
失败 -1
示例:
#include <stdio.h>
int main() {
int c;
printf("输入: ");
c = getchar();//获取字符
printf("输出: ");
putchar(c); // 输出刚才输入的字符
return 0;
}
注意:
getchar() 通常在每次调用时等待用户输入一个字符,并在用户按下回车键后返回。
printf() 函数的基本用法:
函数原型:
int printf(const char *format, ...);
printf() 函数的第一个参数是一个格式控制字符串 format,它指定了输出的格式和布局。
... 表示可变参数列表,用来传递给 printf() 的具体数据或变量。
格式控制字符串:
格式控制字符串可以包含普通字符和格式说明符。格式说明符以 % 开头,后面跟着一个或多个字符,用来指定输出的格式。
(1).格式控制字符串
a.普通字符 --- 原样输出
b.占位符 --- 匹配后面的输出参数的
整型
%d --- 转换为 有符号 十进制形式
%u --- 转换为 无符号 十进制形式
%o --- 转换为 八进制形式
%x --- 转换为 十六进制形式
%X --- 转换为 十六进制形式 a b c d e f以大写形式输出
0X //x也会是大写
浮点型
%f --- 转换为 十进制形式的小数,输出时默认保留6位小数,不足6位 补0
%e --- 转换为 科学计数法的形式
%E 指数形式中e 变成 大写 E
%g --- 以 一种 更简洁的方式输出,同时不会输出无意义的0
字符型
%c --- 转换为字符形式输出
%s --- 转换为字符串形式输出
占位符
%[辅助控制符]d
辅助控制符:
# ---- %#x //打印出8进制 或 16进制的前缀
%#o
m ---- 数字 表示要输出的数据的宽度
如果数据本身的宽度 > m 此时按照实际宽度输出
如果数据本身的宽度 < m 此时按照m宽度输出,空出来的位置 填空格
默认右对齐
-m ---- 按指定宽度输出 ,左对齐 (负号表示左对齐)
0m ---- 多出来的位置 可以填充0
.n ---- n数字
%f //%.2f //表示保留2位小数
%e
%s //表示 保留前n个字符
l ---- long
ll ---- long long //整型
h ---- half
hh ---- half half
示例用法:
#include <stdio.h>
int main() {
int num = 42;
float pi = 3.1415926535;
char letter = 'A';
char str[] = "Hello, world!";
printf("Integer: %d\n", num);
printf("Float: %f\n", pi);
printf("Character: %c\n", letter);
printf("String: %s\n", str);
return 0;
}
在上面的示例中,printf() 函数根据格式控制字符串 %d, %f, %c, %s 分别输出整数、浮点数、字符和字符串的值。
注意事项:
格式控制字符串中的格式说明符应与要输出的数据类型匹配,否则可能导致未定义的行为。
占位符 与 输出参数 对应关系 一一对应的
scanf //格式化输入函数
函数原型:
int scanf(const char *format, ...);
scanf() 函数的第一个参数是一个格式控制字符串 format,它指定了输入数据的格式。
... 表示可变参数列表,用来接收输入的数据,并将其存储到相应的变量中。
格式控制字符串:
格式控制字符串中包含格式说明符(以 % 开头),用来指定如何解析输入的数据。
(1).格式控制字符串 //与printf中的 一样
scanf("a = %d");
a.普通字符 --- 原样输入
b.占位符 --- 将从键盘输入的数据 转换成指定的格式
整型
%d --- 转换为 有符号 十进制形式
%u --- 转换为 无符号 十进制形式
%o --- 转换为 八进制形式
%x --- 转换为 十六进制形式
%X --- 转换为 十六进制形式 a b c d e f以大写形式输出
% 0X //x也会是大写
浮点型
%f --- 转换为 十进制形式的小数,输出时默认保留6位小数,不足6位 补0
%e --- 转换为 科学计数法的形式
%E 指数形式中e 变成 大写 E
%g --- 以 一种 更简洁的方式输出,同时不会输出无意义的0
字符型
%c --- 转换为字符形式输出
%s --- 转换为字符串形式输出
(2).地址列表
int a;
scanf("a = %d",&a);
辅助控制符
%d
%md //数据宽度 ---输入宽度
%ld //
%lf //输入的时候 ,这里要做到精确匹配
%f --- float
%lf --- double
%Lf --- long double
%ld --- long
%lld --- long long
示例用法:
#include <stdio.h>
int main() {
int num;
float pi;
char letter;
char name[50];
printf("Enter an integer: ");
scanf("%d", &num);
printf("Enter a float: ");
scanf("%f", &pi);
printf("Enter a character: ");
scanf(" %c", &letter); // 注意空格用来跳过空白字符
printf("Enter your name: ");
scanf(" %49[^\n]", name); // 读取字符串,最多49个字符(保留一个字符给空字符)
printf("Integer: %d\n", num);
printf("Float: %f\n", pi);
printf("Character: %c\n", letter);
printf("Name: %s\n", name);
return 0;
}
在上面的示例中,scanf() 函数根据格式控制字符串 %d, %f, %c, %s 分别读取整数、浮点数、字符和字符串,并将其存储到 num, pi, letter, name 变量中。
注意事项:
scanf() 函数根据格式控制字符串从输入中读取数据。它会忽略输入中的空白字符(空格、换行符等),除非格式控制字符串中显式指定。
必须使用变量的地址(即使用 & 操作符)作为参数传递给 scanf(),以便将输入的数据存储到正确的位置。
scanf 格式控制字符串中 尽量不出现 普通字符,一般只写 占位符
scanf 输入结束的条件(匹配结束的条件) :
a.遇到非法字符 匹配结束
b.遇到空白符 匹配结束
c.空白符 (空格 回车 tab)
e.超过指定的宽度 结束
scanf的格式控制字符串中,如果出现 空白符 ,表示匹配任意多个空白符
%*c 表示 匹配一个数据项 但是并不把这个数据给到任何一个变量: