C确定用户输入是否为整数
嗨,我需要提示用户输入一些信息,然后进行验证。只有当输入为正整数且不大于23时,才必须验证输入。我遇到的唯一问题是当用户输入一个非数字输入,如“hello”。下面的代码没有成功检测到任何输入是非数字的,尽管我尝试了许多方法来实现这一点,但它们似乎都不起作用。下面是我通过将输入作为字符串,然后将其转换为整数得到的最接近的结果,但是它仍然不起作用。任何帮助都将不胜感激C确定用户输入是否为整数,c,validation,input,C,Validation,Input,嗨,我需要提示用户输入一些信息,然后进行验证。只有当输入为正整数且不大于23时,才必须验证输入。我遇到的唯一问题是当用户输入一个非数字输入,如“hello”。下面的代码没有成功检测到任何输入是非数字的,尽管我尝试了许多方法来实现这一点,但它们似乎都不起作用。下面是我通过将输入作为字符串,然后将其转换为整数得到的最接近的结果,但是它仍然不起作用。任何帮助都将不胜感激 #include <stdio.h> #include <stdlib.h> #include <ct
#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;
}
#包括
#包括
#包括
内部主(空){
内部高度;
字符输入[50];
int cont=0;
而(cont==0){
printf(“请提供一个不大于23的非负整数。\n”);
scanf(“%s”,&input);
高度=atoi(输入);
如果(高度=0){
cont=1;
}否则{
//无所事事
}
}
printf(“有效输入。\n”);
返回0;
}
函数没有返回错误指示器的规定。相反,您可以使用strtol()
函数:
char *end;
height = strtol(input, &end, 10);
if (end == input) {
// no digits were entered
puts("Invalid input.");
continue;
}
atoi()
函数没有返回错误指示器的规定。相反,您可以使用strtol()
函数:
char *end;
height = strtol(input, &end, 10);
if (end == input) {
// no digits were entered
puts("Invalid input.");
continue;
}
#包括
内部主(空){
内部高度;
而(1){
printf(“请提供一个不大于23的非负整数。\n”);
//如果(2==scanf(“%d%c”、&height,&nl)&&nl='\n'&&0,包括
内部主(空){
内部高度;
而(1){
printf(“请提供一个不大于23的非负整数。\n”);
//如果(2=SCANF(“%D %C”,和高度,和NL)& & NL=='\n′& & 0<P>,我假设您必须考虑整个输入,而不是只考虑某些部分,如“12JJJ”和“23 H”无效。
在我看来,因为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;
}
#包括
#包括
#包括
#包括
布尔验证输入(字符*输入、输入和输出)
{
如果(strlen(输入)>2)
返回false;
对于(int index=0;index'9')
返回false;
}
输出=atoi(输入);
返回true;
}
内部主(空){
内部高度;
字符输入[50];
int cont=0;
而(cont==0){
printf(“请提供一个不大于23的非负整数。\n”);
扫描频率(“%s”,输入);
if(验证输入(输入,高度))
打破
}
printf(“有效输入。\n”);
返回0;
}
我希望这有帮助。 < P>我假设你必须把整个输入考虑进去,而不是只考虑某些部分,如“12JJJ”和“23小时”无效。
在我看来,因为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;
}
#包括
#包括
#包括
#包括
布尔验证输入(字符*输入、输入和输出)
{
如果(strlen(输入)>2)
返回false;
对于(int index=0;index'9')
返回false;
}
输出=atoi(输入);
返回true;
}
内部主(空){
内部高度;
字符输入[50];
int cont=0;
而(cont==0){
printf(“请提供一个不大于23的非负整数。\n”);
扫描频率(“%s”,输入);
if(验证输入(输入,高度))
打破
}
printf(“有效输入。\n”);
返回0;
}
我希望这有帮助。scanf(“%s”和&input);
是不正确的。提示:input
的类型是什么?对于scanf
,不要使用%s
,没有字段宽度(并且s
说明符采用char*
参数,您传递了char(*)[50]/code>参数):scanf
scanf(“%s”和&input);
不正确。提示:input
的类型是什么?对于scanf
,不要使用%s
,没有字段宽度(并且s
说明符采用char*
参数,您传递了char(*)[50]
参数):scanf 49s”,input)
。当然,您可以使用end
使以数字开头、后跟非空终止符或换行符的字符串无效,而不是使用end==input
接受它们。这是一个偏好问题,但如果您允许“12yes”,则值得记录“yes”的情况\n..也就是说,通过测试if(*end!='\0')
相反。我认为这是更好的建议。当然,您可以使用end
使以数字开头、后跟字符而不是空终止符或换行符的字符串无效,而不是使用end==input
来接受它们。这是一个偏好问题,但值得记录发生了什么如果您允许“12yes\n”,则为“yes”…也就是说,通过测试if(*end!='\0')
来代替。我认为这是更好的建议。