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

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

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

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

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

解決済

「新・明解C言語 中級編」マスターマインド List4-6で入力文が出ない

MakoGuwa71
MakoGuwa71

総合スコア10

C

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

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

2回答

-2評価

0クリップ

293閲覧

投稿2022/01/14 03:09

編集2022/01/15 11:22

Macにて柴田望洋著「新・明解C言語 中級編」でC言語をAtom・ターミナルGCCを使って練習していますが、第4章マスターマインド のList4-6で詰まってしまいました。初級編・中級編の第3章までは詰まってもネットでみたり、コードを少し変えたりしてすすめられましたが、ご教示いただければ幸いです。演習ではなく、本に載っているコードをそのまま走らせる部分です(118ページ List4-6)。

*本題に直接関係ないお説教などはご遠慮ください・・(前ありました)

発生している問題・エラーメッセージ

下記にのせるコードをMac・ターミナルで走らせたところ、エラーは出ないのですが、本来なら

■ マスターマインドをしましょう。
■ 四つの数字の並びを当ててください。
■ 同じ数字が複数含まれることはありません。
■ 4307のように連続して入力してください。
■ スペース文字などを入力してはいけません。

の後に「入力してください:」が出るはずですが、上記メッセージまでしか出ません。
黒い■のメッセージまでがでて、プログラムはそのまま走っているのですが、「入力してください」が出ず、数値をその状態でいれても何も起こらないので、CTRL+Cで強制終了させるしかない状態です。

「入力してください:」をどうやって表示すればよいかご教示ください。

** 該当のソースコード**

C

#include <time.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> void make4digits(int x[]) { int i, j, val; for(i=0; i<4; i++){ do{ val = rand() % 10; for(j=0; j<1; j++) if(val==x[j]) break; }while(j<i); x[i] = val; } } int check(const char s[]){ int i, j; if(strlen(s) !=4) return 1; for(i=0; i<4; i++){ if(!isdigit(s[i])) return 2; for(j=0; j<i; j++) if(s[i]==s[j]) return 3; } return 0; } void judge(const char s[], const int no[], int *hit, int *blow){ int i, j; *hit = *blow = 0; for(i=0; i<4; i++){ for(j=0;j<4; j++){ if(s[i] == '0' + no[j]){ if(i == j) (*hit)++; else (*blow)++; } } } } void print_result(int snum, int spos){ if(spos == 4) printf("正解です!" ); else if(snum == 0) printf("それらの数字は全く含まれません。\n" ); else{ printf("それらの数字中%d個の数字が含まれます。\n", snum); if(spos == 0) printf("ただし位置もあっている数字はありません。\n" ); else printf("その中の%d個は位置もあっています。\n", spos); } putchar('\n'); } int main(void) { int try_no = 0; int chk; int hit; int blow; int no[4]; char buff[10]; clock_t start, end; srand(time(NULL)); puts("■ マスターマインドをしましょう。"); puts("■ 四つの数字の並びを当ててください。"); puts("■ 同じ数字が複数含まれることはありません。"); puts("■ 4307のように連続して入力してください。"); puts("■ スペース文字などを入力してはいけません。\n"); make4digits(no); start = clock(); do{ do{ printf("入力してください:" ); scanf("%s",buff); chk = check(buff); switch (chk) { case 1: puts("\aきちんと4文字で入力してください。"); break; case 2: puts("\a数字以外の文字を入力してください。"); break; case 3: puts("\a同一の数字を複数入植しないでください。"); break; } }while(chk != 0); try_no++; judge(buff,no, &hit, &blow); print_result(hit + blow, hit); }while(hit < 4); end = clock(); printf("%d回かかりました。\n所要時間は%.1f秒でした。\n", try_no, (double)(end-start)/CLOCKS_PER_SEC ); return 0; }

自分で調べたことや試したこと

初級編・中級編の第3章までは詰まってもネットでみたり、コードを少し変えたりしてすすめられました

使っているツールのバージョンなど補足情報

Mac OS Mojave 10.14.6
Terminal, Atomを使用
GCC 4.2.1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

maisumakun

2022/01/14 03:13

> 上記メッセージまでしか出ません。 「そこでプログラムが終了してしまう」、あるいは「メッセージは出ないけれど入力待ちになっていて、入力すれば一応進む」、「入力を受け付けないけれど終了もしない」など、どのような状態なのでしょうか?
y_waiwai

2022/01/14 03:40

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
MakoGuwa71

2022/01/14 06:11

maisumakun  様:黒い■のメッセージまでがでて、プログラムはそのまま走っているのですが、「入力してください」が出ず、数値をその状態でいれても何も起こらないので、CTRL+Cで強制終了させるしかない状態です。 y_waiwai様:ご指摘の通り修正いたしました。また文頭も読みにくかったので書き直しました。よろしくお願いいたします。
otn

2022/01/14 16:08

これは自分で打ち込んだのですか?出版社のサポートサイトからダウンロードした物ですか? 手で打ち込んだのであれば、まず間違いなくタイプミスですです。 と思ったら、回答にありますね。1とiのタイプミスです。
MakoGuwa71

2022/01/15 02:21

otn様:ありがとうございました。無事動くようになりました。様々な考えはありますがシンプルに「〜行のタイプミスですよ」と言って欲しかったです・・

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

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

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。