我一直在尝试找出如何制作一个程序,该程序在输入超出范围时循环并拒绝无效输入(例如字母表)或不向程序输入任何内容。我找到了一个解决方案,但它使用 1-99 的数字范围作为可接受的值。我希望能够将范围设置为 1-20 或 1-任何指定范围,但是当我尝试修改程序时,它停止正常工作。有谁知道如何更改此程序以使范围不同(例如 1-20 或 1-30),但程序仍能正常工作,这意味着如果没有输入任何数字,它会告诉用户数字是否超出范围, 或者如果输入了不正确的符号。另外,如果有人设法做到这一点,您能否向我解释一下其背后的逻辑是什么?
#include "stdio.h"
#include "string.h"
int main() {
printf("\nProgram Start.....\n\n");
char userInput[64];
int num = 0;
char temp;
size_t length = 0;
int index = 0;
int flag = 0;
while( num == 0 ) {
length = 0;
flag = 0;
num = 0;
printf("Please enter a number 1 to 99:");
fgets(userInput, 63, stdin);
length = strlen(userInput);
if( length < 2 || length > 3) {
printf("Invalid strlen()\n");
continue;
}
length--;
for(index = 0; index < length; ++index) {
if(userInput[index] < '0' || userInput[index] > '9') {
flag = 1;
break;
}
}
if( flag) {
printf("Invalid character\n");
continue;
}
if( sscanf(userInput, "%d", &num) != 1) {
printf("Invalid sscanf()\n");
continue;
}
if( num < 1 || num > 99) {
printf("Invalid range\n");
continue;
}
printf("Number OK:%d\n",num);
}
printf("\nProgram Quit.....\n");
return 0;
}
最佳答案
让我们先看看如果我们只更改 if( num < 1 || num > 99)
会出现什么问题至 if( num < 1 || num > 20)
其中输入为 25。如果我们达到该测试,我们已经将 25 分配给了 num
。与 sscanf
,因此条件通过,我们打印出错误消息,并且 continue
让我们回到 while
声明:
while( num == 0 )
因为我们已经为 num
分配了一个非零值,我们没有通过这个测试,并退出循环。要解决这个问题,我们可以调整 if
阻止
if( num < 1 || num > 99) {
printf("Invalid range\n");
num = 0;
continue;
}
为什么这不是原始程序中的问题?
在原始程序中,您在进行检查之前已经验证了输入是一个 2 位数字。所以,它可能失败的唯一方法是如果 num
是 0,所以当 continue 将我们抛回到 while
语句,我们重新进入循环。
关于c - C中输入循环的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29012774/