• ベストアンサー

C言語での質問です

C言語を始めて、2ヶ月くらいです。コンパイラは、Borlandc++で、エディタは、bcpadに付いていたものを使っています。 「サンプル通り作成したプログラムがコンパイルエラーになり」 一つ一つ確認しても、間違っている箇所が見つかりません。一人で解決できないとき、皆さんはどのようにして解決していますか。

noname#220054
noname#220054

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★エラーメッセージがかなり参考になりますよ。 ・本当に『private_data』が未定義です。正しくは次のようになります。  『struct private_data Adata, Bdata;』となります。もしも、『private_data』だけで  構造体の型を表したい場合は、『typedef』などを使います。  typedef struct private_data{   char blood;   char area[5];   int old, exp, wage;  } private_data; ←これならば『private_data』キーワードで宣言できます。   ・あと『else if(式){ … }』の記述が出来ます。  if ( same == 0 ){   printf("二人は違います\n");  }  else if ( same == 1 ){ ←ここです。   printf("二人は同じです\n");  } ・上記の方法があります。 最後に: ・C言語の質問は『C/C++』カテゴリがありますよ。そこでどうぞ。 ・上記の場所さえ直せば、多分全部のエラーが無くなると思いますよ。 ・以上。おわり。

noname#220054
質問者

お礼

回答ありがとうございます。ご指摘のとおり、typedefを使ったときの変数宣言の仕方や、structを使ったときの変数の宣言の仕方を間違えていました。サンプルのプログラムでは、typedefを使っていなかったため、確認に時間がかかってしまいましたが、どちらの方法でも、無事に実行することができました。いつも適切な回答をしていただき、ありがとうございます。

noname#220054
質問者

補足

回答ありがとうございます。ご指摘のとおり「typedef」 を使った記述だと無事に実行することができました。ただ、「struct private Adata, Bdata;」 で記述するとエラーが出てしまいます。もう一度テキストを確認してみます。また、Borland社のTD-32というデバッガをインストールしたのですが、テキストを読んでも、使い方がよく分かりません。もし使っていましたら、アドバイスをお願いします。

その他の回答 (8)

  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.9

なんか、コンパイルエラーの質問にデバッガの利用を薦めてしまって、すみません。まったく見当違いの答えでしたね。反省してます。 罪滅ぼしに、デバッガを使ってみました。 コンパイルの際に、ソースレベルコンパイルします > bcc32 -v kozinn.c で、デバッグを開始します。 > C:\borland\bcc55\bin\td32 kozinn.exe 青いウィンドウが出てきて、ソースが表示されます。 後は、デバッガの各コマンドなんですが、例えば現在の変数の値を見るなら、Alt + VでメニューのViewを開いてから、Variablesを選択してEnterを押します。 次にAlt + RでメニューのRunを開き、Step over(F8)を選択してEnterを押すと、一行ずつ処理を開始します。 これで、一行ずつの処理の過程と、変数の値を見ることができます。 Variablesの二つに分かれた下段に、same, input, Bdata, Adataがあると思います。VariablesでTABキーを押すと、カーソルが下段に移動しますので、Adataを選択してEnterを押すと、更にAdataの構造体の各変数の値が閲覧できます。 値の代入で、正しい値が代入されているか等を確認する事ができます。 良く使うのは、いくつかの機能だけだと思いますので、詳しい機能や使い方に関しては、検索するなどで調べてみてください。 いくつか探してみました。

参考URL:
http://www.sage-p.com/ml2/gokui02.htm,http://www.cmagazine.jp/beginner/bcc/index.html
noname#220054
質問者

お礼

回答ありがとうございます。C言語に慣れていないために、質問が正確に伝わらなかったにもかかわらず、貴重なアドバイス大変感謝しています。おかげで、これからは、デバッガを使ってのエラー修正もできそうです。(少し時間がかかるかもしれないですが……) また、デバッガのアドバイスも、大変参考になりました。お手数をかけてしまいました。プログラムのエラーについても、丁寧に回答してくれていたことと思っています。ありがとうございました。 私がまた質問しているのを見かけたときは、アドバイスをお願いします。 最後に、typedefを使ったときと、使わなかったときのどちらでも実行することができました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.8

