みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Eclipseだとエラーになります。

いつも大変お世話になっております。
標記の件。
TeraPadでは成功したコードがEclipseでは通りません。
どうしてでしょうか?
アドバイスのほどよろしくお願い申し上げます。

コード
#include <stdio.h>

void buy(int x, int y)
{
printf("%d万円と%d万円の車を買いました。\n",x ,y);

}

int main (void)
{
int num1, num2;

printf("いくらの車を買いますか?\n");
scanf("%d", &num1);

printf("いくらの車を買いますか?\n");
scanf("%d", &num2);

buy(num1, num2);

return 0;
}

コンパイルエラー
C:\MinGW>gcc Sample1.c -o Sample1
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

どうゆうことでしょうか?
ご回答のほどよろしくお願い申し上げます。

投稿日時 - 2018-05-07 09:58:28

QNo.9495982

困ってます

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

>Eclipseのコンソールには何も出ないのです。
Eclipseで何をしたときに何処に何も出ないのですか?
言葉のキャッチボールが出来ていませんのであなたがやっていることがこちらでは見えません。

>C言語はエディターでやります。
これも何のことか分かりません。
C言語のコードを書くのはエディターで出来ますがコンパイルやビルドはコンパイラーで実行しないと実行可能なバイナリファイルが生成できません。
TeraPadでC言語のソースファイルを編集して所定の位置へ保存し、MinGWのgccでコンパイルとビルドをしてWindows OSで実行可能なexeファイルを作らないとプログラムを作ったことになりません。

>NetBeansを教えてくれる人がいたら
>NetBeansを使うかも知れません。
メモ帳とコマンドプロンプトでC言語の簡単なプログラムを作成できない人が種々のプログラム開発ツールを渡り歩いても身に付くはずがありません。
あなたはプログラム言語での実行ファイルを作る基本的な考え方を理解していないと思いますのでメモ帳とコマンドプロンプトでサンプルプログラムを多数実証してプログラム言語で記述されたコードと実行ファイルの動作の関連性を理解するまで繰り返すことをお薦めします。
私はあなたが提示したC言語のコードについてメモ帳とコマンドプロンプトでMinGWのgccでコンパイルする方法とEclipse内臓のエディターで編集し、Eclipseに組み込まれたMinGWでビルドし、Eclipseに内臓のコンソールで実行ファイルを起動した結果を比較できました。
その結果、Eclipseのコンソールではprintfでコンソールへ出力したデータが直ぐに出力されずscanfで入力された後のprintfと一緒にコンソールへ出力されるという現象に気付きました。
それを解決するには出力データを一時記憶するバッファー機能に貯められたデータを強制的に吐きさせるfflushを使う方法を見つけました。
このように情報収集と応用力を駆使してコードを作成しないと目的通りのプログラムができません。(回答No.2で簡単な説明をしました)

>多分Eclipseでしょう。
プログラム開発の言語と開発環境の使い方は専門の教育機関で学習しないと習得できないかも知れません。(質問が断片的で然も回答を読みこなせていません)

投稿日時 - 2018-05-07 23:00:10

お礼

おっしゃる通り、子供が遊んでいるのとそう変わらず、

色々なエディターや統合開発環境に興味があるだけです。

あまり、勉強になっていません。

心を改めます。

投稿日時 - 2018-05-09 15:13:25

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

回答No.5の「Eclipseのコンソールには何も出ないのです。」に対する説明の補足です。
Eclipseのエディターでソースを書いてプロジェクトのビルドを実行したときにエラーはでないがバイナリのexeファイルを実行するとEclipseのコンソールに入力を促すメッセージがでないということでしたらprintfとscanfの間にfflush(0);と言う行を挿入してください。
尚、再ビルドの前には必ずファイルの保存を行ってください。

投稿日時 - 2018-05-09 13:59:22

お礼

ご回答誠にありがとうございます。

マダ、そこまで至ってません。

ガンバります。

投稿日時 - 2018-05-09 15:01:41

ANo.6

>>TeraPadでは成功したコードがEclipseでは通りません。
>>どうしてでしょうか?

