如何将浮点数字排除在输入之外并向用户发送错误消息

  • 本文关键字:用户 消息 错误 数字 排除 c
  • 更新时间 :
  • 英文 :


我需要编写一个只接受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编译器,所以我还没有尝过这段代码。

相关内容

  • 没有找到相关文章

最新更新