我是编程和一般 C 的新手,目前正在大学学习它。这是一个作业,所以我想避免直接回答,但更多的是在提示或提示/推动正确的方向之后。
我正在尝试使用 strtol 来验证我的键盘输入,更具体地说,测试输入是否为数字。我查看了此处和其他网站上的其他问题,并按照给其他用户的说明进行操作,但这对我没有帮助。
根据我对strtol (long int strtol (const char* str, char** endptr, int base);) 的阅读/理解,如果endptr不是空指针,则函数会将endptr的值设置为第一个字符号码后。
因此,如果我要输入 84948ldfk,endptr将指向“l”,告诉我输入中有数字以外的字符,这将使其无效。
但是在我的情况下,正在发生的事情是,无论我输入什么,我的程序都会返回一个无效输入。这是我的代码:
void run_perf_square(int *option_stats)
{
char input[MAX_NUM_INPUT + EXTRA_SPACES]; /*MAX_NUM_INPUT + EXTRA_SPACES are defined
*in header file. MAX_NUM_INPUT = 7
*and EXTRA_SPACES
*(for '\n' and '\0') = 2. */
char *ptr;
unsigned num=0; /*num is unsigned as it was specified in the start up code for the
*assignment. I am not allow to change it*/
printf("Perfect Square\n");
printf("--------------\n");
printf("Enter a positive integer (1 - 1000000):\n");
if(fgets(input, sizeof input, stdin) != NULL)
{
num=strtol(input, &ptr, 10);
if( num > 1000001)
{
printf("Invalid Input! PLease enter a positive integer between 1
and 1000000\n");
read_rest_of_line(); /*clears buffer to avoid overflows*/
run_perf_square(option_stats);
}
else if (num <= 0)
{
printf("Invalid Input! PLease enter a positive integer between 1
and 1000000\n");
run_perf_square(option_stats);
}
else if(ptr != NULL)
{
printf("Invalid Input! PLease enter a positive integer between 1
and 1000000\n");
run_perf_square(option_stats);
}
else
{
perfect_squares(option_stats, num);
}
}
}
任何人都可以帮助我朝着正确的方向前进吗?显然错误与我的if(ptr != NULL)条件有关,但据我所知,这似乎是正确的。正如我所说,我已经查看了与此类似的先前问题并在答案中采纳了建议,但它似乎对我不起作用。因此,我认为最好根据自己的情况寻求我的帮助。
提前致谢!