您好我需要提示用户输入一些内容然后验证它。只有当它是一个正整数且不大于23时,才能验证输入。我遇到的唯一问题是当用户输入非数字输入时,例如"你好。"下面的代码没有成功检测到任何输入都是非数字的,虽然我已经尝试了很多方法来执行此操作,但它们似乎都不起作用。下面是我似乎通过将输入作为字符串然后将其转换为整数而得到的最接近的,但它仍然不起作用。任何帮助将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void) {
int height;
char input[50];
int cont = 0;
while (cont == 0) {
printf("Please provide a non-negative integer no greater than 23.\n");
scanf("%s", &input);
height = atoi(input);
if (height <= 23 && height >= 0) {
cont = 1;
} else {
//do nothing
}
}
printf("Valid Input.\n");
return 0;
}
答案 0 :(得分:4)
atoi()
函数没有提供返回错误指示符的规定。相反,您可以使用strtol()
功能:
char *end;
height = strtol(input, &end, 10);
if (end == input) {
// no digits were entered
puts("Invalid input.");
continue;
}
答案 1 :(得分:0)
#include <stdio.h>
int main(void) {
int height;
while(1){
printf("Please provide a non-negative integer no greater than 23.\n");
//if(2==scanf("%d%c", &height, &nl) && nl == '\n' && 0<= height && height <= 23)//more limited for "number\n"
if(1==scanf("%d", &height) && 0<= height && height <= 23)
break;
//Clear of invalid input
while(getchar()!='\n')
;
}
printf("Valid Input(%d).\n", height);
return 0;
}
答案 2 :(得分:0)
我假设您必须考虑整个输入而不仅仅考虑某些部分,例如&#34; 12jjj&#34;和&#34; 23h&#34;无效。
在我看来,由于23只有2个字符,所以检查字符串长度和单个字符没有坏处。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
bool ValidateInput (char * input, int &output)
{
if (strlen(input) > 2)
return false;
for (int index = 0; index < strlen (input); index++)
{
if ((input[index] < '0') || input[index] > '9')
return false;
}
output = atoi(input);
return true;
}
int main(void) {
int height;
char input[50];
int cont = 0;
while (cont == 0) {
printf("Please provide a non-negative integer no greater than 23.\n");
scanf("%s", input);
if (ValidateInput (input, height))
break;
}
printf("Valid Input.\n");
return 0;
}
我希望这会有所帮助。