如何在C中输入正确的输入之前让控制台循环?

时间:2014-10-22 13:47:25

标签: c input while-loop

我在C中有一个程序,通过接受输入选择然后产生输出来模拟用户和程序之间的ATM交互。

用户必须输入值1111才能继续进行交易,如果不是这样,程序会输出错误并一直要求用户输入正确的引脚,直到程序读入1111。 / p>

我尝试使用while循环来继续请求正确的值1111,并且在输入之前,程序一直要求用户输入正确的引脚。

void main() {

    int pin;

    printf("Please enter the default pin: ");

    while ( pin != 1111 ) 
    {
        printf("Invalid input ");
        printf("Please enter the default pin again: ");
        scanf("%d", &pin);

        if (pin == 1111) 
        {
            //The program continues
        }

    }     
}

每次输入错误的引脚时,它会再次询问引脚,然后因程序停止工作而发生错误而崩溃。我想我正在造成一个无限循环,但我不确定发生了什么。

3 个答案:

答案 0 :(得分:3)

scanf返回结果(成功读取的项目数)。你应该使用那个结果。阅读scanf(3)以及您正在使用的所有功能的文档。另外,在每个\n格式控制字符串的末尾添加printf(或调用fflush(3) ...)

编译所有警告和调试信息(gcc -Wall -g)。然后使用调试器gdb

答案 1 :(得分:2)

你可能想要这个:

void main()
{
  int pin ;

  printf("Please enter the default pin: ");
  scanf("%d", &pin);  

  while ( pin != 1111 ) 
  {
    printf("Invalid input\n");
    printf("Please enter the default pin again: ");
    scanf("%d", &pin);
  }

 printf("program continues...");  //The program continues
}

示例执行

Please enter the default pin: 1234
Invalid input
Please enter the default pin again: 2222
Invalid input
Please enter the default pin again: 1111
program continues...

答案 2 :(得分:1)

检查scanf是否成功读取整数。如果失败则会读取一个字符并再试一次 如果scanf读取整数,则检查它是否是正确的引脚。如果没有,它会再次重新提示并扫描。

#include<stdio.h>
#include<stdlib.h>

int main() {
    int pin = 0;
    int ch = 0;

    printf ( "Enter the default pin\n");
    while ( pin != 1111) {
        if ( scanf ( "%d", &pin) == 1) { // scanf read an int                                                             
            if ( pin == 1111) {
                break; // the correct pin                                                                                 
            }
            else {
                printf ( "Enter the default pin\n"); //reprompt                                                           
            }
        }
        else {
            while ( ( ch = getchar()) != '\n') { //scanf failed to read int. clear input and retry
                if ( ch == EOF) {
                    fprintf ( stderr, "problem getting input\n");
                    return 1;//if EOF exit
                }
            }
        }
    }

    return 0;
}