用getchar函数消除scanf最后输入的回车,以实现两个scanf并用

1.相对于scanf,gets函数不仅代码更简洁,还能输入空格,值得一提的是,在最后敲出来的换行符会从缓冲区中取出,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着如果前面使用过gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了。

例如:

#include <stdio.h>
int main(void)
{
    char str[30];
    char ch;
    printf("请输入字符串:");
    gets(str);
    printf("%s\n", str);
    scanf("%c", &ch);
    printf("ch = %c\n", ch);
    return 0;
}

运行结果:

用getchar函数消除scanf最后输入的回车,以实现两个scanf并用

 2.如果把gets()改称scanf:

#include <stdio.h>
int main(void)
{
    char str[30];
    char ch;
    printf("请输入字符串:");
    scanf("%s",str);
    printf("%s\n", str);
    scanf("%c", &ch);
    printf("ch = %c\n", ch);
    return 0;
}

输入的字符串不能含有空格

运行结果:

用getchar函数消除scanf最后输入的回车,以实现两个scanf并用

这时,我们将在scanf输入回车后,这个回车无法被消掉,于是当下一个scanf遇到时,直接被回车处理掉了,所以我们得加入getchar()来清空缓存区(消除回车)。

代码:

#include <stdio.h>
int main(void)
{
    char str[30];
    char ch;
    printf("请输入字符串:");
    scanf("%s",str);
    printf("%s\n", str);
    getchar();
    scanf("%c", &ch);
    printf("ch = %c\n", ch);
    return 0;
}

运行结果:

 用getchar函数消除scanf最后输入的回车,以实现两个scanf并用

这样数据就能正常输入了,美中不足的就是不能输入空格。

上一篇:牛客网 BC28-大小写转换(你好,2022)


下一篇:传递闭包:sorting it all out