标准输入
一、标准输入:
概念: 标准输入一般指的是键盘的设备文件, 从键盘获取数据就成为标准输入
scanf( ); // 扫描键盘 (格式化输入数据 ‐‐> 从键盘中获得指定类型的数据)
函数原型:
int scanf(const char *format, ...);
参数分析:
const char *format:格式控制,可以添加文本
...:省略号,根据对应的格式化控制的字符,对应一个内存地址
返回值:
成功 返回具体获取到的项目数
失败 返回0
getchar( ) ; // 获取一个字符 (默认从标准输入文件中获取)
函数原型:
int getchar(void);
参数:
无
返回值:
成功 返回一个ASCII值, 代表获得的字符 (unsigned char )
失败 返回 EOF 也就是 ‐1
示例
#include <stdio.h>
int main(int argc, char const *argv[])
{
int ret_val = 0; // 记录格式控制符个数,sacnf函数的返回值
int num = 0;
char c = '0';
ret_val = scanf("%d", &num);
printf("ret_val = %d,the input data is %d\n", ret_val, num);
ret_val = scanf("%c", &c);
printf("ret_val = %d,the input data is %c\n", ret_val, c);
return 0;
}
运行结果
11
ret_val = 1,the input data is 11
ret_val = 1,the input data is
分析:
第一个scanf里面有残留的回车在缓冲区,回车被下一次的sacnf函数读取
解决方案:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int ret_val = 0; // 记录格式控制符个数,sacnf函数的返回值
int num = 0;
char c = '0';
ret_val = scanf("%d", &num);
while (getchar() != '\n') // 清空scanf的缓冲区
{
}
printf("ret_val = %d,the input data is %d\n", ret_val, num);
ret_val = scanf("%c", &c);
while (getchar() != '\n') // 清空scanf的缓冲区
{
}
printf("ret_val = %d,the input data is %c\n", ret_val, c);
return 0;
}
运行结果:
11
ret_val = 1,the input data is 11
hf
ret_val = 1,the input data is h

浙公网安备 33010602011771号