• ベストアンサー

intに文字

int x; printf("数字:"); scanf("%d",&x); としたとき xに数字じゃなく文字が入力した場合に これをもう一回表示させるのにいい方法ありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

int x; for (;;){ printf("数字:"); if (scanf("&d",&x)==1) break; printf("\n数字以外は入力できません\n"); } 「123xxx」「456abc」とかは繰り返さないで入力が成功するので注意。

その他の回答 (2)

回答No.3

こんなんでどうでしょうか。 ---------------------------------------------------------------- #include <stdio.h> void main() {  int x;  while(1)  {   char buf[ 64 ];   printf("数字:");   // 入力文字列の取得   gets( buf );   // 数値だけかの判定   if( sscanf( buf, "%d%s", &x, buf ) == 1 )    break;   printf("数字以外は入力できません\n");  }  printf("x=%d\n", x); } ---------------------------------------------------------------- 説明: まず、入力を文字列として取得して、 次に、文字列を数値に変換して代入します。 ここでは、sscanf()を用いて代入と判定を同時にしています。 判定方法は、戻り値が  0の場合:文字から始まる入力  1の場合:数字だけの入力  2の場合:数字の後に文字が付加された入力 -1の場合:何も入力されていない なので、1ならば入力を終了します。 こんな説明で理解できたでしょうか^_^;

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int main(void) { char buf[BUFSIZ]; int i, n, x, flag; do { printf("数字:"); if (fgets(buf, BUFSIZ, stdin) == NULL) { return 0; } n = strlen(buf); buf[--n] = '\0'; flag = 0; for (i = 0; i < n; ++i) { if (!isdigit(buf[i])) { printf("数字以外は入力できません\n"); flag = 1; break; } } } while (flag != 0); x = atoi(buf); printf ("input = %d\n", x); return 0; }

関連するQ&A