编辑
像下面这样的东西可能会有所帮助。您需要根据您的要求进行更改。参见手册页strtol
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int choice1;
char *endptr, choice[256];
fgets (choice, 256, stdin);
choice1 = strtol (choice, &endptr, 10);
if (endptr != NULL && *endptr != '\n')
{
printf ("INVALID\n");
}
printf ("%d\n", choice1);
return 0;
}
将endptr
保存第一个无效字符的位置。需要与 进行比较,\n
因为它fgets
还将换行符存储在缓冲区中。您可能希望以其他方式处理此问题。上面的代码显示了一个大纲。
或者您可能希望手动迭代字符串并根据内容丢弃它。可能像下面这样的东西会起作用。
fgets (choice, 256, stdin);
for (i=0; choice[i] != '\0' || choice[i] != '\n'; i++)
{
if (!isdigit (choice[i]))
{
flag = 0;
break;
}
}
当您使用fgets
如果该行以换行符终止时,它将存储在字符串中。