当错误输入数字

时间:2017-08-25 13:54:16

标签: c

我有一个代码。想法是当我需要输入一个数字但我输入一个非数字字符,检查错误并要求我输入一个工作号码,或继续或中断。但它跳过代码没有输入数字。这是代码:

int EnterNumber(){
    int number;
    printf("Enter your's number:");
    if(!scanf("%d", &number)){
        puts("Keypress don't number!"); 
        int choose = 0;
        puts("Work:\n\t1. Continue 2. Break \nYour's number will choose:");                 
        while(!scanf("%d", &choose)){   // here it jumped.I cann't enter number!
            switch(choose){
                case 1: 
                    EnterNumber();
                    break;
                case 2:
                    break;
                default:
                    puts("Keyboard don't recognize");
                    break;
            }
        }
    }

    return number;
}

有人可以帮我解决错误吗?

1 个答案:

答案 0 :(得分:0)

您似乎在帖子中实现了递归。但是代码中的某些行不是必需的,并且会妨碍递归算法的潜在效率。

递归算法的基本要素可以在2个语句中捕获:

  

1)每个递归调用应该在相同的较小实例上   问题,         也就是说,一个较小的子问题   2)递归调用必须最终到达基本情况,这是解决的         没有进一步的递归   ( from here

以下是对原始EnterNumber()函数的修改,简化为仅包含上面列出的递归算法的基本要素。

  
      
  • 读取并测试输入字符(较小的实例...)
  •   当测试失败时,
  • 离开标准(基本情况......)
  •   

可以根据需要进行扩展,以便在原始帖子中包含您想要的其他功能(例如更多用户输入,或者通知用户输入不是数字)

void EnterNumber(char a);

int main(void)
{

    char c;
    int num;

    printf("Enter your number:");
    scanf(" %c", &c);
    //     ^ notice space preceeding format char, 
    //       comsumes newline from previous read and allows next input
    num = isdigit(c);
    EnterNumber(c);
    printf("\nHit any key to exit\n");
    getchar();
    return 0;
}

/// Simple demo of recursion:
/// caches input as long as it is a number
/// outputs cache and exits if alpha char
void EnterNumber(char a)
{
    if(isdigit(a) != 0)
    {
        printf("Enter your number:");
        scanf(" %c", &a);
        //     ^ notice space preceeding format char, 
        //       comsumes newline from previous read and allows next input
        EnterNumber(a);    
    }
    printf("%c\n", a);
}

关于 scanf() 函数的格式字符串中的空格:

  

空格字符:该函数将读取并忽略任何空格   在下一个非空白字符之前遇到的字符   (空格字符包括空格,换行符和制表符 -   见isspace)。格式字符串中的单个空格验证任何内容   从流中提取的空白字符数量(包括   没有)。 ( from here