C言語でのコンパイルエラー原因を教えてください

このQ&Aのポイント
  • C言語でコンパイルエラーが発生していますが、原因がわかりません。解決方法を教えてください。
  • コンパイルエラーが起きているC言語のコードについて、どこが間違っているのかがわかりません。解説してください。
  • C言語のコンパイルエラーについて質問です。変数の型の指定や文法の間違いなど、どこが間違っているのかわかりません。
回答を見る
  • ベストアンサー

C言語 どこがコンパイルエラーか解りません。

いつも大変お世話になっております。 標記の件。 どこがエラーなのか解りません。 2時間くらい、にらめっこが続いています。 どこがエラーなのか教えて下さい。 ご回答のほどよろしくお願い申し上げます。 コード #include <stdio.h> int a = 0; void func(void) { int c = 2; printf("func関数では変数aとcが使えます。¥n”); printf("変数aの値は%dです。\n",a); /*printf("変数bの値は%dです。\n",b);*/ printf("変数cの値は%dです。\n",c); } int main(void) { int b = 1; printf("main関数では変数aとbが使えます。\n"); printf("変数aの値は%dです。\n", a); printf("変数bの値は%dです。\n", b); /*printf("変数cの値は%dです。\n", c); */ func(); return 0; } コンパイルエラー printf("func関数では変数aとcが使えます。¥n”); ^ text10.c:9:8: error: missing terminating " character printf("func関数では変数aとcが使えます。¥n”); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ text10.c:10:34: error: expected ')' before ';' token printf("変数aの値は%dです。\n",a); ^ text10.c:10:1: warning: passing argument 1 of 'printf' makes pointer from integer without a cast [-Wint-conversion] printf("変数aの値は%dです。\n",a); ^~~~~~ In file included from text10.c:1:0: c:\mingw\include\stdio.h:454:38: note: expected 'const char *' but argument is of type 'int' _CRTIMP __cdecl __MINGW_NOTHROW int printf (const char *, ...); ^~~~~~ text10.c:13:1: error: expected ';' before '}' token } どうかよろしくお願いいたします。

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

  • ベストアンサー
  • jack-a3
  • ベストアンサー率34% (197/573)
回答No.2

