3

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:

ヘルプ?

4

3 に答える 3

1

編集

以下のようなものが役立つかもしれません。必要に応じて変更する必要があります。のマンページを参照してください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行が改行文字で終了している場合に使用すると、文字列に格納されます。

于 2013-08-29T07:55:37.060 に答える