2017-06-22 10 views
0

再帰メソッドを使用してテキストファイル内の行を反転しようとしています。私は今すぐかなり固執しており、私の現在の出力はセグメンテーションエラーです - 誰かがセグメンテーションエラーの原因を説明し、正しい方向に私を押し込めますか?文字列内の特定の行を逆順に処理する

void RecursionLine(); 
int main (int argc, char argv) 
{ 
    RecursionLine(); 
    printf("\n"); 
} 

void RecursionLine() 
{ 
    int c; 
if((c = getchar()) != EOF || (c != '\n')) 
    { 
     RecursionLine(); 
     printf("%c",c); 
    } 
else if((c = getchar()) != EOF && (c == '\n')){ 
     printf("\n"); 
     RecursionLine(); 
} 
} 

Input: 
Dogs 
Cats 
Boys 
Output 
sgoD 
staC 
syoB 
+2

最初の条件に '||'の代わりに '&&'を付けるべきですか? –

答えて

1

あなたがそれらのいずれかの条件が常に無限再帰からオーバーフローにあなたのスタックを引き起こして、trueになりますあなたの最初のif文で||条件を持っているので、あなたは、セグメンテーションエラーを取得しています!これを&&に変更してください。すべて修正する必要があります。

if((c = getchar()) != EOF && (c != '\n')) 

EDIT:はまた、私はあなたが原因二GETCHARにいくつかの不適切な機能に実行しようとしていると考えています()。そうしないとあなたが潜在的に2文字ごとに反復を読み込むしようとしている、それはそれらの1 /両方がスキップさせるように起こっている

void RecursionLine() 
{ 
    int c = getchar(); 
if(c != EOF || c != '\n') 
    { 
     RecursionLine(); 
     printf("%c",c); 
    } 
else if(c != EOF && c == '\n'){ 
     printf("\n"); 
     RecursionLine(); 
} 
} 

:私はあなたに機能を変更します!

+0

ありがとう!!ダムの間違い、あなたの助けに感謝! – Dnlfgby

+0

@Dnlfgby私の編集を参照してください! –

+0

空のパラメータリストを持つ関数を宣言または定義することは、ほぼ確実にあなたが望むものではないことに注意してください。これは陳腐化した機能で、この場合は 'RecursionLine()'の関数は不特定多数の引数を取ることを意味します。おそらくあなたが意味するのは、 'void RecursionLine(void){}'です。 'RecursionLine()'が引数を取らないことを知らせるために、 'void'は括弧の中で_必要です。 [ここをクリック](https://stackoverflow.com/questions/13950642/why-does-a-function-with-no-parameters-compared-to-the-actual-function-definiti)... –

関連する問題