2016-11-22 6 views
0

だから私は、現時点ではその入力行を反転させるプログラムを書くために必要だった、これは私が基本的に思い付いたものです:私はそれは大丈夫です知っている限りでのprintfは、Ubuntuの中で機能しない

#include <stdio.h> 
#include <string.h> 

#define MAXLINE 1000 

int getLine(char s[], int lim) 
{ 
     int c, i; 
     for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) 
       s[i] = c; 
     if (c == '\n') { 
       s[i] = c; 
       ++i; 
     } 
     s[i] = '\0'; 
     return i; 
} 

int reverse(char line[], char reverse[]) 
{ 
     int i, j; 
     for (i = 0, j = strlen(line); i < strlen(line); i++, j--) { 
       reverse[i] = line[j]; 
     } 
     return 0; 
} 

int main() 
{ 
     int len; 
     char line[MAXLINE]; 
     char rev[MAXLINE]; 
     while (len = getLine(line, MAXLINE) > 0) { 
       reverse(line, rev); 
       printf("%s\n", rev); 
     } 
     return 0; 
} 

と正しく動作するはずですが、次の行が印刷されても実行すると、そこには逆の文字列はありません! 同じ問題が他のプログラムでも続きますが、文字列を印刷する必要がある場合は、askubuntuフォーラムまたはここで質問する必要があるかどうかはわかりません。

+2

と思いますか?それが 'printf()'ならば、なぜあなたは 'reverse()'を質問に含めましたか?それが 'reverse()'の場合、タイトルは 'printf()'を参照するのはなぜですか? 'printf()'で問題を示す最短のプログラムを書くか、 'reverse()'関数についてもっと頑張ってください。 – slim

+0

私はそれが 'lim-1'であると確信しています。 –

答えて

2

逆の機能では、'\0'文字のコピーが失敗します。これにより、printfは文字列を印刷しない可能性があります。 strlenは'\0'なしで長さを与えることを忘れないでください。リバース機能を修正

は次のようにする必要があります:あなたは問題が `のprintf()`または ``)(逆である

int reverse(char line[], char reverse[]) 
{ 
     int i, j; 
     for (i = 0, j = (strlen(line)-1); i < strlen(line); i++, j--) { 
       reverse[i] = line[j]; 
     } 
     reverse[i] = '\0' 
     return 0; 
} 
+2

私は、最初の反復で終端文字をインデックス '0'にコピーするので、後で逆の文字列を含む空の文字列であるという問題があると思います。 'line [strlen(line)]は0終止符であることに注意してください。 – mch

+0

まだ動作していません! –

+0

まあ、私はちょうどあなたに戻って取得しようとします、ありがとう:) –

関連する問題