★原因⇒タイプミスです。 ・回答番号 5 番⇒『struct private Adata, Bdata;』 ・回答番号 6 番⇒『stfct private_data Adata, Bdata;』 ・正しくは『struct private_data Adata, Bdata;』でしょう。 ・違いを見つけて下さい。→打ち間違いだと思います。 ・以上。

回答No.7

C言語から離れて長くなるのでうろ覚えで申し訳ないのですが... 確か、CとC++とでは、struct の定義が異なっていたように思います。 C言語でstructを型として使う場合には、他の方が回答なさっているようにtypedef を使う必要があります。 C++の場合にはstructは初めからclassの一種として言語仕様に組み込まれているので、サンプル通りでかまわないはずです。 したがってtypedefを使わないとうまくいかないということはコンパイラのオプション設定か何かでC言語としてコンパイルしているからではないでしょうか。そのへんのところをお確かめください。

noname#220054
質問者

お礼

回答ありがとうございます。今回は、structを使ったときの変数の宣言が、サンプルプログラムで間違っていたようです、定義の仕方をかえてみたら無事解決することができました。 コンパイラの設定も見直してみます。

  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.6

#4です 問題の回答は別の方が答えて下さっているので...。 今回のコンパイルエラーは、先頭の「未定義のシンボル private_data(関数 main )」というエラー以外は、このエラーによる副作用でしかありません。 宣言方法に間違えがないか。 タイプミスなどによる間違えはないか。 以前の行のエラーの副作用を受けていないか。 などを確認してみるといいでしょう。 エラーメッセージをそのままネット検索しても、結構良い情報を得られますよ。

noname#220054
質問者

補足

回答ありがとうございます。今回は何とか、解決しそうです。まだ、記述の方法で、「stfct private_data Adata, Bdata;」としたときにはエラーが出てしまいますが、もう一度テキストを調べてみます。 また、デバッグする力を付けたいと思い、前回アドバイスいただいた「Borland TD32」をインストールテストをしてみたのですがTD32.exe とTD32inst.exe があリ、使い方がよく分かりません。もし、お使いでしたらアドバイスをお願いします。

  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.4

一応、職業プログラマーです。 よくある事ですが、サンプル自体がコンパイルの通らない物なのでは? ちなみに、コンパイラはどんなエラーを発するのでしょうか? サンプルとエラーメッセージがあれば、今回は解決できると思いますが...。 ただ、質問は、どうやってエラー行とエラー箇所を見付けるかですよね。 基本的にはデバッガを使うのが一番早いと思います。 ある程度の規模の物を作るなら、どうしてもデバッガの使い方は覚えた方がいいですよ。

参考URL:
http://www.borland.com/jp/products/cbuilder/turbodebugger.html
noname#220054
質問者

補足

