プログラミングで円を描く方法を教えてください。 【本題】 使用するのはC言語で、構造体や関数を使用しています。(ここでは構造体の変数名は省く)

C言語関連268閲覧

ベストアンサー

1

1人がナイス!しています

その他の回答(2件)

0

~原因~ 幾つか考えられます。 (1)動いていない 止まったように見えても実は動いていないということがあります。たとえばプログラムの冒頭に printf("これから計算を始めます。\n"); などと書いておくと、実際のところ動いたのか動いていないのか占うことが出来ます。 (2)正常終了 止まったというよりも終わったということも考えられます。 プログラムは確かに始まって、そして終わった。それだけの可能性もありますのでやはり printf で何かを出力するなどして確認してみてください。 (3)異常終了 異常事態が発生してそれで途中で停止している可能性があります。(これが本当の「途中で止まる」です。) デバッガから起動した場合、異常事態を検知した時点で(つまり途中で)一時停止状態となります。そしてこの場合は、その停止箇所から問題の箇所が分かる場合があります。(すぐには分からない場合もあります。) 異常事態に陥った場合はその旨の表示がどこかにある筈ですので、まずはその内容を確かめましょう。 (4)無限ループ 実は止まっていなくて処理が無限に続けられているということがあります。 たとえばfor 文内の条件がずっと成立する形になると終わりません。これも printf を仕込むなどして、実際のところそういう状況となっているのかどうか確かめると良いと思います。 《参考意見》 Visual Studio のような開発環境をお使いの場合はステップ動作を行うことをお勧めします。そうすると驚くほど簡単に問題箇所が分かってしまいます。 つまり、プログラムを一気に動作させるのではなく少しずつ止めながら動作させて、変数の内容を確認し、また、条件分岐や繰り返しの状況を確認するというわけです。 ただし、問題点があります。 それは開発環境の使い方が難しいこと。Visual Studio の操作方法は C 言語の勉強(の初歩段階)よりもずっと難しいかもしれません。 それでも効果は高いです。また、それが本来の開発方法です。一気に動作させて動いた・動かなかったという形態では開発はなかなか進んで行きません。仕事として成立しなくなってしまいます。ですので、本来のやり方、本当のやり方で問題点を探るというのが正しい取り組み方であると考えます。(開発環境を使っていない、使い方が難し過ぎて手が出せない、という状況の場合は大変失礼しました。そういう場合は勉強がもっと進んでから取り組むのも良いと思います。)

0

「エラーが起こらずコンパイルはできる」というのは、それがプログラム言語の文法に則っているというだけのこと。逆に言えばエラーがでるようなのはプログラムとして成立していないナニカでしかないというだけのこと。もし、エラーが起こらずコンパイルできれば期待通りに動くはず、というなら、Cならint main(void){} が最強の、なんでもできるプログラムになるはずですがそんなことないのは言うまでもないですね。 そして、Cは「安全装置」を大幅に省略している言語です。ポインタや配列では、ちょっと扱いを間違えると容易に「アクセスしてはいけない領域」へのアクセスを行ってしまいます。メモリー保護などの仕組みがあるシステム(つまり普通のWindowsPCやMacOS,Linuxなど)であれば、そういうアクセスでプログラムが強制停止の憂き目を見ることになるかも知れません。起こっているのはそういうことだと想像します。 ということで考えられるネタは無数にあり、提示された範囲ではそれを特定するだけの情報は得られません。問題を解決できていないあなたがどうして「ここでは構造体の変数名は省く」とそれを原因から除外できているのか、若干の疑問を持たざるを得ませんが、それはともかく。 原因は提示された範囲内にある、ということであれば(なんかアレだな、「犯人はこの中にいる」みたい)、iやjは配列に対して適切な範囲に収まっているか、というのが調査可能でしょう。