C语言--scanf

关于C语言的scanf,首先看个例子

int get_int(void){
        int input;
        char ch;
        while(scanf("%d",&input)!=1){
                printf("is not an integer,please enter agin
");
        }
        printf("%d
",input);
        return input;
}

这个例子中,如果你输入的不是一个数字的话,程序就会陷入死循环,原因: 如果scanf没有成功读取输入就会将其留在输入队列中,所以下次再从输入队列中读取的时候,还是失败,所以循环了

改正:

int get_int(void){
        int input;
        char ch;
        while(scanf("%d",&input)!=1){
                while(getchar()!='
'){
                        continue;
                }
                printf("is not an integer,please enter agin
");
        }
        printf("%d
",input);
        return input;
}

从输入队列中剔除那些有问题的输入

例子:

/**
 * menu.c
 * @desc 菜单技术
 */
#include <stdio.h>
char get_choice(void);
char get_first(void);
int get_int(void);
void count(void);

int main(void){
        char choice;
        choice = get_choice();
        if(choice != 'q'){
                switch(choice){
                        case 'a':
                                printf("Buy low, sell high
");
                                break;
                        case 'b':
                                putchar('a');
                                break;
                        case 'c':
                                count();
                                break;
                        default:
                                printf("Program error!
");
                                break;
                }
        }
        printf("Bye
");
}

/**
 * 获取一个整数型的输入
 */
int get_int(void){
        int input;
        printf("Please input a int:
");
        while(scanf("%d",&input) != 1){
                printf("input error,Please input again:
");
                while(getchar() != '
'){
                        continue;
                }
        }
        return input;
}

/**
 * 获取用户输入字符串的第一个字符
 */
char get_first(void){
        char ch;
        ch = getchar();
        //清空输入队列中的其他字符
        while(getchar() != '
'){
                continue;
        }
        return ch;
}

char get_choice(void){
        char ch;
        printf("Enter the letter if your choice:
");
        printf("a. advice                       b. bell
");
        printf("c. count                        q. quit
");
        ch = get_first();
        while((ch < 'a' || ch > 'c') && ch != 'q'){
                printf("Please choice a b c or q
");
                ch = get_first();
        }
        return ch;
}

void count(void){
        int n,i;
        printf("Count how far? Enter a integer:
");
        n=get_int();
        for(i=1;i<=n;i++){
                printf("%d
",i);
        }
        while(getchar() != '
'){
                continue;
        }
}
原文地址:https://www.cnblogs.com/bai-jimmy/p/4402406.html