• ベストアンサー

C言語のエラーが無くなりません

はじめまして。 現在C言語でプログラムを組んでいるのですが、不明な点がありますので質問させて頂きます。 while文とかif文を使って、プログラムを書き終える時に当然いくつかの「}」を使って締めます。そのとき、「}」が自動でだんだん左寄せになってくのですが、自動で左寄せにならない場合、原因は何でしょうか。 以上です。何卒ご教授の方よろしくお願いいたします。

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

  • ベストアンサー
  • 246riser
  • ベストアンサー率50% (2/4)
回答No.7

一つエラーの原因を見つけました。 if(isalpha(x[0]) != 0) || (isalpha(x[1]) != 0) これは if((isalpha(x[0]) != 0) || (isalpha(x[1]) != 0)) でないといけませんね。(括弧が外にもう一つ必要) 括弧が足りないため、コンパイラはこのif文を 「if(isalpha(x[0]) != 0)」 までは理解できても、その後に続くはずの処理が見当たらず、いきなり「||」が現れるので、「if(isalpha(x[0]) != 0)」を完成させなさいという意味で「";"が"||"の前にない」(";"をつけてif文を完成させなさい)と表示されているわけです。基本的に";"がないと文として完成しません。 これが最初のエラーならば、これを直すことによってそのあとのエラーも消えるかもしれませんね。 デバッグのコツとしては、スコープ("{"と"}"で囲われている範囲)毎にコメントアウトしてコンパイルしてみる、なんていうのは良いかもしれません。問題のif文のスコープをコメントアウトするとエラーは出ないかもしれません。 あと、括弧が多くて混乱するような場合は、"("と")"も"{"同様に自分でインデントして改行してみることです。 (例) if ( →→( →→→→isalpha(x[0]) != 0 →→) || →→( →→→→isalpha(x[1]) != 0 →→) ) 面倒かもしれませんが、数があっていることが確認できます。確認後は戻した方が良いでしょう。

noname#142623
質問者

お礼

ありがとうございました。 何とか解決できました。

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

その他の回答 (6)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

そのエラーが起きるソースの 70行目から120行目ぐらいまでを投稿してみてはいかがでしょう エラー内容だけはどのように修正すればいいのか判断できかねます continueやbreakは繰り返し構文の中などで使います 216行目の } についてはどこかで開始の{ を忘れてしまったのが原因のように思います VC++であれば ctrl+] を押すことにより{(または})に対応する場所へカーソルが移動します これで容易に{ }の対応を確認できると思いますよ

noname#142623
質問者

お礼

ありがとうございました。 何とか解決できました。

noname#142623
質問者

補足

