标准输入

一、标准输入:

概念: 标准输入一般指的是键盘的设备文件, 从键盘获取数据就成为标准输入

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
posted @ 2023-07-24 10:40  被迫学习  阅读(82)  评论(0)    收藏  举报