如何停止制作此C代码循环?

时间:2017-02-09 18:49:22

标签: c repeat

我已经写了一些C代码,您可以通过输入1或2从答案中选择,如果您输入更高的数字,它会让您回来选择另一个号码就好了。但是,如果我尝试输入的内容不是值或数字,如字符串或字符,则底部的错误消息将无限重复。如果在输入任何其他字符时输入的数字大于1或2,我如何使我的代码行为相同?这里使用的代码是抽象的:

#include <stdio.h>

int a;

int main(){
    b:scanf("%d", &a);
    if(a==1)
    {
        a=0;
    }
    if(a==2)
    {
        a=0;
    }
    else
    {
        a=0;
        printf("\nERROR: Please try again.\n\n");
        goto b;
    }
}

编辑:显然返回值在它返回时仍然停留在scanf()中。如何清除scanf()的返回值?

3 个答案:

答案 0 :(得分:-1)

#include <stdio.h>

int a;

int isNumeric(const char *str) 
{
    while(*str != '\0')
    {
        if(*str < '0' || *str > '9')
            return 0;
        str++;
    }
    return 1;
}

int main(){

    char inputStr[10];
    while(1){
        scanf("%9s",inputStr);
        if(!isNumeric(inputStr)){
            a=0;
            printf("\nERROR Not a number: Please try again.\n\n");
        }else {
            a = atoi(inputStr);
            if(a==1){
                a = 0;
            }else if(a == 2){
                a == 0;
            }else{
                a=0;
                printf("\nERROR : Please try again.\n\n");
            }
        }`enter code here`
    }
}

尚未测试过。但我想你会得到一个好主意。检查strtol功能。这也很有用。

答案 1 :(得分:-1)

根本不要使用gotos。而是使用while循环:

#include <stdio.h>

int main(void) {
 int a, end = 1; //end determines if the loop should end
 do { //a do-while loop - it's the same as a while loop, except it runs atleast once
  scanf("%d", &a);
  switch (a) { //switches the value of a
  case 1: 
  case 2: printf("You entered %d\n", a);
          end = 0; //sets end to 0, which will end the loop(see below)
          break;
  default: printf("\nERROR: Please try again.\n\n");
  }
 } while (end); //every non-zero value is true, so when I set end to 0, it will end the loop
return 0; //don't forget the return 0: it shows you that your program ran without error
}

所以我写了它,只要你输入一个有效的输入就会结束。您也不需要将a设置为零,因为每次运行循环时都会再次读取它 编辑:如果您想检查5x等无效输入,可以使用以下内容:

int check, var, error;
char ch;
do {
 error = 0;
 check = scanf("%d%c", &var, &ch);
 if (check != 2 || ch != '\n') {
  printf("Wrong input. Try again -> ");
  error = 1;
  fflush(stdin);
 }
} while (error); 

答案 2 :(得分:-2)

像...... 注意:显然999是一个任意值。刚刚选择给你举个例子。

#include <stdio.h>


int main(){
int a = 1;
while (a != 999){
  scanf("%d", &a);
  if(a==1)
  {
     a=0;
  }
  if(a==2)
  {
    a=0;
  }
  else if (a != 999)
  {
      a=0;
      printf("\nERROR: Please try again.\n\n");
  }
 } // while()
} // main()