我已经写了一些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()的返回值?
答案 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()