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

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

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

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

terminal

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

MacOS(OSX)

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

Q&A

解決済

2回答

640閲覧

実行ファイルに関するエラー

culepass_1899

総合スコア2

C

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

terminal

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

MacOS(OSX)

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

0グッド

0クリップ

投稿2021/10/01 19:36

前提・実現したいこと

大学の授業の予習中です。Macのターミナルに問題が起きました。
コードの問題はないと思います。

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

コンパイル済みの実行ファイルがターミナルで正しく実行されません
./a.out とすると、何も起きず、1文字入力すると入力した文字にかかわらず5とだけ出力されてプログラムが終了します
どの実行ファイルに対しても同じ問題が起きるので、コードの問題ではないと思います。
エラーメッセージ
エラーは出ません

該当のソースコード

#include <stdio.h>

#define N 11
#define YES 1
#define NO 0

main(){
int h[N];
int lo,hi,k,z,i,find;

//データの読み込み
for ( i = 0; i < N; i++) {
scanf("%d",&h[i] );
}

scanf("%d",&z );//探す値の入力

find=NO;
lo=0;
hi=N-1;

do {
k=(lo+hi)/2;
if (h[k]>z) {hi=k-1;}
if (h[k]<z) {lo=k+1;}
if (h[k]==z){find=YES;}
} while(find==NO && hi>lo);/探す値が見つかっておらず、かつ探索範囲内の上限値>下限値であれば繰り返す/

if(find==YES){
printf("%d\n",k );
}else{
printf("No data\n" );
}
}

C言語 

試したこと

ソフトウェアのアップデート
Macのターミナルアプリを使っていたのですが、この問題が解決されないので、iTermをインストールして実行してみましたが、問題は解決しませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

jbpb0

2021/10/01 21:09

c++のコードの一番最初の行のすぐ上に ```c++ だけの行を追加してください また、c++のコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/e378967f71829feb9e6187e5be60349f.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
jbpb0

2021/10/01 22:07

> どの実行ファイルに対しても同じ問題が起きる とは、たとえば https://www.geekpage.jp/programming/c/helloworld.php の「hello.c」をコンパイルした場合でも、 > ./a.out とすると、何も起きず、1文字入力すると入力した文字にかかわらず5とだけ出力されてプログラムが終了します となる、という意味でしょうか?
culepass_1899

2021/10/02 12:41

試してみるとhello.cの実行は出来ました。 しかし以前なら実行できていたファイルも実行できなくなっています。
jbpb0

2021/10/04 01:39

> hello.cの実行は出来ました。 「printf()」は大丈夫ですね https://webkaru.net/clang/input-number-scanf/ に記載のコードでは、どうでしょうか? コンパイルして、 ./a.out で実行したら、 x = と表示されるはずで、そこに整数をキーボード入力してからリターンキーを叩いたら、どうなりますでしょうか? キーボード入力した整数が表示されたら、正常です
culepass_1899

2021/10/04 03:17

scanf関数の前に入力の指示を加える文をprintf関数で追加するとうまくいきました。 解決しました。 回答していただきありがとうございました。
jbpb0

2021/10/04 03:30

私の回答の最後のコメントに書いたように、本当は見つかるはずなのに見つからない場合があります そのコメントでは「4」が見つからない場合を書いてますが、「7」も見つかりません (他にもあるかも) そこに書いた修正方法が正しいか、ちゃんと確認してないので分からないですが、それを参考にして、どうしたらいいのか考えてみてください
guest

回答2

0

c

1↓みつけた処理 2if (h[k]==z){ 3 find=YES; 4} 5 6↓表示処理 7if(find==YES){ 8 printf("%d\n",k );

あきらかに変ですよね
表示しているのは何番目で、該当する数字じゃないことに気づいて

投稿2021/10/02 00:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

当方のMacのターミナルで確認しましたが、問題ありませんでした

質問のコードだと、「a.out」の実行後に何を入力すべきかが分かりにくいので、下記のようにその表示(printf文)だけ追加しました

c

1#include <stdio.h> 2 3#define N 11 4#define YES 1 5#define NO 0 6 7main() { 8 int h[N]; 9 int lo, hi, k, z, i, find; 10 11 //データの読み込み 12 printf("input %d times:\n", N); 13 for (i = 0; i < N; i++) { 14 scanf("%d", &h[i]); 15 } 16 17 printf("\ninput:\n"); 18 scanf("%d", &z); //探す値の入力 19 20 find = NO; 21 lo = 0; 22 hi = N - 1; 23 24 do { 25 k = (lo + hi) / 2; 26 if (h[k] > z) {hi = k - 1;} 27 if (h[k] < z) {lo = k + 1;} 28 if (h[k] == z) {find = YES;} 29 } while (find == NO && hi > lo); /*探す値が見つかっておらず、かつ探索範囲内の上限値>下限値であれば繰り返す*/ 30 31 printf("\nanswer:\n"); 32 if (find == YES) { 33 printf("%d\n", k); 34 } else { 35 printf("No data\n"); 36 } 37}

上記コードをgccでコンパイルして、できた「a.out」をターミナルで

sh

1./a.out

で実行して、下記のように入力して確認しました

sh

1input 11 times: 20 31 42 53 64 75 86 97 108 119 1210 13 14input: 158 16 17answer: 188

上記例で、「input 11 times:」「input:」「answer:」と、最後の8は、プログラムが表示するものです
キーボード入力するのは、上記例の場合は、「input 11 times:」の後の0〜10と、「input:」の後の8です
「answer:」の次の数値が、探した数値が11個の数値の何番目だったかです
(ただし、0から数えるので、「8」は本当は9番目)

同じ手順を実行した場合に、同じ結果になるか、確認してみてください

投稿2021/10/03 10:04

編集2021/10/04 01:48
jbpb0

総合スコア7653

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

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

jbpb0

2021/10/03 10:17

質問のコードのままだと、「input 11 times:」「input:」「answer:」が表示されないので分かりにくいですが、コンパイル後にターミナルで ./a.out 0 1 2 3 4 5 6 7 8 9 10 8 と連続してキーボード入力したら、回答が 8 と正常に表示されました
pepperleaf

2021/10/03 12:35

普通に動くと思いますが、、、 まさか、全角で入力してる? とか
jbpb0

2021/10/04 01:57

pepperleafさん > まさか、全角で入力してる? とか 全角で入力した場合は、一つ目を入力したら、入力した文字に関わらず No data と表示され、 > 1文字入力すると入力した文字にかかわらず5とだけ出力され とはなりませんでした もしかしたら、gccのバージョンが違うと、結果が変わるのかもしれませんが 当方のMacで使ってるのは、下記のちょっと古いやつです Apple clang version 11.0.0 (clang-1100.0.33.17)
jbpb0

2021/10/04 02:35

質問者さん 質問内容とは別ですが、ちゃんと判定されない場合があります ./a.out input 11 times: 0 1 2 3 4 5 6 7 8 9 10 input: 4 answer: No data こうするのかな? (未確認) } while (find == NO && hi > lo); ↓ 修正 } while (find == NO && hi >= lo);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問