ご指摘どおりソースを載せてみたいと思います。 while(1) { printf("顧客登録情報がありません。何件分確保しますか? (1~50)\n"); //初期画面************************************ //入力 gets(x); //数字と文字をint型に変換し、kakunouに格納 kakunou = atoi(x); //入力されたものが"q"または"Q"だったら終了 if(strcmp(x,"q")==0 || strcmp(x,"Q")==0) { exit(1); } if(strlen(x) > 2) { printf("<<入力した文字が長すぎます>>"); getchar(); fflush(stdin); continue; } //入力した数字が50以上、または0だったらエラー if(kakunou > 50 || kakunou == 0) { printf("<<入力範囲にありません>>"); getchar(); fflush(stdin); continue; } //1,2つめに文字が入力されたらエラー(ここにエラーメッセージが出ます) if(isalpha(x[0]) != 0) || (isalpha(x[1]) != 0) { printf("<<文字は入力出来ません>>"); getchar(); fflush(stdin); continue; } //入力されたのがエンターだったらエラー if(x[0] == '0') { printf("<<数値を入力して下さい>>"); getchar(); fflush(stdin); continue; } //1文字目、または2文字目が記号だったらエラー if(isalnum(x[0]) == 0) { printf("<<記号は入力出来ません>>"); getchar(); fflush(stdin); continue; } //メモリ確保 pstr = (struct DATE *) malloc (sizeof(struct DATE) *kakunou); break; } この用に書いております。 「}」が動かないと質問させて頂いておりますが、メモリ確保したソースの下にある「}」は自然に動きます。それよりあと100行ほど下の、int mainに対応する「}」等が動きません。 エラーは70行目あたりに、「";"が"{"の前にありません」や、「制御が空の文が見つかりました、意図した記述でしょうか」、「";"が"||"の前にありません」といったエラーが出ます。 よろしくお願い致します。

すると、全ての回答が全文表示されます。
  • Interest
  • ベストアンサー率31% (207/659)
回答No.5

(76) : error C2143: 構文エラー : ';' が '||' の前に必要です。 (90) : error C2044: 不正な 'continue' です。 (99) : error C2044: 不正な 'continue' です。 (以下略) コンパイラが「ソースコードの76行目に文法的な誤りを見つけた」と教えてくれているのですから、まずは 76行目を見ましょう。ただし、誤りの原因は76行目ではなくてもっと前の行にあるでしょう。 もし可能なら、友人に見てもらいながら1行ずつ説明するとよいでしょう。文法的な誤りだけでなく、設計の意図があいまいなところや、文法的には正しくても間違った動作をする可能性が高い部分などを見つけ出す手助けになりますよ。<これを「レビュー」といいます。

noname#142623
質問者

お礼

ありがとうございました。 何とか解決できました。

すると、全ての回答が全文表示されます。
  • tyome2
  • ベストアンサー率21% (28/132)
回答No.4

こんばんわ。 「{」,「}」の数は一緒ですか? まず、インデントがどこから狂っているのか見極めて見てください。

noname#142623
質問者

お礼

ありがとうございました。 何とか解決できました。

すると、全ての回答が全文表示されます。
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.3

>「}」が自動でだんだん左寄せになってくのですが これは、C言語の機能ではなく、お使いのエディタの機能です。 これが働かないということは、途中の()や""の閉じ忘れなどで、エディタが{と}の対応付けを行えないのでしょう。

noname#142623
質問者

お礼

ありがとうございました。 何とか解決できました。

すると、全ての回答が全文表示されます。
  • 246riser
  • ベストアンサー率50% (2/4)
回答No.2

タイトルは「エラーが無くなりません」ですが、どのようなエラーなのでしょうか?もし、お使いのエディタが自動で "{" と "}" を寄せるようになっているのなら、エラーと関係していると思います。

noname#142623
質問者

お礼

ありがとうございました。 何とか解決できました。

noname#142623
質問者

補足

ご回答ありがとうございます。 エラー内容ですが、以下のようなものです。 (76) : error C2143: 構文エラー : ';' が '||' の前に必要です。 (90) : error C2044: 不正な 'continue' です。 (99) : error C2044: 不正な 'continue' です。 (104) : error C2043: 不正な 'break' です。 (108) : error C2059: 構文エラー : 'while' c(216) : error C2059: 構文エラー : '}'

すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

何をどのように使っていて質問の現象になるのかを明示しましょう どこかのC言語の統合開発環境を使っている場合のエディタの動作であるとか ある会社のエディタでソースを書いている場合とか これらにより 設定方法がまちまちなので ご希望の回答を得ようとするならばその詳細を明記しましょう たとえば Microsoft Visual C++ 6.0とか エディタの桜エディタや秀丸を使っている など できれば そのソフトのバージョンも明記されたほうがいいでしょう バージョンによりメニュー構成に変更があったり 設定場所が変更になっている場合があります

noname#142623
質問者

お礼

ありがとうございました。 何とか解決できました。

noname#142623
質問者

補足

ご回答ありがとうございます。 説明不足で申し訳ありません。 Microsoft Visual C++ 6.0 を使っています。 エラー内容としては、上の方のところに記載させて頂きました。

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

関連するQ&A