• 締切済み

C言語

プログラムをつくっているのですが、エラーをとりのぞけません。ソースをみないと、こたえるのが難しいとおもいますが、よろしくお願いします。 main関数ならびに、void型の関数のすべてのところで次のエラーがでます。「構文エラ-: ';' または ',' が欠落している可能性があります。」 なんですが、なんどみなおしても、これをつけるところがありません。 関数全部にでているので、共通のエラーなのですが、わかりません。 よろしくお願いします。

  • 4422
  • お礼率22% (22/98)

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.8

#7に加えて、 void runge0(void) のように引数としてvoidを明示的に書く必要があります。 main(){ の場合は、値を返す必要があります。 値を返さない場合 void main(){ にする

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.7

fおよびde関数が閉じていません。また、ファイルの最後の}が余分です。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.6

> ソースをみないと、こたえるのが難しいとおもいますが、よろしくお願いします。 なかなか、ソースが補足されませんが... > プログラムをつくっているのですが、エラーをとりのぞけません。 とりあえずエラーを取り除きたいだけであれば、現時点でアドバイスできる確実な方法としては、エラーの発生したソースファイルに書かれたすべての文字を削除することだけです。

4422
質問者

補足

#include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> #define X_min 0 #define X0 20 #define NMAX 30 int ix,icount,imax,node,stop; double a,h,e,e1,sq; double x,y,z,y2,x1, xmax; double u[3001],en[NMAX+1]; double V(double x){ return x; } double f(double z){ return z; double g(double x,double y){ return (x-e)*y; } double de(double ee){ return((2-u[imax-1]-u[imax+1])/h/h+(V(xmax)-ee))/sq; void runge0(){ double k1,k2,k3,k4,l1,l2,l3,l4; k1=f(z)*h; l1=g(x,y)*h; k2=f(z+k1/2.)*h; l2=g(x+h/2.,y+k1/2.)*h; k3=f(z+k2/2.)*h; l3=g(x+h/2.,y+k2/2.)*h; k4=f(z+l3)*h; l4=g(x+h,y+k3)*h; x+=h; y+=(k1+2.*(k2+k3)+k4)/6.; z+=(l1+2.*(l2+l3)+l4)/6.; } void runge1() { do{ u[icount]=y; y2=y; runge0 (); icount--; }while(y>y2); imax=icount+1; xmax=x-h; } void runge2() { int i; for(i=X_min;i<=stop;i++){ u[i]=y; runge0(); } } void normalize() { int i; sq=0; for(i=0;i<=3000;i++){ sq+=u[i]*u[i]; } sq=sqrt(sq); for(i=0;i<=3000;i++){ u[i]=u[i]/sq; } a=0.; for(i=0;i<=3000;i++){ x=i*0.01; a+=exp(-0.1*(x-X0)*(x-X0))*u[i]; } } main(){ double yp1,ym1; int i; char filename[9]; FILE *fp1,*fp2; e=2.3; fp1=fopen("e_levels.dat","w"); for(node=0; node<=NMAX;node++){ h=.01; x=x1=e+3; ix=floor(x/h); e1=e; do{ e=e1+.5; e1=e; do{ icount=ix; x=x1; h=-.01; y=.00001; z=-.0005; runge1(); yp1=u[imax]; sq=0; for(i=imax;i<ix;i++){ u[i]=u[i]/yp1; sq+=u[i]*u[i]; } stop=imax; h=.01; x=0; y=0; z=.1; runge2(); ym1=u[imax]; for(i=1;i<=imax;i++){ u[i]=u[i]/ym1; sq+=u[i]*u[i]; } x=0; e+=de(e); }while(fabs(de(e))>.0001); if(node==0) break; }while(fabs(en[node-1]-e)<0.1); en[node]=e; normalize(); sprintf(filename,"%3d.dat",node+100); filename[0]='u'; fp2=fopen(filename,"w"); for(i=0;i<=3000;i+=10){ fprintf(fp2,"%i %5.8f\n",i/10,u[i]); } fclose(fp2); fprintf(fp1,"%2i %5.8f %5.8f\n",node,en[node],a); } fclose(fp1); } }

  • Qwerty-36
  • ベストアンサー率25% (58/226)
