让scanf函数处理多余的字符——利用%*c 吃掉一个字符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/richenyunqi/article/details/82954593

让scanf函数处理多余的字符——利用%*c 吃掉一个字符

问题阐述

scanf函数是C语言的标准输入函数,编程过程中经常会遇到利用scanf函数读取输入数据时需要让scanf函数忽略一个输入字符的情况,忽略的字符通常是换行符。例如下面的输入:
1
c
我们需要读取数字1和字符c。然而,在输入数字1后面有一个换行符,如果我们直接读取输入,不考虑这个换行符的话会出现读取的字符是换行符而不是字符c的情况,例如如下的代码:

#include <stdio.h>
int main(){
    int a;
    char b;
    scanf("%d%c",&a,&b);
    if(b=='\n')
        printf("\\n");
    else
        printf("%c",b);
    return 0;
}

如果读取上面的输入的话,它的控制台输出是:
控制台输出
显然读取到的字符是换行符。

通过getchar()来吸收换行符

我们可以通过getchar()来吸收换行符这个换行符,代码如下:

#include <stdio.h>
int main(){
    int a;
    char b;
    scanf("%d",&a);
    getchar();//吸收换行符
    scanf("%c",&b);
    if(b=='\n')
        printf("\\n");
    else
        printf("%c",b);
    return 0;
}

它的控制台输出是:
控制台输出
可以看到经过getchar()函数处理之后就可以读取到字符c了

利用%*c 吃掉一个字符

getchar()函数虽然可以达到效果,但是略显麻烦。在scanf函数中可以利用%*c 吃掉一个任意一个字符,代码如下:

#include <stdio.h>
int main(){
    int a;
    char b;
    scanf("%d%*c%c",&a,&b);
    if(b=='\n')
        printf("\\n");
    else
        printf("%c",b);
    return 0;
}

控制台输出是:
控制台输出
显然这种方法编码方便得多。更加推荐

阅读更多

扫码向博主提问

日沉云起

用最短的代码,写最快的算法
  • 擅长领域:
  • 算法
去开通我的Chat快问
换一批

没有更多推荐了,返回首页