• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンパイラソフトがmsysなので判りません!?)

コンパイラソフトのエラーについて

このQ&Aのポイント
  • コンパイラソフトのmsysでエラーが発生して動作しないため、アレンジ方法が分からず理論の勉強をしています。
  • プログラムの実行結果として、ストライク1回、ボール1回入力した場合にどのような画面が表示されるのか疑問です。
  • msys用にアレンジしたプログラムはどのようなものになるのか気になります。

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

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

main()を書いたり、printf(), scanf()使っているのでそれらを宣言するかstdio.hをincludeするかするなどすれば動かせるかと思いますよ。 #include <stdio.h> int main( void ) { int judge; int strike = 0; int ball = 0; while( strike < 3 && ball < 4 ){ printf( "ストライク=1 or ボール=2 ?" ); scanf( "%d", &judge ); if( judge == 1 ) strike++; else if( judge == 2 ) ball++; printf( "%dストライク,%dボール\n\n", strike, ball ); } if( 3 == strike ) printf( "3振\n" ); if( 4 == ball ) printf( "4球\n" ); return 0; }

gogatunijyuku
質問者

補足

ご回答ありがとうございました。 MSYSを使ってMinGWでコンパイルしましたが以下のエラーが出ました。 $ gcc a.c -o a.exe c:\MinGw\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot open output file a.exe: Permission denied collect2: ld returned 1 exit status 以上よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.4

> cannot open output file a.exe: Permission denied 権限不足でa.exeというファイルを書き出せないというエラーメッセージですね。 a.cを書き込み・編集できているはずなのにa.exeは書き込めないのは難解です。 そのディレクトリで ls -la を実行したらどうなりますか? 既にa.exeというファイルがそこに存在している場合は一度それを消してからやり直してみてください。 a.exeが存在していない場合は、書き込みができる他のディレクトリにa.cをコピーして、そこへcdで移動してからもう一度試してください。

全文を見る
すると、全ての回答が全文表示されます。
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

質問者は初歩の初歩、Hello Worldのプログラムを書いたり実行したりしたことはないのでしょうか? もしあれば、質問文に書かれているのは完全なプログラムではなくその断片だということが分かると思います。ゆえに、msysだろうが他のCコンパイラだろうが、質問文に書かれている内容だけではコンパイル・実行できず、「msys用のアレンジ」というものは存在しません。 ついでに書くなら、私の知っているmsysならばそれは「コンパイラソフト」ではありません。 > 以上プログラムで、ストライクを1回、ボール1回入力した場合、出力画面にどん画面が出てくるのでしょうか? ストライク=1 or ボール=2 ?1 ストライク=1 or ボール=2 ?2 ストライク=1 or ボール=2 ? と出るでしょう。

gogatunijyuku
質問者

補足

ありがとうございます。 自分なりに理解を深めています。  お待ちください^^

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

