- 締切済み
プログラム
C言語を現在習いたての者ですが #include "stdafx.h" int main() { int i; for(i=0;i<10;++i) printf("%d %d %d\n",i,power(2,i), power(-3,i)); } power(x, n) int x,n; { int i,p; p=1; for(i=1;i<=n; ++i) p=p*x; return(p); } と、xのn乗を求めるpower関数のプログラムのようですが 教科書に記載されていた通り打ち込んでもコンパイルが通りません・・ ちなみに出るのは 'power': 定義されていない識別子です 'main': 関数に戻り値の型が指定されていません。voidを戻り値とみなし 'x' :定義されていない識別子です 'n':定義されていない識別子です '<Unknown>':関数の定義が間違っています 予期せぬEOFが発見されました でエラー5で警告1になります。 どこがダメなのか教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Yanch
- ベストアンサー率50% (114/225)
次の様にプログラムを修正してみました。 ---------------------------------------------------------------------- #include <stdio.h> int power(int, int); int main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2, i), power(-3, i)); return 0; } int power(x, n) int x, n; { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * x; return p; } ---------------------------------------------------------------------- 解説: > printf("%d %d %d\n", i, power(2, i), power(-3, i)); printf()関数を使用する時は対応するヘッダファイルをインクルードして上げる必要があります。 この場合は、#include <stdio.h> が必要です。 > #include "stdafx.h" 今回使用していないようなので、削除しておきました。 >int power(x, n) >int x, n; >{ 自作の関数power()にはプロトタイプ宣言が必要です。 この場合は、int power(int, int); の部分がプロトタイプ宣言になります。 c言語では、関数が最初に呼び出される前に、プロトタイプが宣言されている必要があります。 > printf("%d %d %d\n", i, power(2, i), power(-3, i)); にて、power()が呼び出されているので、それ以前にプロトタイプを宣言しておく事。 > return 0; main()関数の戻り値の型がintと言う事なので、intをreturnしてあります。 main()関数は特にことわりがなければ、正常終了時に0をreturnしましょう。 エラー終了時に、エラーコードをreturnする事も出来ます。 >power(x, n) 戻り値の型が指定されてないのに、intをreturnしているので、 int power(x, n) とintをreturnする様に修正。 エラーについて、 >'power': 定義されていない識別子です power()関数がプロトタイプ宣言される前に呼び出されているので、出ているエラーと思います。 >'main': 関数に戻り値の型が指定されていません。voidを戻り値とみなし >'x' :定義されていない識別子です >'n':定義されていない識別子です こちらのエラーは未確認ですが、stdafx.hの中で何かいたずらをしているため出ているのではないでしょうか。 >int main() となっているので、main()関数の戻り値の型はintです。 >power(x, n) >int x,n; >{ x と n はここで定義されています。 >'<Unknown>':関数の定義が間違っています 何かわからない関数の定義が間違っているみたいですが、拙者宅では確認出来ませんでした。 >予期せぬEOFが発見されました {と}の対応を書き間違えた時とかによく見るエラーです。 拙者宅では、未確認ですが、これはstdafx.hがいたずらをしているんじゃないかな。 C言語の質問の際には環境を書きましょう。 拙者宅で確認した環境は: gcc (GCC) 3.4.2 (mingw-special) Windows 2000 Pro です。 ---------------------------------------------------------------------- おまけ: > power(x, n) > int x,n; > { の構文は、結構古い時代のC言語の仕様です。 最近の仕様で書き直すと、次の様になります。 ---------------------------------------------------------------------- #include <stdio.h> int power(int x, int n); int main() { int i; for(i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2, i), power(-3, i)); return 0; } int power(int x, int n) { int i, p; p = 1; for(i = 1; i <= n; ++i) p = p * x; return p; } ---------------------------------------------------------------------- power()関数と、power()関数のプロトタイプ宣言の部分が違っているのが確認できると思います。
- redfox63
- ベストアンサー率71% (1325/1856)
mainで使う関数のプロトタイプ宣言が無いので powerが定義されていないなどが出ます #include "stdafx.h" の次に int power( int, int ); を記述します power関数の定義部は int power( x, y ) int x, y; { } は旧形式なので 現在のコンパイラはエラーにすることが多いと思います int power( int x, int y ) { int i,p; p=1; for(i=1;i<=n; ++i) p=p*x; return(p); } といった具合にして見ましょう
- postal0x02
- ベストアンサー率42% (24/57)
お使いの環境は VisualC++ だと思います。 プロジェクトを作る際に 「空のプロジェクト」 にチェックマークを入れてください。 お持ちの教科書は破り捨てて結構です。 #include "stdafx.h" ◆この行は不要です ◆stdio.h をインクルードしてください #include <stdio.h> ◆プロトタイプ宣言がありません int power(int x, int n); int main() ◆引数がありません int main(void) { int i; for(i=0;i<10;++i) printf("%d %d %d\n",i,power(2,i), power(-3,i)); ◆リターンがありません return 0; } power(x, n) ◆戻り値がありません、引数に型がありません int power(int x, int n) int x,n; ◆不要です { int i,p; p=1; for(i=1;i<=n; ++i) p=p*x; return(p); } //◆以下が修正版です。 #include <stdio.h> int power(int x, int n); int main() { int i; for(i=0;i<10;++i) { printf("%d %4d %6d\n",i,power(2,i), power(-3,i)); } } int power(int x, int n) { int i,p; p=1; for(i=1; i<=n; i++) { p *= x; } return(p); }
お礼
親切にどうもありがとうございます
- t4t
- ベストアンサー率55% (47/84)
//ずいぶん古い教科書をお使いかもしれませんね。 //これなら動くだろう、と直してみますので比べてみてください。 #include "stdafx.h" int power(int x, int n); int main() { int i; for(i=0;i<10;++i) printf("%d %d %d\n",i,power(2,i), power(-3,i)); return 0; } int power(int x, int n) { int i,p; p=1; for(i=1;i<=n; ++i) p=p*x; return(p); }
お礼
古いから違うのととっかえられました。ありがとうございました
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
その勉強に使っているテキストを直ちに捨ててください。 非常に古い流儀の書き方です。 (ついでに言えば、コンパイラは新しいもののようですね) もしかしたら、C++としてコンパイルされているのかもしれませんが。 いずれにしても、最近のCはこれとは違った書き方になっています。
お礼
なるほど、ありがとうございました
お礼
古いのでとっかかえられました。ありがとうです