整数验证给出无限循环

时间:2016-10-27 16:29:55

标签: c validation char scanf

用户需要输入一个整数,然后输入enter。如果它被验证,那么它应该返回整数,如果没有验证,用户应该收到错误消息。

当我尝试通过getInt()函数验证输入时,当我输入1个或更多字符时,我得到一个无限循环。当我输入abc时,我得到一个无限循环的错误消息,而输入1a会得到正确的验证(1个错误消息)。我按照这个流程图的说明进行了操作:

getInt() flowchart

代码

  #include <stdio.h>

  void clrKyb(void){
    char input;
    do {
      scanf("%c",&input);
    } while(input !='\n');
  }

  int getInt(void){
    char NL= 'x' ;
    int value ;

    while(NL!='\n'){

      scanf("%d%c",&value,&NL);

      if(NL!='\n') {

       void clrKyb(void);
       printf("Invalid integer, please try again:");

      }

    }   
    return value ;
  }


  int main(void) {
    int iVal;

    printf("Enter an integer: ");
    iVal = getInt();
    printf("You entered: %d\n", iVal);

    return 0;
  }

1 个答案:

答案 0 :(得分:2)

如评论中所述:

cxw said

  • getInt中,void clrKyb(void);应为clrKyb();,因为您想要使用已定义的clrKyb

Jonathan Leffler said

  • 请注意,在clrKyB()(和getInt())中,您需要检查scanf()的返回值。如果它返回EOF,那么任何重试等都不会停止无限循环。 (正如cxw所述,目前在getInt(),您(重新)宣布clrKyB()并且不会将其称为 - 这也是一个问题。)
相关问题