これがプログラムの一部だとすると、この程度の内容なら、大抵のCコンパイラなら、変更の必要なくコンパイルできます。msysで使うgccでも、Visual C++でも、Borland Cでも、です。 まさかと思いますが、ここに書いたので全部、ということは無いですか? ちゃんと、main関数として定義してありますか? > エラーがでて動きません 具体的にどんなエラーなのでしょうか? エラーメッセージを読んで、原因を考えて、修正して、次回からは同じエラーを出さない、出てもすぐ直せるようにする、というのが、プログラミング上達のコツの一つです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字化けするのはなぜ?

    コンパイラはMinGWで、シェルはMSYSです。 以下はプログラムは、あるサイトで作成してもらったプログラムです。ファイル名「a.c」でコンパイルはできましたが!? #include <stdio.h> int main( void ) { int judge; int strike = 0; int ball = 0; while( strike < 3 && ball < 4 ){ printf( "ストライク=1 or ボール=2 ?" ); scanf( "%d", &judge ); if( judge == 1 ) strike++; else if( judge == 2 ) ball++; printf( "%dストライク,%dボール\n\n", strike, ball ); } if( 3 == strike ) printf( "3振\n" ); if( 4 == ball ) printf( "4球\n" ); return 0; } 以上です。  シェルのMSYSでファイル名「a」と入力し (a.exeのプログラムを呼び出す。) 画面に a 以下入力すると 1 2 1 2 1 以上、入力後「エンター」→プログラムが働いて ストライク=1 or ボール=2 ?1ストライク,0ボール ストライク=1 or ボール=2 ?1ストライク,1ボール ストライク=1 or ボール=2 ?2ストライク,1ボール ストライク=1 or ボール=2 ?2ストライク,2ボール ストライク=1 or ボール=2 ?3ストライク,2ボール となるのが常ですが、  文字化けした「画像」を添付しました。 文字化けした部分をコピーしてメモ帳にベーストとしたら ちゃんと”回答”が表示されます!  なぜ文字化けすのですか? ちなみに、「コンパイラ」と「シェル」は、教本のに付録したのを使用しています。  教本のプログラムは文字化けはしません。 以上宜しくお願いします。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、それらの値の差が10以下でなければ、「それらの差は10以下」そうでなければ「それらの差は11以上」と表示するプログラムを作成せよ。ただし、論理OR演算子を用いること。 (自分の解答) #include <stdio.h> int main(void) { int n1,n2; printf("2つの整数を入力してください\n"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); if ( (n1-n2) <= 10 || (n1-n2) >= 11) { /*ここがわかりません*/ printf("それらの差は10以下です。"); } else { printf("それらの差は11以上です。"); } return 0; } 論理OR演算子の使い方が分かりません。 解答お願いいたします。

  • 中央値をもとめる

    このプログラムだとたとえば 1、100、99を入力したときに間違った値を出します。どうすればいいでしょうか?おねがいします。 #include <stdio.h> int main(void) { int a, b, c, m; int max; printf("1個目の数値:"); scanf("%d", &a); printf("2個目の数値:"); scanf("%d", &b); printf("3個目の数値:"); scanf("%d", &c); max = a; if(max < b) max = b; if(max <= c) m = max; printf("%d, %d, %d の中央値は%dです。\n", a, b, c, m); }

  • ヒントをください!

    ある課題があるんですが、 「ユーザに好きな整数を10個入力させ、その最小値と最大値を出力するプログラムを書いてください。if文を使ってください。」 このプログラムを作る際のヒントをください。ぜんぜんわからないので。。。 答えは作ってから見たいので。。。 よろしくおねがいします。 10個数字を入力させるプログラムは作りました。 #include <stdio.h> int main(void){ int c,e,r,u,t,v,d,a,p,n; printf("好きな整数を10個入力してください。\n"); printf("整数を入力:"); scanf("%d",&c); printf("整数を入力:"); scanf("%d",&e); printf("整数を入力:"); scanf("%d",&r); printf("整数を入力:"); scanf("%d",&u); printf("整数を入力:"); scanf("%d",&t); printf("整数を入力:"); scanf("%d",&v); printf("整数を入力:"); scanf("%d",&d); printf("整数を入力:"); scanf("%d",&a); printf("整数を入力:"); scanf("%d",&p); printf("整数を入力:"); scanf("%d",&n); return 0; } このようになりました。

  • 合計の出し方

    よろしくお願いいたします。 プログラミングの勉強中です。 国語:78 算数:94 理科:68 社会:70 英語:75 合計点は385点です。 と表示されるプログラムを作り、数字は変えられるようにscanfを使用します。 自分で以下のように作ってみたのですが、合計だけがめちゃめちゃな数で出て来てしまいます。 どこが間違っているか教えていただけますか? #include<stdio.h> main() { int kokugo; int sansuu; int rika; int syakai; int eigo ; int sum = kokugo+sansuu+rika+syakai+eigo; printf("国語:"); scanf("%d",&kokugo); printf("算数:"); scanf("%d",&sansuu); printf("理科:"); scanf("%d,&rika"); printf("社会:"); scanf("%d,&syakai"); printf("英語:"); scanf("%d,&eigo"); printf("合計点は%d点です。",sum); }

  • 素数を判定するプログラム

    素数を判定するプログラムをC言語で作れという問題があったのですが、以下のものをビルドして実行したら途中で止まってしまいました。(例えば5と入力する)しかし、1以下の場合は正常にif文が評価されました。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n; int i; printf("1より大きい整数を入力してください: "); scanf("%d", &number); if (number <= 1) { printf("1より大きい整数を入力してください\a: "); scanf("%d", &number); } for (n = 2; n = number - 1; n++) { i = number % n; if (i = 0) { printf("%dは素数ではありません", number); break; } } printf("%dは素数です", number); return 0; } 自分ではどこがおかしいのかさっぱりわかりません。よろしくお願いします。

  • またプログラムの修正おねがいします。

    キーボードから出力した3つの整数について、以下の判定を行い 判定結果を出力するプログラムを作成する。 全部同じ 2つ同じ バラバラ * 論理演算子を使わないこと。 * インデントを正しくつけること。 #include<stdio.h> void main(void) { int a,b,c; printf("a --->"); scanf("%d",$a); printf("b --->"); scanf("%d",$b); printf("c --->"); scanf("%d",$c); if(a==b){ if(b==c){ printf("全部同じ\n"); } } else if(a!=b){ if(b==c){ printf("2つ同じ"); } else if(a==c){ printf("2つ同じ"); } else{ printf("バラバラ"); } } } 最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

  • 警告 W8065について。

    このプログラムを実行したら、実行結果は思い通りになったのですが、 「警告 W8065…プロトタイプのない関数」 と言うのが出ました。  (1)これを消すにはどうすればよいのかを教えてください。  (2)このプログラムはわざと4つに分けているのでこの状態のままプログラムのどこをいじればよいのかを教えてください。 OSはWindows XPでボーランドのコンパイラを使用しています。 #include<stdio.h> int hiki(); int kake(); int waru(); int main(){ int a,b; printf("一つ目の数字\n"); scanf("%d",&a); printf("二つ目の数字\n"); scanf("%d",&b); printf("計%d\n",a+b); hiki(); return 0; } int hiki (){ int c,d; printf("一つ目の数字\n"); scanf("%d",&c); printf("二つ目の数字\n"); scanf("%d",&d); printf("計%d\n",c-d); kake(); return 0; } int kake (){ int e,f; printf("一つ目の数字\n"); scanf("%d",&e); printf("二つ目の数字\n"); scanf("%d",&f); printf("計%d\n",e*f); waru(); return 0; } int waru (){ int g,h; printf("一つ目の数字\n"); scanf("%d",&g); printf("二つ目の数字\n"); scanf("%d",&h); printf("計%d\n",g/h); return 0; }

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値表示するプログラムを作成せよ。 (自分の解答) #include <stdio.h> int main(void) { int num1,num2; int sum=0; do { printf("整数1>整数2となる整数をそれぞれ入力してください\n"); printf("整数1:"); scanf("%d",&num1); printf("整数2:"); scanf("%d",&num2); if (num1 < num2) printf("整数1>整数2としてください\n"); } while (num1 < num2); printf("%d以上%d以下の全整数の和は",num2,num1); for (num2;num2 <= num1;num2++) { sum=sum+num2; } printf("%dです。",sum); return 0; } これでも一応正しく実行されるのですが、ごちゃごちゃしてるので簡潔に書けないでしょうか? 回答お願いします。

  • scanf関数の戻り値について

    --------------------------------------- #include<stdio.h> int main(void) { int dt; while(scanf("%d",&dt)==1){ if(dt==0){ printf("0は入力しないでください\n"); puts(""); } else if(dt<0){ dt=-dt; printf("入力値の絶対値は「%d」です\n",dt); puts(""); } else{ printf("入力値の絶対値は「%d」です\n",dt); puts(""); } } return 0; } --------------------------------------- 以上のプログラムについて疑問があります。 scanf関数の戻り値が1の間、繰り返すというもので、入力の時に整数入力ですが、あえて実数である1.1を入れたとします。 scanfの戻り値は1で、dtには整数部の1だけ設定されていたので、これでもうまくいくのかと思ったのですが、次の入力はscanfの戻り値が0になっていて出来ませんでした。 何故0になっているのかわかりません。 入力バッファに何か残ってしまっているということなのでしょうか? 以上教えていただけると嬉しいです。