質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

5010閲覧

【C言語】指定された文字以外の入力がされた場合

alice331

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/08/10 10:59

1~9までの数字で1つだけ数字が欠けて表示されるように問題を作成しました。
今回行いたいことは、
①1~9以外の数字を入力した場合はもう一度入力して下さいと表示したいです。
②数字以外の入力があった場合は1~9の数字を入力して下さいと表示したいです。
例:a,abc,あ などの入力
うまく出来ずに困っています。
サンプルと解説を頂ければ幸いです。

C

1/* ラックナンバーサーチ・トレーニング(その1)*/ 2 3#include <time.h> 4#include <stdio.h> 5#include <stdlib.h> 6 7#define MAX_STAGE 10 /* 挑戦回数 */ 8 9int main(void) 10{ 11 int i, j, stage; 12 int dgt[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 13 int a[8]; 14 double jikan; /* 時間 */ 15 clock_t start, end; /* 開始時刻・終了時刻 */ 16 17 srand(time(NULL)); /* 乱数の種を設定 */ 18 19 printf("欠けている数字を入力してください。\n"); 20 21 start = clock(); 22 for (stage = 0; stage < MAX_STAGE; stage++) { 23 int x = rand() % 9; /* 0~8の乱数を生成 */ 24 int no; /* 読み込んだ値 */ 25 26 i = j = 0; 27 while (i < 9) { /* dgt[x]を飛ばしてコピー */ 28 if (i != x) 29 a[j++] = dgt[i]; 30 i++; 31 } 32 33 for (i = 0; i < 8; i++) /* 全要素を表示 */ 34 printf("%d ", a[i]); 35 printf(":"); 36 37 do 38 { 39 scanf("%d", &no); 40 scanf("%*[^\n]"); 41 } 42 while (no != dgt[x]); 43 { 44 printf("正解です\n"); 45 } 46 } 47 end = clock(); 48 49 jikan = (double)(end - start) / CLOCKS_PER_SEC; 50 51 printf("%.1f秒かかりました。\n", jikan); 52 53 if (jikan > 25.0) 54 printf("鈍すぎます。\n"); 55 else if (jikan > 20.0) 56 printf("少し鈍いですね。\n"); 57 else if (jikan > 17.0) 58 printf("まあまあですね。\n"); 59 else 60 printf("素早いですね。\n"); 61 62 return 0; 63} 64

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2020/08/11 15:16

07 や 4k もダメにするんですか?
guest

回答3

0

scanf("%d", &no);

では、数字以外は読み込めません。
fgets()で1行読んで、数字の場合だけsscanf()若しくは、strtol()等を使いましょう。
strtol
sscanf

投稿2020/08/10 11:08

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/08/10 11:11

数字の判定は→http://www.c-tipsref.com/reference/ctype/isdigit.html
guest

0

環境依存にはなりますが、この場合は(Windowsなら) conio.hを#includeしたうえで一文字入力_getch()とか使ったほうが話がスッキリする気もします。

#include <conio.h> #include <stdio.h> #include <ctype.h> int main(void) { char ch = _getch(); printf("%c", ch); printf("\n"); if( isdigit(ch) ){ if(ch!='0'){ printf("1~9の数字"); }else{ printf("無効な数字"); } }else{ printf("数字以外"); } return 0; }

他の環境でもなにかしら同様のことは出来るでしょう。

投稿2020/08/11 13:25

thkana

総合スコア7652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

fgetssscanfを使います。入力部分だけ書くと、

C

1char line[200]; 2int n; 3 4while(fgets(line, sizeof line, stdin)){ 5 if(sscanf(line, "%d", &n)==1){ 6 数字が入力された; 7 }else{ 8 数字以外が入力された; 9 } 10}

投稿2020/08/10 12:52

otn

総合スコア84708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問