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