int main() {
int choice;
printf("\n----------Welcome to Coffee Shop----------");
printf("\n\n\t1. Login ");
printf("\n\t2. Sign Up ");
printf("\n\nPlease enter 1 or 2: ");
scanf(" %d", &choice);
system("cls||clear");
//put while loop to check
switch (choice) {
case 1:
system("cls||clear");
login();
break;
case 2:
system("cls||clear");
user_signup();
break;
default:
printf("\nInvalid Number\n");
main();
break;
}
return 0;
}
如果输入不是int,我如何让用户重新输入?我尝试使用isdigit(),但它不起作用,我可以知道解决方案是什么吗?
5条答案
按热度按时间ef1yzkbh1#
scanf
返回匹配成功的输入项的数量。因此,您可以构建一个循环,该循环一直运行到恰好得到一项为止。一个非常简单的方法是:
也就是说,我建议您看看
fgets
和sscanf
。o7jaxewo2#
scanf(" %d", &choice);
无法处理转换后的输入超出int
范围的情况。这会导致 * 未定义的行为 *。使用
scanf()
删除。使用
fgets()
将用户输入的 line 读入 string,然后进行验证。如需
str2subrange()
的详细信息,请参阅Why is there nostrtoi
instdlib.h
?。zlhcx6iw3#
我认为最好是以字符串的形式接收,然后检查是否所有字符都是数字,如果所有字符都是数字,则将其转换为int
就像这样
qyswt5oh4#
scanf()
函数返回已成功转换和赋值的字段数。因此,在scanf(" %d", &choice);
行中,可以执行以下操作:6rqinv9w5#
您应该使用循环来代替递归调用
main()
。还可以考虑使用getchar()
而不是scanf
来输入单个字符。例如,下面的代码可以完成您想要的操作。