• ベストアンサー

C言語のコンパイルエラーなんですが、どこが悪いのかがわからない。

 作成したソースプログラムを、コンパイルしようとすると次のようなエラーが出ます。 「ファイル名:19:waring: unknow escape sequence: `\' followed by char code 0×89」  確かに、19行めに¥nの改行コードを打ちましたがそれがいけないのかな?しかし、その理由もわからん。  というか、上の考えがあっているのかすら分からない。どうか教えてください。ちなみに、19行目のソースプログラムは 「printf("よし!十円チョコかえるわ。今すぐレッツゴー。\n");」 です。よろしくお願いします。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.6

これはUNIXではありがちなエラーで、原因は文字コード(シフトJIS)にあります。 ここで問題になっているのは「十円」という部分で、これを16進で出力すると「8F 5C 89 7E」となります。 5C は \ の文字コードであるため、これをエスケープ文字として認識し、次に続く 89 を見て「そんなエスケープシーケンスはない」というエラーを出しているのです。 解決方法ですが、5C をエスケープコードではなく \ 自身であるように認識させればよいので、5C の後ろにもう1つ 5C を置いてやればOKです。 つまり、「十円」を「十\円」とします。 ※日本語環境用に作られたコンパイラは、その辺をきちんと処理してくれるのでこのような問題は起きないのですが、そうでないコンパイラでは注意が必要になります。

mattsu555
質問者

お礼

そのとうりです。このソフトは、UNIXを元でWindows上で動かすものなのです。大変助かります。ありがとうございました。

その他の回答 (6)

noname#30727
noname#30727
回答No.7

コンパイラが日本語に対応してない場合によく起きます。 '十' という文字は、SJIS のコードで 0x8F5C なのですが、この2バイト目の 0x5C が '\' と同じコードなので、続く '円' の 0x897E の 0x89 とセットで未定義のエスケープシーケンスだと怒られているわけです。 もしコンパイラに日本語を扱うスイッチがあれば、それを指定するようにして、それが無い場合は、"十\円" などのように対処するしかありません。

mattsu555
質問者

お礼

ありがとうございました。助かります。これからは気をつけます。

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.5

>どこで見ればいいのでしょうか?漢字コードは・・・? エディタは何を使っているのでしょうか?

mattsu555
質問者

補足

Windowsなので、メモ帳です。初心者ですみません・・。

  • fuji1
  • ベストアンサー率29% (109/371)
回答No.4

もう一度きました。 nが半角なら大丈夫ですねぇ。。 ところで、何の本についていたんですか? それで解決するかも知れません。 全角スペースですが、8140 でした。(すいません)

mattsu555
質問者

補足

C言語超入門というほんです。そこについていた、CD-ROMです。 漢字は関係ないのですか??

  • fuji1
  • ベストアンサー率29% (109/371)
回答No.3

こんばんわ。。 #2 の方が言うようにnが全角文字かと思われます。 VC++6 で試したところ、全角文字にすると、 「D:\tmp\CHECKS\CHECKS.cpp(13) : warning C4129: '・ : エスケープ シーケンスとして正しく認識されませんでした。」 というワーニングがでます。 半角nにするとワーニングはでませんでしたよ。 0x89 は全角コードの開始コードですからね。 (全角スペースは0x8940です)

mattsu555
質問者

補足

ですから、半角ですよ。nは・・・・・。 一番の方のように、漢字ではないかと思うのですが、どこで漢字コードが見れ変更できるのかが分からないのです。

  • K-1
  • ベストアンサー率21% (832/3844)
回答No.2

「code 0x89」というのは割り当てられていません。 もしかして\とかnとかが全角文字とかいうことはないですか?

mattsu555
質問者

補足

いえ、ちゃんと書いたとおりですし半角です。 使っているソフトは、Microsoftのではなく、本についているものでやっています。

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

使っているエディタの漢字コードは何になっていますか? JISなどに変更してみてください。

mattsu555
質問者

補足

すみませんが、どこで見ればいいのでしょうか?漢字コードは・・・?

関連するQ&A

  • コンパイルエラー (超初心者です)

    現在C言語の勉強をしているのですがテキスト通りに打ったのですが、どうしてもエラーが出てしまいます。 #include <stdio.h> struct Car{ //構造体型struct Carの宣言 int num; double gas; }; int main() { struct Car car1; //構造体型の変数(構造体)を宣言する car1.num = 1234; //メンバに値を代入する car1.gas = 25.5; printf("車のナンバーは%d :ガソリン量は%fです。\n", car1.num, car1.gas); return 0; } エラーメッセージは 15: warninng: unknown escape sequence: '\' followed by char code 0x83 といった感じです。 ちなみにコンパイラはMingw gccというのを使っています。どなたかご回答のほうをよろしくお願いします。

  • Xcodeでのcのコンパイルエラーについて。

    Xcodeでc言語のコンパイル #include <stdio.h> int main(void) { printf("%d", 15 + 37); return(0); } をコンパイルすると ld: 2 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) となります。 いろいろ検索してみたのですが、こんな簡単なプログラムのエラーはのっていませんでした。 なにが問題なのでしょうか。 あと use -v ってのもどうやって使うのでしょうか。 よろしくおねがいします。

  • C言語、エラーメッセージが紐解けません。

    いつも大変お世話になり誠にありがとうございます。 標記の件。 エラーメッセージが紐解けません。 どうかどなたかアドバイスください。 下記にコードとコンパイルエラーを書きます。        記 コード #include <stdio.h> typedef struct Car{ int num; double gas; }Car; int main(void) { printf("int型のサイズは%dバイトです。\n", sizeof(int)); printf("double型のサイズは%dバイトです。\n", sizeof(double)); printf("構造体struct Car型のサイズは%dバイトです。\n",sizeof(Car)); printf("構造体struct Car型へのポインタのサイズは%dバイトです。\n",sizeof(Car *)); return 0; } コンパイラーエラー C:\MinGW>gcc text20.c -o text20 text20.c: In function 'main': text20.c:12:11: warning: unknown escape sequence: '\221' printf("構造体struct Car型のサイズは%dバイトです。\n",sizeof(Car)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ text20.c:13:11: warning: unknown escape sequence: '\221' printf("構造体struct Car型へのポインタのサイズは%dバイトです。\n",sizeof(Car *)); 以上です。 ご多忙中恐れ入ります。 ご回答の程宜しくお願い申し上げます。

  • C言語コンパイルエラー cygwin

    windows7の64bitでcygwinを使用しております。 過去に作成されたソースファイルをコンパイルしたいのですが、画像のようなエラーが出てしまい、うまくいきません。 おかしなところがあれば、ご指摘いただけないでしょうか。 114行目 sprintf(file_in,"/media/HD/WWE\ data/mm/222/%s%s","",file_name); sprintf(file_in,"%s%s",file_in,".dat"); if((fp = fopen(file_in,"r")) !=0){ printf("%s\n",file_in); sprintf(print_name,"%s",file_in); static unsigned long hex[nn],xx; 198行目 xx=hex[i]*(-1)+4294967295;

  • cygwinのgccで正常にコンパイルできない。

    cygwinのgccで正常にコンパイルできない。 cygwinのvimで、以下のプログラムを書きました。 ------------------------------------------------------------- #include <stdio.h> int main(void) { int no; printf("Please input something:"); scanf("%d", &no); printf("It is %d that you input it:\n", no); return (0); } ------------------------------------------------------------- それからgccでコンパイルしました。 コマンドは以下の通りです。 $ gcc test.c すると以下のエラーが出ました。 test.c:10:9: warning: unknown escape sequence: '\033' このようにコンパイルできない状態です。 どのようにすると正常にコンパイルできるようになるでしょうか?

  • 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言語のプログラムについてです

    5人の名前と身長を入力し、1番高い人の名前と身長を表示せよというものです。 下記のソースプログラムをコンパイルすると warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[10]’ と表示されます。どこを修正すればよいのでしょうか? またこのプログラムにはchar関数を使っていますが、char関数というのも良く分かりません その解説も付け加えていただけると幸いです#include <stdio.h> #include <string.h> int main(void) { int i,sincho,max_sincho; char max_namae[10],namae[10]; max_sincho=0; for(i=1;i<=5;i++){ printf("名前: "); scanf("%s", &namae); printf("身長: "); scanf("%d", &sincho); if(sincho>max_sincho){ max_sincho=sincho; strcpy(max_namae,namae); } } printf("身長が一番高い人は%sさんで%d cmです。\n", max_namae,max_sincho); return 0; }

  • なぜかビープ音が鳴ります(C言語)

    下記のプログラムはCHAR_SETの値に応じてASCII文字セットと拡張文字セットのどちらかを表示するようにコンパイルするものです。 #include <stdio.h> /* CHAR_SETを256または128のいずれかの値に定義する */ #define CHAR_SET 256 int main(void) { int i; #if CHAR_SET == 256 printf("すべてのASCII文字セットと拡張子を表示する\n"); #else printf("ASCII文字セットのみを表示する\n"); #endif for(i=0; i<CHAR_SET; i++) printf("%c", i); return 0; } 【質問】 このプログラムを実行するとビープ音が鳴るのですが、それはなぜでしょうか? いろいろ試して分かっていることは、CHAR_SETを512にすると2回鳴ることです。 ちなみに、「VisualC++.net Standard Version 2003」でコンパイルしました。 この問題に知識のある方、回答をお願い致します。

  • コンパイルエラー

    こんにちは。 本を見ながらソースコードを打って、コンパイルをすると、 「'sample8' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示されます。 コンパイルソフトは、 bcc1です。 問題のソースコードはこれです。↓ #include <stdio.h> main () { int i = 1; tloat f = 0.2; double d = 1.25; printf("変数i:%d f:%f d:%lf", i, f, d); return 0; } 理由の分かる方は回答お願いします。

  • C言語の標準入力で改行しない方法

    端末で入力を受けて、改行せずに次の表示を行いたいのですが、 char str[32]; printf("ほげほげ"); fgets(str, sizeof(str), stdin); str[strlen(str) - 1] = '\0'; printf("ホゲホゲ"); とすれば 「ほげほげ (入力した内容) ホゲホゲ」 と表示できると考えましたが、これでは改行されて 「ほげほげ (入力した内容) ホゲホゲ」 になってしまいます。原因がわかりません… 使用している環境は Linux Ubuntu 10.10 で gcc でコンパイルしています。 改行しない方法を説明しているサイトのサンプルをコピペして実行してみても、改行されてしまいました…