回答ありがとうございます。ご指摘のデバッガをインストールしてみます。今回どうしても解決できない問題文を載せますので、お力を貸してください。 /*個人データ照合プログラム *A君とB君のデータで、次のことが分かっている、それぞれの項目を選択し *入力すると、2人のデータが同じか、異なっているかを判定し、結果を表示する*/ /*血液型 A君 A   B君  B *出身地 長野  長野  *年齢 21  22  *経験 15ケ月  12ケ月  *自給 800円 800円*/ #include <stdio.h> #include <string.h> struct private_data { char blood; char area[5]; int old, exp, wage; }; int main() { 25 private_data Adata, Bdata; (数字は行番号です。) 26 int input; 27 int same; /*A君の規定データの入力*/ 31 Adata.blood = 'A'; strcpy(Adata.area,"長野"); Adata.old = 21; Adata.exp = 15; Adata.wage = 800; /*B君の規定データの代入*/ 39 Bdata.blood = 'B'; strcpy(Bdata.area,"長野"); Bdata.old = 22; Bdata.exp = 12; Bdata.wage = 800; /*質問の表示と選択結果の入力*/ printf("何で比較しますか?\n"); printf("1 : 血液型 2 : 出身地 3 : 年齢 4 : アルバイト経験 5 : 自給\n"); scanf("%d", &input); same = 0; /*判定と結果*/ switch(input) { case 1 : if(Adata.blood == Bdata.blood) same = 1; break; case 2 : if(strcmp(Adata.area, Bdata.area) == 0) same = 1; break; case 3 : if(Adata.old == Bdata.old) same = 1; break; case 4 : if(Adata.exp == Bdata.exp) same = 1; break; case 5 : if(Adata.wage == Bdata.wage) same = 1; break; default:printf("そんな項目番号はありません\n"); same = 2; } if(same == 0) { printf("二人は違います\n"); }else { if(same == 1) { printf("二人は同じです\n"); } } return(0); }■ D:\borland\bcc55\lesson> bcc32 kozinn.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland kozinn.c: エラー E2451 kozinn.c 25: 未定義のシンボル private_data(関数 main ) エラー E2379 kozinn.c 25: ステートメントにセミコロン(;)がない(関数 main ) エラー E2140 kozinn.c 26: ここでは宣言はできない(関数 main ) エラー E2140 kozinn.c 27: ここでは宣言はできない(関数 main ) エラー E2451 kozinn.c 31: 未定義のシンボル Adata(関数 main ) エラー E2451 kozinn.c 39: 未定義のシンボル Bdata(関数 main ) *** 6 errors in Compile *** このような問題文です。アドバイスをお願いします。

  • LAZZY-2k
  • ベストアンサー率37% (20/54)
回答No.3

C言語の場合、他の方々が仰っているような書き間違い等によるもの、 もしくは開発環境やOSによりエラーが発生します。 Borland C++コンパイラ(Borland社の無料配布版)の場合、付属している標準のヘッダファイルが最新のC言語の基準より古いものがあったと思います。 確かBorlandC++コンパイラでは、bool型とかはできなかったと思います。 その場合は、最新の基準を満たした標準のヘッダファイルをネット上から探してインストールとかすれば解決するはずです。 C言語は同じプログラムでもOSによって違う動きをすることがあります。 これは32ビットOS、64ビットOS等の相違によって起きるものです。 以下のような処理があったとします。   if( iNumber == 1 )   {     printf("Number One!\n");   } これはiNumberが1のとき、「Number One!」と表示する処理です。 32ビットOSでは「iNumberがint型の1だったとき『Number One!』と表示」しますが、 64ビットOSでは「iNumberがlong型の1だったとき『Number One!』と表示」といった感じだったと思います。(うろ覚えなので、あまり自信はありません) どうしてもC言語のことで分からないときは、C言語の質問掲示板を頼るのも良いと思います。 「C言語 掲示板」の2つのキーワードで検索すれば、見つかると思います。 参考までに、C言語掲示板のURLを載せておきます。

参考URL:
http://www9.plala.or.jp/sgwr-t/c_sub/bbstop.html
noname#220054
質問者

お礼

貴重な回答ありがとうございます、参考になりました。 今回は、構造体の定義での、変数の宣言の仕方が間違っていました。 無事解決しました。

noname#220054
質問者

補足

回答ありがとうございます。C言語の掲示板があるんですね、いろいろ調べて利用してみます。また、ヘッダファイルなども、インストールできるとは知りませんでした。

  • m0r1_2006
  • ベストアンサー率36% (169/464)
回答No.2

エラーの行番号より,だいぶ上に間違いがある場合も多いです. セミコロン忘れていたり,} が抜けてたりとか. 全角スペース入りとかもあります.

