zoukankan      html  css  js  c++  java
  • 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;
            }
    }
  • 相关阅读:
    bzoj1053(反素数)
    poj1442(对顶堆)
    poj2823(单调队列)
    poj3630(简单tire)
    poj1924(单调栈求最大矩阵)
    最大xor路径(poj3764)
    poj2689
    求n!末尾0的个数
    BigInteger和BigDecimal的基本用法
    大数乘法
  • 原文地址:https://www.cnblogs.com/bai-jimmy/p/4402406.html
Copyright © 2011-2022 走看看