前提・実現したいこと
「標準入力」欄に英文(英数字の文字列)を入力すると,入力した英文の各行に,1から始まる行番号とその行の文字数を付加して「標準出力」に表示するプログラムを作成したいです。
行番号は,行の先頭から3桁の右詰めで表示したいです。
行の文字数は,3桁の行番号に続けて「[」を表示し,そのあとに文字数を3桁の右詰めで表示し,そのあとに「]」を表示したいです。
行の文字数のあとに半角の空白1文字を表示し,そのあとに入力した行の内容を表示したいです。
自分で作成した、➀行番号を出力するプログラム、➁文字数を出力するプログラム、➂それらを組み合わせたプログラムをソースコードに表示させます。
➂の組み合わせたプログラムが、テストどおり行かないないので、教えていただきたいです、、
よろしくお願いします。
出ているエラーは、標準出力の文字数が1多くなってしまうことです。
例文
標準入力
again access microphone↵
z responsible↵
標準出力
1[ 23] again access microphone↵
2[ 13] z responsible↵
↵はエンターキーを表していて、実際には入力していないです。
自分が作成した➂のプログラムを実行すると、以下のようになってしまいます。
上記のように出力させるには、どこを修正すればよろしいでしょうか?
➂プログラム実行すると(行番号はOKだが、文字数がテストケースより1多くなってしまう。)
標準入力
again access microphone↵
z responsible↵
標準出力
1[ 24] again access microphone↵
2[ 14] z responsible↵
該当のソースコード
➀行番号を出力するプログラム #include <stdio.h> #define SIZE 100 int main(void){ char line[SIZE]; int i; for (i=1; fgets(line, SIZE, stdin) !=NULL; i++) { printf("%3d : ", i); fputs(line, stdout); } return 0; } ➁文字数を出力するプログラム #include <stdio.h> #include <string.h> #define SIZE 100 int main(void){ char line[SIZE]; int len; for (; fgets(line, SIZE, stdin)!=NULL;){ len = strlen(line); printf("%3d : %s", len-1, line); } return 0; } ➂上2つを組み合わせた、行番号と文字数を出力したいプログラム #include <stdio.h> #include <string.h> #define SIZE 100 #define LSIZE 10 int main(void){ char line[LSIZE][SIZE]; int len; int cnt=0; for (; fgets(line[cnt], SIZE, stdin)!=NULL&&cnt<LSIZE;cnt++); for (int i=0;i<cnt;i++) { len = strlen(line[i]); printf("%3d[%3d]%s",i+1,len,line[i]); } return 0; }
試したこと
1と2は、個別にテストしてうまく表示します、、
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー