我需要编写一个只接受1-10中的整数(不包括字符和浮点数)的程序。我正在使用fgets
。它运行,但我不能排除浮点数字。这是我代码的一部分:
char choice[256];
int choice1;
fgets(choice, 256, stdin);
choice1 = atoi(choice);
if (choice1 > 0 && choice1 <= 10)
{
switch (choice1)
{
case 1:
...
case 10:
帮助?
您可以使用strtol()
而不是atoi()
进行转换。这将为您提供一个指向第一个不属于数字的字符的指针。如果该字符不是空白,则该数字不是整数。
编辑
下面的内容可能会有所帮助。您需要根据自己的要求进行更改。参见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 ("INVALIDn");
}
printf ("%dn", choice1);
return 0;
}
endptr
将保存第一个无效字符的位置。需要与n
进行比较,因为fgets
也会将换行符存储在缓冲区中。您可能希望以其他方式处理此问题。上面的代码显示了一个概要。
或者,您可能希望手动迭代字符串并根据内容丢弃它。也许下面这样的东西会起作用。
fgets (choice, 256, stdin);
for (i=0; choice[i] != ' ' || choice[i] != 'n'; i++)
{
if (!isdigit (choice[i]))
{
flag = 0;
break;
}
}
当您使用fgets
时,如果行以换行符结束,它将存储在字符串中。
您可以在do while循环中获得帮助。
int c;
do
{
c = getchar();
if(atoi(c) > 0 && atoi(c) <=9)
{
// append character to character array(string)
// For user to under stand what he has entered you can use putchar(c);
}
}while(c!=13)
这不是确切的解决方案,但你可以这样做。不幸的是,我的机器上没有安装c编译器,所以我还没有尝过这段代码。