>ここでも認識自体が間違ってます。

自分のやってることを ある程度(100%とは言いません) 理解している必要があります。
回答者が言っていることを ある程度(100%とは言いません) 理解している必要があります。
そうでないとbunjiiさんの仰ってるとおり「言葉のキャッチボールが出来ていません」と言うことになります(それは意思疎通が困難と言うことです)。

投稿日時 - 2018-05-08 00:20:48

お礼

意思の疎通もガンバります。

ご回答誠にありがとうございます。

投稿日時 - 2018-05-09 15:05:05

ANo.4

>TeraPadでは成功したコードがEclipseでは通りません。
>どうしてでしょうか?

ここでも認識自体が間違ってます。
恐らくEclipseでソーソを入力したのでしょうか?、そのソースをMinGW(gcc)でコンパイルし、MinGW(gcc)でエラーが発生してます(Eclipseで通らないのではありません)。

Sample1.cは どのフォルダーに有りますか?、Sample1.cが有るフォルダーを確認してSample1.cをフルパスで指定して下さい。

wormholeさんの仰るとおり、コマンドプロンプトで 「type フルパス\Sample1.c」で表示させて確認してみて下さい。

そんなことしてるより、Eclipseでコンパイルした方が簡単です。

投稿日時 - 2018-05-07 21:10:38

お礼

ご回答誠にありがとうございます。

もう色々なエディターや統合開発環境があるので、

頭がごジャごジャになりました。

1から出直します。

投稿日時 - 2018-05-09 15:17:09

ANo.3

>TeraPadでは成功したコードがEclipseでは通りません。
>どうしてでしょうか?

私が毎度いっているように自分で何をやっているのかを全く理解していないからです。
eclipseで確かに質問に書かれているコードを書いてはいるのでしょうが
コンパイルしようとしているSample1.cに、それが本当に書かれていますか?

>C:\MinGW>gcc Sample1.c -o Sample1

を行う前に type Sample1.c で確認してください。

また以前「C:\MinGW>gcc Sample1.c -o Sample1」について説明して下さいといいましたが再度同じく説明してください。
「C:\MinGW>gcc Sample1.c -o Sample1を行いたかったんです」なんて答えを聞いてるんじゃないです。
それをやることで何がどうなるかを聞いてるんです。

投稿日時 - 2018-05-07 19:32:46

ANo.2

>TeraPadでは成功したコードがEclipseでは通りません。
TeraPadはエディターですでよね?
GCC(MinGW)との連携ツールがあるのですか?(私は使っていません)
EclipseのバージョンはOxygen.3a Release (4.7.3a)でしょうか?
「Eclipseでは通りません」とはEclipseのコンソールでどのようなメッセージですか?

>コンパイルエラー
>  中略
>どうゆうことでしょうか?
エラーメッセージはgccコマンドでコンパイルしたときのものですよね?
Eclipseとは関係のないエラーのようです。
当方ではエラーになりませんがscanfの前にprintfで出力している文字列がバッファーに残りキー入力後にまとめて吐き出しています。
これはEclipseのコンソールの仕様であると思います。
fflush(0);をscanfの前に挿入することで吐き出してくれます。

投稿日時 - 2018-05-07 14:43:19

お礼

ご回答誠にありがとうございます。

Eclipseのコンソールには何も出ないのです。

C言語はエディターでやります。

C言語をほぼ極めたら、JAVAをやります。

NetBeansを教えてくれる人がいたら

NetBeansを使うかも知れません。

多分Eclipseでしょう。

今後とも宜しくお願い申し上げます。

投稿日時 - 2018-05-07 16:44:29

ANo.1

>どうゆうことでしょうか?

Eclipseでは
int main (void)
は許されません。

Eclipseでは
int main(int ,char **)
を定義しないとスタートアップルーチンからmainを呼び出せません。

int main (void)

int main (int argc,char **argv)
に書き変えれば、コンパイルできます。

投稿日時 - 2018-05-07 11:32:58

お礼

貴重なご回答誠にありがとうございます。

投稿日時 - 2018-05-09 15:02:52