2017-11-16 15 views
-2

私はいくつかの文を挿入するプログラムを作成しており、プログラムはそれらを順番に出力します。私はプログラムを終了しましたが、私がそれを実行すると、配列に入力された文字が表示されたり正しく格納されず、結果として完全な文の代わりにランダムな文字が得られるようです。プログラムは2d配列の文字をcに格納しません

char ch; 
int i,j,k; 
int nothing = 0; 
int count = 1; 
char lines[5][256]; 
int length[256]; 

int main() { 
    printf("Please insert up to a max of 5 lines of text (Press enter to go to next line and twice enter to stop the program):\n"); 
    i = 0; 
    while (i<5){ 

     j = 0; 
     ch = getche(); 

     if (ch == '\r'){ 
      if(i!= 0){ 
       break;  
      } 
      printf("You have not inserted anything, please insert a line:"); 
      i=-1; 
     } 

     if(ch != '\r'){ 
      lines[i][j]=ch; 
      while (ch!='\r'){ 
       ch = getche(); 
       lines[i][j] = ch; 
       j++; 
      } 
     } 
     printf("\n"); 
     i++; 
    } 
    for (k=i ; k > 0; k--){ 
     printf("\tphrase %i :", count); 
     for (j =0 ; j <= length[k]; j++){ 
      printf("%c",lines[j][k]); 
     } 
     count++; 
     printf("\n"); 
    } 
    return 0; 
} 

文字を正しく表示するにはどうすればよいですか?どんな助けもありがとう、ありがとう!

+2

コードをフォーマットしてください。私は "}"末尾を教えてくれません – Simon

+1

実際の出力対期待出力を表示します –

+0

'getche()'を使う特別な理由はありますか?どのプラットフォームの下でこれをコンパイルしましたか? – roelofs

答えて

3

コードには多くの問題があります。私はここで試して要約し、改善されたコードを提供します。

拳、私は私のシステム上でコンパイルするために、これを取得するために作られたいくつかの変更は:

  1. getche()はUbuntuの上で利用可能であるようには見えない)getche()getchar()に変更します。
  2. 私は文字列を再入力することについてのセクションを取り出し、残りの部分に焦点を当てました(ロジックが少し壊れていて、あなたの質問とは関係ないので)。それでも少なくとも1行はチェックされてから、続行されます。
  3. \rのチェックを\nに変更する必要がありました。
  4. length配列をサイズ5に変更しました。最大5文字列(256ではなく)の長さしかないためです。

あなたのコード内のいくつかの問題:

  1. あなたがメインwhileループでlength[]配列を更新したことがないので、プログラムが印刷する文字数を知っていたことはありません。
  2. 配列のインデックスはゼロです。最後の印刷ループはスキップされた文字になります。 forのパラメータを0から開始するように変更し、k < iに変更しました。これは、前のループで最後の文字の後にiを更新したためです。 jと同じです。
  3. 印刷ループの配列への参照が間違っていたため(メモリのランダムな領域から印刷したと思います)。 lines[j][k]lines[k][j]に変更しました。
  4. 別途、count変数は必要ありません。kを使用してください。 countが削除されました。
  5. 変数nothingは使用されません。削除してください。
#include <stdlib.h> 
#include <stdio.h> 

char ch; 
int i,j,k; 
char lines[5][256]; 
int length[5]; 

int main() 
{ 
    printf("Please insert up to a max of 5 lines of text (Press enter to go to the next line and twice enter to stop the program):\n"); 
    i = 0; 
    while (i<5) 
    { 
     j = 0; 
     ch = getchar(); 

     if ((ch == '\n') && (j == 0) && (i > 0)) 
     { 
      break; 
     } 

     if (ch != '\n') 
     { 
      while (ch != '\n') 
      { 
       lines[i][j] = ch; 
       j++; 
       ch = getchar(); 
      } 
     } 
     length[i] = j; 
     printf("\n"); 
     i++; 
    } 
    for (k = 0; k < i; k++) 
    { 
     printf("\tPhrase %i : ", k); 
     for (j = 0; j < length[k]; j++) 
     { 
      printf("%c", lines[k][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
+0

ありがとうございました!私はそれを感謝します – PabloD

+0

すべての良い私の友人。 – roelofs

関連する問題