キーボードから入力されたいくつかの単語を、まとめて一つの文字列にするプログラム を作成したいです。しかし、コンパイルエラーが出てしまいます。
プログラムの内容。
-
入力する単語の数は、マクロ NUM で4と定めておく。
-
入力する単語の長さは、(ヌル文字含め)20文字以下とする。入力用には、2次元の文字配列を用いる。
-
新しい文字列のための変数は newstr という文字型1次元配列とする。
-
入力された単語をつないで新しい文字列 newstr を作るが、 そのとき単語と単語の間にスペース一つを入れる。
-
newstr 文字列のいちばん最後にはピリオド一つを入れる(スペースは無し;実行例参照)。
-
作成した newstr を丸ごと printf で出力する。 この時のprintf内でスペースやピリオドの挿入を行ってはならない。 最後に newstr の文字数(スペース・ピリオドも含む)を表示して終了(実行例参照)。
-
strcpy関数やstrlen関数を使ってよい。strcpy関数は、第2引数に指定された文字列を、第1引数に指定されたアドレス以降にコピーする関数である。また、strlen関数は文字列の長さ(ヌル文字含まず)を返す関数である。 使用するときは、最初に string.h をインクルードしておく。
source
1#include <stdio.h> 2#include .......... 3 4#define NUM 4 5 6int main() 7{ 8 char str2[NUM][20]; /* 入力用の文字配列 */ 9 char newstr[100]; /* 出力用の文字配列 */ 10 int i; 11 12 13 printf( "Input %d words: \n", NUM ); 14 15 for( i = 0; i < NUM; i++ ){ 16 printf("%s", str2[i]); /* 元の文字列の表示 */ 17 } 18 19 for(i= 0; i < NUM; i++){ 20 21 strcpy(newstr[i],str[i]); 22 if ('A' <= str2[i][0] && str2[i][0] <= 'Z') 23 newstr[i][0] = str2[i][0] + 32; 24 //else break; 25 printf("%s\n", newstr[i]); 26 27 } 28 29 //newstr[i] = *prefix + str[i]; 30 31 32 33 //for( i = 0; i < NUM; i++ ){ 34 //printf("%s\n", newstr[i]); /* 新しく作成した文字列の表示 */ 35 //} 36 37 return 0; 38}
Error
1prog03.c:2:10: error: #include expects "FILENAME" or <FILENAME> 2 2 | #include .......... 3 | ^~~ 4prog03.c: In function ‘main’: 5prog03.c:21:5: warning: implicit declaration of function ‘strcpy’ [-Wimplicit-function-declaration] 6 21 | strcpy(newstr[i],str[i]); 7 | ^~~~~~ 8prog03.c:21:5: warning: incompatible implicit declaration of built-in function ‘strcpy’ 9prog03.c:2:1: note: include ‘<string.h>’ or provide a declaration of ‘strcpy’ 10 1 | #include <stdio.h> 11 +++ |+#include <string.h> 12 2 | #include .......... 13prog03.c:21:22: error: ‘str’ undeclared (first use in this function); did you mean ‘str2’? 14 21 | strcpy(newstr[i],str[i]); 15 | ^~~ 16 | str2 17prog03.c:21:22: note: each undeclared identifier is reported only once for each function it appears in 18prog03.c:21:18: warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion] 19 21 | strcpy(newstr[i],str[i]); 20 | ~~~~~~^~~ 21 | | 22 | char 23prog03.c:21:18: note: expected ‘char *’ but argument is of type ‘char’ 24prog03.c:23:15: error: subscripted value is neither array nor pointer nor vector 25 23 | newstr[i][0] = str2[i][0] + 32; 26 | ^ 27prog03.c:25:14: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=] 28 25 | printf("%s\n", newstr[i]); 29 | ~^ ~~~~~~~~~ 30 | | | 31 | char * int 32 | %d 33
何か既視感ある問題だなと思ったら、以下の質問と同じ課題っぽいですね。
入力した単語に空白を入れて文章を作る方法が分かりません
https://teratail.com/questions/300085
同じ組織の、違う方からの質問なのでしょうか。(過去、そのようなケースは何度かありました)
回答2件
あなたの回答
tips
プレビュー