> printf("func関数では変数aとcが使えます。¥n”); 途中から全角で記載されてます。 半角と全角が区別できるようエディタの設定なり表示フォントの設定を見直しましょう。

jump7799
質問者

お礼

ご回答誠にありがとうございます。

その他の回答 (9)

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.10

メモ帳にコピペすれば大きさは違うかと。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.9

>Atomというエディターを使っているのですが、 >全角、半角の区別が全く解りません。 Atomで提示のコードを見ました。 全角/半角の区別はフォントの形を見れば分かります。 「¥」全角の円記号、「\」半角のバックスラッシュは半角の円記号と同じ 「”」は全角のダブルクォーティション、「"」半角のダブルクォーティション ダブルクォーティションはこのサイトで判別が難しいようですがAtomではフォントの形が判別できます。 この程度の判別が出来なければプログラマー失格です。

jump7799
質問者

お礼

ご回答誠にありがとうございます。 そうですね。 ボクだけ間違いに気付きませんね。 ガンバります。 いつもありがとうございます。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.8

>どこがエラーなのか解りません。 次の行が構文エラーです。 printf("func関数では変数aとcが使えます。¥n”); 「¥」と閉じ側の「”」が全角文字のようです。 >コンパイルエラー テキストエディターでソースファイルを編集してコマンドプロンプトでgccを実行したときのエラーですよね? エラーの英文を理解できるようにならないとプログラマーになれません。 Eclipseのエディターを使うとエラーがある行にマークが付きますので編集中に分かります。

jump7799
質問者

お礼

ご回答誠にありがとうございます。 エラーメッセージの英文くらい 理解できるようになります。 Atomというエディターを使っているのですが、 全角、半角の区別が全く解りません。 何かいい方法はないでしょうか?

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.7

これと、 ” これ " 違いがわかりませんか? あと、英単語の意味ぐらい調べてから質問しましょう。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.6

>どこがエラーなのか解りません。 エラーメッセージをちゃんと読んでいますか? エラーがある程度のフラグ的な見方だったりしませんか?

jump7799
質問者

お礼

ご回答誠にありがとうございます。 英語はNOVAにも通っていて自信があった のですけどコンピューター関連、解りませんが おいおい学習していくつもりです。 Atomというエディターを使っているのですが、 全角、半角の区別が全く解りません。 何かいい方法はないでしょうか?

回答No.5

printf("func関数では変数aとcが使えます。¥n”); "¥"と")"の前のダブルクオーテーションが全角ですね。 "¥"と"\"、気付かなかった?

jump7799
質問者

お礼

ご回答誠にありがとうございます。 Atomというエディターを使っているのですが、 全角、半角の区別が全く解りません。 何かいい方法はないでしょうか?

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.4

コンパイラーはアメリカ製です。 昔は日本語BASICなる日本製の言語もあったのですが。 なのでエラーメッセージはすべて英語。 まぁ、何種類かしかないし英単語1つか2つの意味を調べれば内容は読めます。 マニュアルはすべて英語。日本語マニュアルは機械翻訳なので日本語として 読めないものばかりです。 言語習得に英語から逃げることは出来ません。 英語も一緒に覚えてください。単語だけで大丈夫。文法は要りません。

jump7799
質問者

お礼

ご回答誠にありがとうございます。 昔、英語は得意でした。 おいおい、コンパイルエラーは 理解できるようになります。 Atomというエディターを使っているのですが、 全角、半角の区別が全く解りません。 何かいい方法はないでしょうか?

  • Kaneyan-R
  • ベストアンサー率42% (1243/2893)
回答No.3

意図的に全角と半角を切り替える癖をつけないと、今後も同じことを繰り返すようになりますよ。 あと、Web上の解説などは文字化け対策として、意図的に半角文字を全角で書く場合もあります。ちゃんと半角に置き換えないと、まともには動かないので、よく見ることも大切です。

  • agehage
  • ベストアンサー率22% (2546/11329)
回答No.1

>text10.c:9:8: error: missing terminating " character 9行目、"で閉じてない というエラー よく見ると最後のダブルクォートが全角

関連するQ&A

  • グローバル変数について

    ◎1--------------------------------- #include<stdio.h> void func(void); int glb; int main(void) { int a=20; glb=30; printf("main a=%d glb=%d\n",a,glb); func(); return 0; } void func(void) { int b=88; printf("func b=%d glb=%d\n",b,glb); } ------------------------------------- ◎1の実行結果----------------------- main a=20 glb=30 func b=88 glb=30 ------------------------------------- ◎2--------------------------------- #include<stdio.h> void func(void); int glb; int main(void) { int a=20; func(); printf("main a=%d glb=%d\n",a,glb); return 0; } void func(void) { int b=88; int glb=30; printf("func b=%d glb=%d\n",b,glb); } ------------------------------------- ◎2の実行結果----------------------- func b=88 glb=30 main a=20 glb=0 ------------------------------------- 以上2つのプログラムで、◎1は参考書を参考に作成したものです。 ◎1のプログラムで、グローバル変数glbの値をmain( )関数内で設定していたので、次に◎2のようにfunc( )という関数プロトタイプ内で、グローバル変数glbの値を設定し、main( )関数内のprintf文でも表示させようと思ったら、「glb=0」となってしまいました。 なぜこのようになってしまうか、教えてもらえたら嬉しいです。

  • C言語の初歩的な質問

    質問1----------------------------------------- #include<stdio.h> int main() {  int a;  char b[10];  for(int i = 0;i < 2;i++){   scanf("%d",&a);   printf("整数%d\n",a);  }  scanf("%s",b);  printf("文字列%s\n",b); } /* この際に、例えばabと入力すると結果が 整数-858993460 整数-858993460 文字列ab となり整数入力を無視して進められるのはなぜでしょうか? */ 質問2----------------------------------------- #include<stdio.h> void func(int**); int main() {  int *p;  func(&p);  printf("%d",*p); } void func(int **pp) {  int n = 10;  *pp = &n; } /* func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? */ ---------------------------------------------- C言語は一冊の本とネットの入門サイトをかじった程度の理解です。

  • コンパイルエラーについて

    次のようなプログラムをうつと以下のようなコンパイルエラーが表示されます。 main(){ int a[2][3]; struct monster monster[5] = { { 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60, 100}, { 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60, 100}, { 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60, 100}, { 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60, 100}, { 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60, 100}, }; struct monster monster2[5] = { { 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60, 100}, { 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60, 100}, { 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60, 100}, { 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60, 100}, { 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60, 100}, }; inputmonster(a, monster); printf("これからバトルを開始します\n\n"); printf("player1は%sをくりだした。\n", monster[a[0][0]-1].name); printf("player2は%sをくりだした。\n", monster2[a[1][0]-1].name); battle(a, monster, monster2); return 0; } void inputmonster(int x[][3], struct monster monster[]) { int i, s, t, m, n; for(t = 0; t < 2; t++){ s = 0; while (s < 1){ printf("player%dは好きなモンスターを3つ選んでください\n\n", t+1); for (i = 0; i<3; i++){ printf("%d体目を選んでください。\n\n", i+1); for(m = 0; m < 5; m++) printf("%d, %s\n", m+1, monster[m].name); scanf("%d", &x[t][i]); printf("%d体目 : %s\n\n", i+1, monster[x[t][i] - 1].name); } printf("これでよろしいですか?\n"); for(i = 0; i<3; i++) printf("%d体目 : %s ", i+1, monster[x[t][i] - 1].name); printf("1、はい 2、いいえ\n"); scanf("%d", &n); if(n == 1) s = 1; else s = 0; } } } monsterbattle.c: 関数 ‘main’ 内: monsterbattle.c:499:15: 警告: 互換性のないポインタ型から 1 番目の ‘inputmonster’ の引数に渡しています inputmonster(&a, monster); ^ monsterbattle.c:27:6: 備考: expected ‘int * (*)[3]’ but argument is of type ‘int (*)[2][3]’ void inputmonster(int *x[][3], struct monster monster[]) ^ monsterbattle.c:507:9: 警告: 互換性のないポインタ型から 1 番目の ‘battle’ の引数に渡しています battle(a, monster, monster2); ^ monsterbattle.c:232:6: 備考: expected ‘int *’ but argument is of type ‘int (*)[3]’ void battle(int a[2], struct monster monster[], struct monster monster2[]) ^ すいませんが、あまりエラーの詳細がわからず困っています。 どこをどのように変更すべき表示なのでしょうか? よえろしくお願いします。

  • C言語 クロージャマクロの読み方

    #include <stdio.h> #define APPLY(type, closure, arg) (type)(&(closure), arg) #define APPLY_COUNTER(c, a) APPLY (((int (*)(Counter *, int))((c).func)), c, a) // <= #define MAKE_COUNTER(k) {k, counter_function}; typedef struct{ int n; void* func; }Counter; int counter_function (Counter * c, int a){ return c->n += a; } int main (void){ Counter c1 = MAKE_COUNTER (0); Counter c2 = MAKE_COUNTER (5); printf ("%d\n", APPLY_COUNTER (c1, 3)); /* => 3 */ printf ("%d\n", APPLY_COUNTER (c2, 1)); /* => 6 */ printf ("%d\n", APPLY_COUNTER (c1, 2)); /* => 5 */ printf ("%d\n", APPLY_COUNTER (c1, 8)); /* => 13 */ printf ("%d\n", APPLY_COUNTER (c2, 9)); /* => 15 */ } #define APPLY_COUNTER ここの APPLY への値渡しが読み解けません 詳しい方、教えてください

  • C言語の基本的な質問ですが、関数へのポインタの宣言

    関数へのポインタの質問です。 下のように、関数へのポインタを使ったプログラムを書きました。 (関数へのポインタを理解するためのものなので、実用的な意味はありません。(*^_^*) また、このプログラムはコンパイルもリンクも実行も問題なく出来ます。) #include <stdio.h> int add_func(int,int); (*func_p0) (int,int); int main(void) { int (*func_p1) (int,int); int (*func_p2) ( ); int hoge0,hoge1,hoge2; func_p0=add_func; hoge0=func_p0(3,5); printf("0 : 3+5は%d\n",hoge0); func_p1=add_func; hoge1=func_p1(3,5); printf("1 : 3+5は%d\n",hoge1); func_p2=add_func; hoge2=func_p2(3,5); printf("2 : 3+5は%d\n",hoge2); return(0); } int add_func(int x, int y) { return(x+y); } func_p0のように戻り値の型を書かない場合と、func_p1やfunc_p2のように戻り値の型を書くのとでは何が違うのでしょうか。 func_p0は外部変数ですが、自動変数にする(main関数の中で同様に宣言。)とコンパイルエラーになります。 それはなぜですか。 func_p1のように引数の型が書いてあるのと、func_p2のように引数の型が書いていないのでは何が違うのでしょうか。 int (*func_p2) ( );というのは、int (*func_p2) (void);とは違うんですよね?

  • コンパイルエラー

    Borlnd C++ compilerでコンパイルしたのですが、どうしてもエラーがでてしまいます。エラーは、不正な文字’’(0×8140)(関数 main) エラーE2206 文字' ' (0×8140)(関数 main) エラーE2206と二つ同じエラーがあると表示されます。本当に分からないので力を貸したください。お願いします。 /*読み込んだ二つの整数値の大きい方の値を求めて表示(条件演算子)*/ #include <stdio.h> int main(void) { int n1, n2, max; puts("二つの整数を入力してください。");   printf("整数1 : "); scanf("%d", &n1); printf("整数2 : "); scanf("%d", &n2); max = (n1 > n2) ? n1 : n2; printf("大きい方の値は%dです。\n", max); return 0;

  • C言語 プロトタイプ宣言

    分割コンパイルした場合のプロトタイプ宣言について質問です。 以下のプログラムをコンパイルすると警告がでます。 プロトタイプ宣言は関数を利用する側と定義側両方に必要と理解していたのですが・・・ どなたか教えていただけますでしょうか。 windows7 cygwin gccでコンパイル エラーメッセージ $ gcc -o testMain.exe testMain.c testKioku.c testKioku.c:9: 警告: conflicting types for 'func1' testKioku.c:3: 警告: previous declaration of 'func1' was here testKioku.c:17: 警告: conflicting types for 'func2' testKioku.c:4: 警告: previous declaration of 'func2' was here ソース testMain.c #include <stdio.h> void func1(void); void func2(void); int cnt=5; main(){ printf("main=%d\n",cnt); func1(); func2(); } testKioku.c #include <stdio.h> void func1(void); void func2(void); extern int cnt; func1() { cnt++; printf("func1 global cnt=%d\n",cnt); func2(); } func2() { printf("func2 global cnt=%d\n",cnt); }

  • Cのポインタについて(関数への値渡し)

    C言語のポインタに関する質問です。関数に引数を渡す方法として以下の誤ったswap関数でなぜだめなのかいまいち得心できません。わかりやすくかみくだいて説明していただけると有り難いです。 できましたら、トレースともうしますか、変数の値の動きを詳細に段階的にプログラムの流れに沿って追っていって、だからこうなんだよ、みたいな解説がいただけたら有り難いです。わがままいってすみません。 /* 誤ったswap関数の宣言 */ void swap(int x, int y); int main(void) { int num1 = 5; int num2 = 10; printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); printf("変数num1とnum2の値を交換します。¥n", num1); swap(num1, num2); printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); return 0; } /* 誤ったswap関数の定義 */ void swap(int x, int y) { int tmp; tmp = x; x = y; y = tmp; } ---------- /* swap関数の宣言 */ void swap(int *pX, int *pY); int main(void) { int num1 = 5; int num2 = 10; printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); printf("変数num1とnum2の値を交換します。¥n", num1); swap(&num1, &num2); printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); return 0; } /* swap関数の定義 */ void swap(int *pX, int *pY) { int tmp; tmp = *pX; *pX = *pY; *pY = tmp; }

  • C言語のポインタの考え方について

    ポインタについて理解ができていないのでお聞きしたいのですが 値を交換する関数のプログラミングでこの場合ポインタ で以下にしないといけないと思います。 #include<stdio.h> void swap(int *a int *b){ int c; c=*a; *a=*b; *b=c; } main(){ int x,y; x=123; y=456; swap(&x,&y); printf("x = %d, y = %d\n", x, y); } またポインタを使用せず以下のプログラムではなぜダメのでしょうか。 よろしくお願い致します。 #include<stdio.h> void swap(int a int b){ int c; c=a; a=b; b=c; } main(){ int x,y; x=123; y=456; swap(x,y); printf("x = %d, y = %d\n", x, y); }

  • C言語、度々すいません。コンパイルエラーです。

    いつも大変お世話になり誠にありがとうございます。 下記コードがコンパイルエラーになり色々と 変えてみたのですが、どうしてもコンパイルエラー となります。 度々すいません。 ご回答の程宜しくお願い申し上げます。      記 1.コード #include <stdio.h> int main(void) { char ch; printf("アルファベットの最初の文字は何ですか?\n"); ch = getchar(); printf("アルファベットの最初の文字は%cです。\n" ch); return 0; } 2.コンパイルエラー C:\MinGW>gcc test8.c -o test8 test8.c: In function 'main': test8.c:9:51: error: expected ')' before 'ch' printf("アルファベットの最初の文字は%cです。\n" ch); 上記の通りエラーメッセージが出ます。 どうしたらいいでしょうか? ご回答の程宜しくお願い申し上げます。

専門家に質問してみよう