• ベストアンサー

コンパイルできるのに実行できない。

いつも教えて頂き有難うございます。 標記の件。 Ubuntuソフトウェアに付いているGeanyを使っています。 まぁまぁ使いやすいのですが、コンパイルできるのに 実行できない場合、どうしてますか? 間違いを探すのは、不可能なのではないかと思っております。 どうすればいいのでしょうか? ご多忙中恐れ入ります。 ご回答のほど宜しくお願い申し上げます。

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

  • ベストアンサー
回答No.5

まず質問者さんは勘違いしていますが、プログラムは実行できないのではなく、実行できています。 想定通りの挙動ではないかもしれませんが、書かれた通りにきちんと動作しています。 さて本題ですが、No.2の方のお礼コメントにソースコードと実行結果が書かれているので、 それを元に想定通りに動かない原因を考えます。 実行結果が「ファイルをオープンできませんでした。」なので、それが表示される原因を探ります。 ソースコードを確認すると以下の行で実行結果の文字を表示しています。  printf("ファイルをオープンできませんでした。\n"); この文字表示が行われる条件は変数fpがNULLの時です。 ソースコードでそれを意味しているのは以下の行です。  if(fp == NULL){ 更にfpは何かを確認すると、以下の行でfopen関数を使って、 「test3.txt」というファイルを読み込もうとしていることが分かります。  fp = fopen("test3.txt", "r"); fopen関数の結果がNULLになるのはファイルを開くのに失敗した時です。 以上の流れから「test3.txt」ファイルが想定した場所に正しく存在しないため、 このような実行結果になったことが考えられるわけです。 コードの意味が解っていれば結果から原因を追うことができますが、 質問者さんはコードを丸々書き写しただけで1文1文の意味を理解していないため、 「間違いを探すのは、不可能なのではないか」 と思ってしまうような状況になっているわけです。 以前から質問者さんの質問を見ていたのですが、 質問者さんは仕事としてプログラミングをしたいのですよね。 質問者さんが何か月もかけてやろうとしていることは 一般的なプログラマーであれば数日もかからないことです。 ただ時間がかかるだけならまだ許されるかもしれませんが、 質問者さんの行き当たりばったりな行動をみていると、 セキュリティに穴を作りこんで個人情報を流出させてしまったり、 重要なデータを消してしまったりといったことを、 訳のわからないままやってしまう可能性が高いです。 そうなると最悪、損害賠償を請求されるようなことも考えられ、 お金を稼ぐどころかマイナスになることさえありえます。 趣味ではなく仕事としてプログラミングをしたいと考えているのであれば、 全く割に合わないので考え直すことをお勧めします。

jump7799
質問者

お礼

本当にすみません。 これからはプログラムの意味を把握することを 一義としてやっていこうと思います。

その他の回答 (5)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.6

回答No.4の追加です。 回答No.2へのお礼コメントに次のような記述を見つけました。 ---------ここから--------- 実行 ファイルをオープンできませんでした。 となった場合です。 ---------ここまで--------- ソースコードを見ると実行した結果、読み込もうとした「test3.txt」と言うフィルをオープンできなかったことによるもののようです。 従って、提示のソースコードをコンパイルし、ビルドできて実行できていると思います。 「ファイルをオープンできませんでした。」と表示するのは次のコードを実行した結果と思います。 fp = fopen("test3.txt", "r"); if(fp == NULL){ printf("ファイルをオープンできませんでした。\n"); return 1; } つまり、fp(ファイルポインタ)がfopen("test3.txt", "r")の戻り値なのでNULLだったのでしょう。(test3.txtと言うファイルがにつからなかった) 質問するときは正しい情報を提示してください。

jump7799
質問者

お礼

ご回答誠にありがとうございました。 いつも、いつも申し訳ありません。 そのうち、精進致します。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>Ubuntuソフトウェアに付いているGeanyを使っています。 OSをセットアップしただけではGeanyが無いと思います。 apt-getで追加インストールしないとGeanyを使えません。 >コンパイルできるのに実行できない場合、どうしてますか? 実行できないときエラーメッセージが出るはずです。 Geanyはコンパイルでオブジェクトファイルを作成し、ビルドでバイナリファイルを作成するようです。 ビルドしないと実行形式のバイナリファイルが作成されません。 UNIX系のOSでは実行形式のファイルに特定の拡張子を付加しませんので見分けがつかないかも知れません。

jump7799
質問者

お礼

ありがとうございます。 コンパイルとビルド、そしてリントがあります。 /bin/sh: 1: cppcheck not found と書かれています。 多分、これがエラーの時、実行エラーになると思います。 /bin/sh: 1: cppcheck not foundが http://www.clear-code.com/blog/2016/2/3.html を見てもLinuxがよく解らないから解決できないでいます。 bunji様は解るでしょうね。 もし良かったら、ぜひ教えてください。 いつも申し訳ありません。 宜しくお願い申し上げます。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.3

>私は中々見つけられないのですが >探し方のコツはありますか? >あればどうか教えてください。 コツなんてものはありません。 あなたが毎回、質問をされた際、回答者は何を聞いてきましたか? 何をやって、その結果どうなったかを細かく聞いていませんでしたか?

jump7799
質問者

お礼

面目ありません。 ケースバイケースで何を聞いて来たかは解りませんが、 私が何をどこまで、やったのか聞いてきたように思います。

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.2

>実行できない 根拠は何ですか?エラーメッセージでも出ましたか?

jump7799
質問者

お礼

ご回答誠にありがとうございました。 例えば、次のケースです。 #include <stdio.h> #define NUM 8 int main(void) { FILE *fp; int test[NUM]; int max, min; int i, j; fp = fopen("test3.txt", "r"); if(fp == NULL){ printf("ファイルをオープンできませんでした。\n"); return 1; } for(i=0; i<NUM; i++){ fscanf(fp, "%d", &test[i]); } max = test[0]; min = test[0]; for(j=0; j<NUM; j++){ if(max < test[j]) max = test[j]; if(min > test[j]) min = test[j]; printf("No.%-5d%d\n", j+1, test[j]); } printf("最高点は%dです。\n", max); printf("最低点は%dです。\n", min); fclose(fp); return 0; } 実行 ファイルをオープンできませんでした。 となった場合です。 ご回答の程、宜しくお願い申し上げます。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

どこかで何か間違ってるはずなので、それを探し出す。 >間違いを探すのは、不可能なのではないかと思っております。 >どうすればいいのでしょうか? 不可能なら諦めるしかないんじゃないですか? あなたが不可能だと思い込んでるだけでしょうけど。

jump7799
質問者

お礼

ご回答誠にありがとうございます。 どこかに間違いがあるのですね。 解りました。 やってみます。

jump7799
質問者

補足

私は中々見つけられないのですが 探し方のコツはありますか? あればどうか教えてください。 宜しくお願い申し上げます。

関連するQ&A

  • コンパイル・実行のやり方。

    いつも教えていただき大変お世話になっております。 下記の質問、どうか教えてください。 プログラムの冒頭で、次の3行で始まっていたら コンパイル・実行はどう書けばいいですか? OSはUbuntu18.04を使っています。 package sample sample12; import java.util .Arrays; public class Sample12_4 { ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • EclipseでC言語をコンパイル、実行の仕方。

    いつも大変お世話になり誠にありがとうございます。 標記の件。 1問目はまぐれで成功しました。 2問目はなかなか成功しません。 ご多忙中恐れ入ります。 ご回答の程、宜しくお願い申し上げます。

  • Ubuntu Eclipseを使います。

    いつも教わってばかりですいません。 JAVAの件。 EclipseはUbuntuソフトウェアのを使うことにしました。 日本語化は諦めて英語版を使うことにしました。 Eclipse英語版でコンパイル 、インタープリターとして 使うならばどうすればいいのでしょうか? ご多忙中申し訳ありません。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • メモ帳 Java コンパイル Windows10

    いつも教えて頂き、大変お世話になっております。 標記の件。 OSはWindows10を使っております。 Javaのコードをメモ帳に書いたとき コンパイルするとき、どうしますか? 参考書やURLにも詳しく載っていません。 例えば下記のコードをコンパイルするときどうなりますか? public class Program1{ public static void main(String[] args){ system.out.println("Hello world"); } } ご多忙中恐れ入ります。 どうぞ、詳しく教えてください。宜しくお願い申し上げます。

  • JAVAはコンパイルしなければなりません???

    いつもお世話になりありがとうございます。 標記の件。 素朴な疑問です。 JAVAはコンパイルしなければなりません! phpはコンパイル不要です。 JAVAで何か作ろうとしたとき、 例えば、ブログサイトを作る時、 1回1回コンパイルしていたら、 できないと思うのですが どうやってプログラムを作るのですか? 教えてください。 度々申し訳ございません。 宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • Windows10・Ubuntuの共有。

    いつも大変お世話になり誠にありがとうございます。 標記の件。 ボクはWindows10・Ubuntu18.04でデュアルブートにしてます。 どちらでも利用できる領域はできないでしょうか? ご多忙中恐れ入ります。 ご回答の程、宜しくお願い申し上げます。

  • Ubuntu20.04 VLC

    いつも大変お世話になり、誠にありがとうございます。 標記の件。 Ubuntu20.04 VLCでDVDプレーヤーになりません。 何かいい方法、アプリをご存じないでしょうか・・・??? ご多忙中誠に恐れ入ります。 ご回答お待ち申し上げております。 宜しくお願い申し上げます。

  • CANON TS5130印刷ならず。

    いつもお世話になり誠に有難うございます。 標記の件。CANON TS5130を最近、購入しました。 OSはUbuntu17.04です。 UbuntuではTS5130シリーズと登録しております。 Writerを印刷しているのですが、うんともすんとも言いません。 ご多忙中恐れ入ります。アドバイスが欲しいのです。 チェック・ポイントなどをです。 ご回答のほど、宜しくお願い申し上げます。

  • Windows10とUbuntu20.04の連携?

    いつも大変お世話になり、誠にありがとうございます。 標記の件。 Ubuntu20.04GUIをメインに使っております。 Windows10はメールメインに使っております。 相談ですが、Windows10にメールが来たらUbuntu20.04GUIにメッセー ジが来るようにしたいのです。 何かいい方法ないでしょうか・・・??? ご多忙中誠に恐れ入ります。 ご回答お待ち申し上げております。 宜しくお願い申し上げます。

  • コンパイルが通らない

    うちのPCでは確実にコンパイルが通って、実行までできたプログラムが他の人のPCではコンパイルが通らなかったり実行ができません。 実行する際には javac nishi.java java nishi とやると以下のようなエラーがでて実行ができません(コンパイルは通ります。決してjava nishi.classとかjava nishi.javaといったお約束の間違いは行っていません) Exception in thread "main"java.lang.NoClassDefFoundError:nishi また違うファイルではこっちでコンパイルが通るのにあっちではコンパイルが通らなかったりします。バージョンが違うためでしょうか?僕のバージョンが1.5.08?で相手が1.4.2くらいです。だからコンパイルが通らないの?

専門家に質問してみよう