回答No.5

あ、あと、「}」を忘れている場合も、同様のエラーが大量に出ますね。 #「技術者向け」って、いつから「技術者がシロウトの質問に答える」になったんだろうネ(^.-)。

4422
質問者

補足

これって技術者専用なの? あと、俺はただの学生です。

  • Qwerty-36
  • ベストアンサー率25% (58/226)
回答No.4

技術者とは思えない質問ですが、回答します。 最悪の手ですが、エラーの出ている最初の行の上下3行に「;」を付けてください。そして、エラーが出なくなった、もしくはエラーの変わった内容を再度確認してください。 #どうせ、#や、"、;とかを忘れているだけだと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

ソースを補足してください

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

最低限、エラーの発生している箇所だけでも、ソースを見ないとどうしようもありません。

  • nnfuji
  • ベストアンサー率28% (200/701)
回答No.1

includeされているヘッダファイルも見る必要があります。 特に見る部分は、標準ヘッダファイルではなくユーザーヘッダファイルです。

関連するQ&A

  • c言語

    (c++ではなくC89準拠) c言語について質問 (1) 関数名()と関数名(void)は違う意味 (2) mainの引数の型は(void)か(int argc, char *argv[]) (3) K&Rは標準c準拠でmain()という表記があります ということは、(1)の関数名とはmain以外の関数名で、 main()とmain(void)は同じなんでしょうか。

  • C言語について質問です

    新版 明解C言語 入門編 この本でC言語を勉強しています。 授業とかではなく自主的にやっています。 入力した文字を出力するプログラムを添字演算子なしで作る問題(演習11-1)を解いてみました。 void put_string(const char *s) { while(*s) putchar(*s++); } int main (void) { char s1[128]; printf("type something: "); scanf("%s", s1); put_string(s1); return(0); } これについて二つの疑問があります。 (1)constと指定されているのにインクリメントされていたら値が変わってエラーが出ないのはなぜか (2)main関数でないほうの関数で*を全て外すと 「パラメータ 's' は const signed char 型として定義されているので signed char * は渡せない(関数 main )」といったエラーが出るのですがなぜか

  • C言語についてです。

    プログラムを実行しようとすると、 main.obj : error LNK2001: 外部シンボル ""void __cdecl DrawGameOver(void)" (?DrawGameOver@@YAXXZ)" は未解決です。 fatal error LNK1120: 外部参照 1 が未解決です。 とでてしまいます。 どうすれば解決するのでしょうか? 初心者なのでなるべく分かりやすくお願いします。

  • C言語 main関数とsum関数の記述順について

    はじめまして。 【苦しんで覚えるC言語】(Web版)でC言語を学んでいる初学者です。 【第1部:C言語基礎編】>【関数の作り方】>【自作関数を作る】の部分(http://9cguide.appspot.com/11-01.html#S2)でつまづいています。 下記のような、1から100までの数字の合計を表示するプログラムが例題として取り上げられています。 しかし、ここが理解できないので、次の【プロトタイプ宣言】に進めずにいます。 例題1  sum関数をmain関数の後に記述した場合(プログラムが実行されない)。 #include <stdio.h> int main(void) { return 0; } int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } 例題2  sum関数をmain関数の先に記述した場合(プログラムが実行される)。 #include <stdio.h> int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } int main(void) { return 0; } 例題1の場合、【まずmain関数を作り、次にsum関数を作りました。この場合、main関数を解析している段階では、sum関数は発見されておらず、従って、main関数の中では、sum関数を使うことは出来なくなってしまいます。】との説明がありますが理解できません。 コンパイラがどのような順番でプログラムを処理しているか理解できていないので分からないのだと思います。 例題1の場合と例題2の場合の両方について、コンパイラがどのような順番でプログラムを処理しているのかを具体的に教えてください。 どうかよろしくお願い致します。

  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

  • c言語 配列

    関数の中で複数の値を配列で返したいのですが,どうすればいいでしょう? 配列を関数に渡す時にはアドレスが渡されるので,ポインタと同様関数内で値を変えればmain関数の値も変わるのではないかと思ったのですが,上手くいきません. 知りたいのは,main関数の中の配列(できれば2次元配列)の値を他の関数から値を変更する方法です.下のプログラムはためしに書いてみたものです.質問を理解するうえで役立てば幸いです. #include<stdio.h> void func(double aaa[][3] ,double bbb[]); void main(void){ double array_a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; double array_b[3]={0}; func(array_a,array_b); } void func(double aaa[][3] ,double bbb[]) { int i,j; for (i=0;i<3;i++) { for (j=0;j<3;j++) { bbb[i]=bbb[i]+aaa[i][j]; } } }

  • C言語について。

    C言語プログラマとしては、スタートアップコードは・・・ ・自分が書いたプログラムを、直接動かすために必要なライブラリ ・それはコンパイル後、リンカによって追加されるライブラリこれは、 どういう意味でしょうか?分かりやすく教えていただけると幸いです。すみません。で、 以下のかぶくんまんさんの回答です。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11247611941 で、 C言語におけるプログラミングとは「main関数を書くこと」に他ならない。なぜ「main関数を書く」ことがC言語におけるプログラミングに他ならないのかと言えば、それは偏に「C言語のコンパイラはmain関数を呼び出すプログラムを生成するから」です。それがmain関数を求めるので結果的にmain関数がリンクされ、そしてmain関数が求めるままに他の関数もリンクされていくわけです。 で、その「main関数を呼び出すプログラム」こそが、C言語における「スタートアップコード」。 という回答で、main関数以降は、プログラマが書くのですよね?プログラマが関数をリンクさせる様なプログラムを書くということでしょうか?教えていただけると幸いです。すみません。 という所が分かりません。教えていただけると幸いです。すみません。以下のURL https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12247932542

  • c言語の問題

    以下のプログラムをコンパイルし、実行したところ、次のような画面が表示された。下記の関数定義部分を補いなさい。 gcc test.c ./a.out abc def answer = defabc 以下ソースコード #include<stdio.h> void stradd(char A[], char B[]); int main(){ char str1[100], str2[100]; scanf("%s", str1); scanf("%s", str2); stradd(str1, str2); printf("answer = %s\n", str2); } void stradd(char A[], char B[]){ } よろしくお願いします。

  • C言語で分からないことがあります。

    私は初心者で、ある参考書で下記の例が載っていたのですが、このプログラムで分からないことがあります。 #include<stdio.h> void nchar(int ch,int no) { while(no-->0) putchar(ch); } int main(void) { int i,ln; printf("何段ですか:");scanf("%d",&ln); for(i=1;i<=ln;i++){ nchar(' ',ln-i); nchar('*',i); putchar('\n'); } return 0; } まず、 ・nchar関数のnoは何を表しているのか? ・nchar関数のputchar(ch)は一体何を表しているのか? 参考書にはこのプログラムについてあまり説明が無くこの2点がよく分かりません。 よろしくお願いします。

  • C言語の質問です。

    下記のコードでコンパイルすると成功しますが、実行時にエラーになります。 #include <stdio.h> int series(void); int main(void) { int i; for(i=0; i<10; i++) printf("%d ", series()); return 0; } /* これは正しくない */ int series(void) { int total; total = (total + 1423) % 1422; return total; } 解説には『ローカル変数の値はその関数が呼び出されている間だけ保持されます。 このプログラムはseries()関数を使ってある数列を作ろうとしていますが、 数列のそれぞれの数値を計算するのに1つ前の数値を使おうとしています。 しかし、変数totalの値はseries()の各関数呼び出しをまたがって保持される ことはないため、意図したとおりには動いてくれません。』とあります。 ローカル変数がその関数が呼び出されている間だけ保持されるのはわかりますが、 そのあとの解説の意味がわかりません。 どなたか詳しく解説していただけないでしょうか?お願いします!!

専門家に質問してみよう