- ベストアンサー
intに文字
int x; printf("数字:"); scanf("%d",&x); としたとき xに数字じゃなく文字が入力した場合に これをもう一回表示させるのにいい方法ありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
int x; for (;;){ printf("数字:"); if (scanf("&d",&x)==1) break; printf("\n数字以外は入力できません\n"); } 「123xxx」「456abc」とかは繰り返さないで入力が成功するので注意。
その他の回答 (2)
- BlueStones
- ベストアンサー率65% (13/20)
こんなんでどうでしょうか。 ---------------------------------------------------------------- #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)
#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; }