C言語の初歩的な部分だと認識しているのですが、分からない、というよりも、どうしても動かせないプログラムがあります。
プログラムはcharでつくった文字列の中身を表示したり、文字数を表示したりするものです。
詳しい目的として、以下のような概要になっています。
『任意入力をそれ以前の入力の後に付け加え、全体の文字列、その長さと消去されるまでの残り文字数を表示し、”clear”と
入力されるか、文字列長が 100 を超えた時点で文字列全体を消去せよ。このとき、文字列を消去したことを明示することとする。”exit”と入力された時点で終了せよ。文字列入力
およびその処理は”exit”と入力されるまで無限ループとせよ。』
そこで、組み立てたプログラムがこれです。
C
1#include<stdio.h> 2#include<string.h> 3#define STRLEN 30 4 5int main(void) 6{ 7 char a[STRLEN], b[STRLEN]; /* ふたつの配列を作成(入力用に)*/ 8 char c[5] = "exit"; /* 配列にexitが入力された場合、その配列==0を指定できるよう、別個で配列を用意*/ 9 char d[6] = "clear"; 10 int l; /*配列長*/ 11 int r; /*残り文字数*/ 12 13 printf("*You may finish this window by entering 'exit'\nEnter some kind of string: "); 14 scanf("%s", a); 15 16 17 for (;;) /**/ 18 { 19 20 printf("Enter some more string: "); 21 scanf("%s", b); 22 23 24 25 if (strcmp(a , c) == 0 ) { /*条件2:配列aにexitが入力されたことが真であると確認できたとき*/ 26 break; /*ウインドウを終了する*/ 27 } 28 29 if (strcmp(a , d) == 0) { 30 } 31 32 strcat(a , b); /*配列aの後にbを連結*/ 33 l = strlen(a); /*lが配列aの長さを表すことを指定*/ 34 35 if (l => 30) { /*条件1:文字列長が100になったとき*/ 36 a[0] = '\0'; /*それまで入力された文字列をクリアする*/ 37 } 38 39 else { 40 41 printf("文字列の中身は %s\n", a); 42 43 44 printf("文字列の長さは %d\n", l); 45 46 r = STRLEN - l; 47 printf("残りの文字数は %d\n", r); /*残り文字数の計算式*/ 48 49 } 50 51 return 0; 52 53 }
スクリプトの表示例はこのような感じになるみたいです。
Enter a string: 1234ghij[Enter]
String = 1234ghij, Length = 8, Remaining = 22
Enter a string: abcdefg[Enter]
String = 1234ghijabcdefg, Length = 15, Remaining = 15
Enter a string: clear[Enter]
String cleared
Enter a string: exit[Enter]
C言語を始めたばかりで、今まで使っていた言語と少し勝手が違うと認識しながら悪戦苦闘しています。
目的の『』内の動作になれば完成です。
エラーをちゃんと書け!と言われると思うのですが、いかんせん色々と出てしまい、エラーの種類や意味も分からない状態です。
エディター、コンパイラはXcodeを使用しています。
どうか訂正のほどよろしくお願いします。
訂正です。
こちらがエラーになります。
よろしくお願いします。
gcc -Wall -o samp4.6.24.exe samp4.6.24.c
samp4.6.24.c: In function ‘main’:
samp4.6.24.c:10:2: error: stray ‘\343’ in program
int l; /配列長/
^
samp4.6.24.c:10:2: error: stray ‘\200’ in program
samp4.6.24.c:10:2: error: stray ‘\200’ in program
samp4.6.24.c:11:2: error: stray ‘\343’ in program
int r; /残り文字数/
^
samp4.6.24.c:11:2: error: stray ‘\200’ in program
samp4.6.24.c:11:2: error: stray ‘\200’ in program
samp4.6.24.c:17:2: error: stray ‘\343’ in program
for (;;) /**/
^
samp4.6.24.c:17:2: error: stray ‘\200’ in program
samp4.6.24.c:17:2: error: stray ‘\200’ in program
samp4.6.24.c:25:3: error: stray ‘\343’ in program
if (strcmp(a , c) == 0 ) { /条件2:配列aにexitが入力されたことが真であると確認できたとき/
^
samp4.6.24.c:25:3: error: stray ‘\200’ in program
samp4.6.24.c:25:3: error: stray ‘\200’ in program
samp4.6.24.c:32:3: error: stray ‘\343’ in program
strcat(a , b); /配列aの後にbを連結/
^
samp4.6.24.c:32:3: error: stray ‘\200’ in program
samp4.6.24.c:32:3: error: stray ‘\200’ in program
samp4.6.24.c:33:3: error: stray ‘\343’ in program
l = strlen(a); /lが配列aの長さを表すことを指定/
^
samp4.6.24.c:33:3: error: stray ‘\200’ in program
samp4.6.24.c:33:3: error: stray ‘\200’ in program
samp4.6.24.c:35:10: error: expected expression before ‘>’ token
if (l => 30) { /条件1:文字列長が100になったとき/
^
samp4.6.24.c:35:10: error: stray ‘\343’ in program
samp4.6.24.c:35:10: error: stray ‘\200’ in program
samp4.6.24.c:35:10: error: stray ‘\200’ in program
samp4.6.24.c:35:10: error: stray ‘\343’ in program
samp4.6.24.c:35:10: error: stray ‘\200’ in program
samp4.6.24.c:35:10: error: stray ‘\200’ in program
samp4.6.24.c:35:10: error: stray ‘\343’ in program
samp4.6.24.c:35:10: error: stray ‘\200’ in program
samp4.6.24.c:35:10: error: stray ‘\200’ in program
samp4.6.24.c:36:4: error: stray ‘\343’ in program
a[0] = '\0'; /それまで入力された文字列をクリアする/
^
samp4.6.24.c:36:4: error: stray ‘\200’ in program
samp4.6.24.c:36:4: error: stray ‘\200’ in program
samp4.6.24.c:47:4: error: stray ‘\343’ in program
printf("残りの文字数は %d\n", r); /残り文字数の計算式/
^
samp4.6.24.c:47:4: error: stray ‘\200’ in program
samp4.6.24.c:47:4: error: stray ‘\200’ in program
samp4.6.24.c:53:1: error: expected declaration or statement at end of input
}
^
samp4.6.24.c:53:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^