noname#220054
質問者

お礼

回答ありがとうございます。ご指摘のとおり、初めの変数の宣言部にエラーがありました。無事解決しました。

noname#220054
質問者

補足

回答ありがとうございます。一応全部確認したのですが、サンプルと同じでした。

  • mtfoggy
  • ベストアンサー率14% (37/255)
回答No.1

>間違っている箇所が見つかりません。 エラーメッセージと、その行番号で、見つけてます。

noname#220054
質問者

お礼

回答ありがとうございます。無事に解決することができました。

noname#220054
質問者

補足

回答ありがとうございます。行番号は、分かるのですが、エラーメッセージの内容を確認する方法がよく分かりません。 参考にするようなものがありましたら教えてください。

関連するQ&A

  • CとC++って何が違うのでしょうか?

    こんにちは。今までjavaでプログラミングしていたのですが、C言語を使わなくてはいけなくなりました。 そこで本屋さんに行って「初めてのCプログラミング」というのを買いました。それに付いてた「BorlandC++Compiler」というコンパイラをインストールして、プログラムを作成して実行しました。 昔、大学の授業ではコンパイルするとき「cc」、実行するときは「a.out」とした記憶があるのですが、これでは、「bcc」です。 もしかして、この本は、C言語ではなく、C++というCとは異なる高水準言語なのですか? C言語とC++とは全く異なるものなら、このまま、新しい本を買わないとどのような支障がでてくるでしょうか?

  • C言語でのコンパイラの作成方法

    C言語初心者のため、稚拙な文章になる可能性があることを最初にお詫びします。 現在Microsoft社のMicrosoft Visual C++ 6.0を用いてCドライブのルートにある「temp.c」というソースファイルをコンパイルするアプリケーションを作ろうと思っているのですが、ネット上で「C言語 コンパイラ 作成」等と検索しても、既にコンパイラがあることを前提としたホームページしか見つけることができず、肝心のコンパイラをどのように作ったらよいのかということが載ったホームページが見つかりません。 というわけで、今回はコンパイラをどのように作ったらよいのかというヒントだけでもいいので教えて頂けないかと思い投稿させて頂きました。 ちなみに「temp.c」はそこまで複雑なソースではなく、DOS上のアプリで、リソースやアイコンなどは用いないものです。 そもそも「コンパイラを作る」ということ自体が愚かな行為なのかと思ったりもします。 私が所持しているBcpadやMicrosoft Visual C++ 6.0に付属している既存のコンパイラを利用するということも考えたのですが、BcpadやMicrosoft Visual C++ 6.0の本体以外からコンパイラをどのように利用していいのかもわかりません。 どうぞ忌憚の無い意見をよろしくお願いします。 ちなみにOSはXPのSP3です。

  • 【C#】 C用のエディタを作りたい

    C#でC言語を記述するエディタを作成しています。 コンパイラはLSI C-86 Ver.3.30 試食版を使おうとしているのですが、 プログラムからコンパイルするやり方が知りたいです。 Textbox.textをコンパイルするとしたときのコードをご存じの方がいらっしゃいましたらどうか教えてください。 ヒント、説明しているURLなどでもかまいません。 よろしくお願いします。

  • FedraCore4でのC言語

    簡単なCのプログラムをテストしようとしたのですが、コンパイラが見つかりません。 パッケージを全部インストールしていない状況でC言語のプログラムををコンパイルするにはどうすればよいのでしょうか?

  • C言語超初心者です。

    C言語を始めたばかりで、レベルの低い内容で申し訳ないですが、よろしくお願いします。 コンパイルした文字や文字列などを、コマンドプロンプト上ではなく、画面全体をクリアにして、コンパイルした文字や文字列のみを表示するには、どのようにしたらよいでしょうか? できれば表示する位置を指定する方法も、教えていただきたいです。 使用しているのは、Tera Pad、BorlandC++5.5コンパイラーです。 よろしくお願いします。

  • C言語とC++言語

    C言語でコンパイルできC++でコンパイルできないプログラムとその逆でC++でコンパイルできC言語でコンパイルできないプログラムを教えてください。よろしく

  • プログラム全般について

    お世話になります。素人です。 プログラム、BASIC、C、VB、PERL、HTMLなど 作成するときの根本なのですが、作成するときはエディタ?なるものを 使うようなことを耳にしますが、コンパイルする、走らせるための モノと考えればよいのでしょうか? いきなり、簡単でも難しくても、wordやテキストエディタなどで 言語を作成しても動作確認、プログラムを走らせることは出来ま せんよね? そのために専用の各言語用のエディタ?コンパイラ?なるものが 必要になると考えればよいのでしょうか? いきなりC言語でプログラムを作れ、などなど根本的に何から? がよくわかりません。 その辺りをよくご存知の方、差し支えなければご回答をお願いします。

  • C言語を始めるために必要なもの

    本当にC言語のこと何も分からない状態です。まず、エディタっていうのとコンパイラっていうのが両方必要なんですか?検索したら、いっぱい出てきて、どうやって使うのかもかかれてなかったりして、一体どうすればいいのかよく分かりません。初心者でも分かりやすいエディタとコンパイラが使い方も含めて載っててダウンロードできるサイトとか教えて下さい。そもそもエディタとコンパイラは違うのかもよく分かりません。もし片方だけでもC言語が十分活用できるのであれば、そっちの方だけでもいいので、お願いします。

  • C言語の勉強にあたって

    今からC言語を勉強していく人から質問されたのですが、勉強にあたって、Cのアプリケーション(コンパイラ等)なしに実際のプログラムの動きを勉強する方法はないでしょうか? これでは漠然とした書き方ですが、例えば、インターネットのHP上でプログラミング→コンパイル→実行をシミュレーションできるようなHPはないでしょうか? こういうHPがあると、とりあえずインターネット環境とC言語の参考書があれば簡単に勉強できると思うんです。 そのようなHP、ありましたら教えてください。 何ヶ所かあるようでしたら、使い方が難しくない(初心者向け)ところが良いです。 よろしくお願いします。

  • 解きながら覚えるC言語 の次の教材

    こんにちは。 文系出身の社会人1年目の組み込み系システム開発のプログラマです。(来年度社会人2年目) 新人研修をパスし、四月頭からお客様先にてLinuxのファイル管理等を行ってきました。 今、未稼働になり言語の未修得に不安を覚えた為、 BorlandC++を使用し、 柴田望洋著の"解きながら覚えるC言語"を独学でやっています。 そろそろ上記の教材をマスターするので、ステップアップできる教材を 探しているのですが・・・何か良い教材はないでしょうか。 本来ならば、柴田望洋著の"新版 明解C言語 中級編 明解C言語シリーズ "に移行すべきでしょうが・・ 懸念点がありまして足踏み状態です。懸念点を記載します。 (下記の懸念点は、あくまでも個人的な観点であり、著書を批判しているわけではございません。) <懸念点> "解きながら覚えるC言語" のサンプルプログラムが要所要所でコンパイルエラーになる。 ⇒良書だと思って勉強したけれど ・・・独学の身である私には、 発生したコンパイルエラーに数日間躓きました(涙 "続編である中急編もそんな仕様であれば、購入を検討する" と考えています。 <教材に求めるもの> ・応用力をつけられる本 (例:カレンダー作成 等) ⇒もし今後C言語の案件がきたときに、きちんとC言語でプログラムを組める力がほしい。 基礎をマスターしたばかりの私には、"どんなプログラムを組みたいか" なんて・・・案が思い浮かばない。 ・掲載されているサンプルプログラムにコンパイルを通るものを使用し ている本 本当に困っている状況ですので、批判・中傷はご容赦願います。 以上 先輩方のご教授の程 宜しくお願いいたします。