ABA
@ABA (A)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

出力の行数を増やしたい

Q&A

Closed

解決したいこと

以下のプログラミングは、1行の英数字の文字列を入力するとその文字列を逆順に出力します。さらに入力列を増やした場合各行ごとに文字列を逆順に出力したいと考えています。
入力 ABCDF
出力 FDCBA
の状態を
2行以上の出力に対応するプログラムに変更したいと考えています。
なお、stringを使わない例で考えています。
解決方法を教えて下さい。

該当するソースコード

#include<stdio.h>
int main(){
    char str[80];
    int i,j;
    char str_temp[80];

    fgets(str,80,stdin);
    for(i=0;str[i]!='\0';i++){}
    for(j=0,i-=1;i>=0;i--,j++){
    str_temp[j]=str[i-1];
    }
    printf("%s\n",str_temp);

    return 0;
}

自分で試したこと

fgets(str,80,stdin);
for(i=0;str[i]!='\0';i++){}
for(j=0,i-=1;i>=0;i--,j++){
str_temp[j]=str[i-1];
}
printf("%s\n",str_temp);

の部分を追加して2行目を入力すると、出力は1文字足りない状態で出力されます。
さらにこの部分を追加して3行目を入力すると2行目と同じものが出力されます。

0

1Answer

こんな感じでいかがでしょうか。

#include <stdio.h>

#define LINE_LENGTH (80)

int main() {
    char str [LINE_LENGTH];
    int i, j;
    char str_temp [LINE_LENGTH];

    while (fgets (str, LINE_LENGTH, stdin)!= NULL) { // 1行を取得して、入力がなくなるまで繰り返す
        for (i = 0; str [i] != '\0' &&  str [i] != '\n'; i++) { } // 行末(終端または改行文字)を探す
        for (j = 0, i--; i >= 0; i--, j++) { // 行末の一つ前から、先頭(0)まで
            str_temp [j] = str [i]; // 逆順に複製
        }
        str_temp [j] = '\0'; // 終端を書く
        printf ("%s\n", str_temp); // 1行を出力
    }
    return 0;
}
stdin
ABCDEFG
HIJKLMN
OPQRSTU
VWXYZ
stdout
GFEDCBA
NMLKJIH
UTSRQPO
ZYXWV
0Like

Comments

  1. @ABA

    Questioner

    ありがとうございます。

Your answer might help someone💌