2016-10-18 8 views
0

プログラムを使用して、指定された文字列の偶数および奇数の位置に文字を印刷しようとしています。私のプログラムは、文字列が1つだけであればうまくいきますが、複数の文字列を含む文章では機能しません。次のコードは入力された2番目の文字列を出力しますが、非常に最初の文字列です。私は「団結」として最初の文字列を入力したときに、実行時に複数の文字列の偶数および奇数位置に文字を印刷する

int main() 
{ 
char string[10], even[10], odd[10], i, j, k,count; 

i = j = k = count = 0; 

    do 
    { 
    printf("Enter your input string:"); 
    fgets(string, 10, stdin); 
    string[strlen(string) - 1] = '\0'; 

    /* printing the input string */ 
    printf("Given Input string:%s\n", string); 

     while (string[i] != '\0') 
     { 
      if (i % 2 == 0) { 
      odd[j++] = string[i]; 
      } 
      else { 
      even[k++] = string[i]; 
      } 
     i++; 
     } 
    /* terminating even and odd string with NULL */ 
    odd[j] = even[k] = '\0'; 

    /* print the characters at odd position and even positions */ 
    printf(" %s %s", odd,even); 

    odd[0]=even[0]='\0'; 
    count++; 
    }while(count<2); 
return 0; 
} 

は、それが奇数位置と偶数位置のための「NTD」のための「UIE」をプリントアウト。それから私は "状態"として入力した2番目の文字列を入力するよう求められますが、入力された文字列を除いては何も出力されず、プログラムは終了します。最初の文字列と同じように出力されませんでした。 私の間違いを指摘してください。私のコードは最初の文字列だけでなく、ユーザーが入力したすべての文字列の偶数と奇数の位置に文字を出力する必要があります。

+0

ローカル変数をリセットするのを忘れました。 –

+0

「i」、「j」、および「k」は0にリセットされていません。 – Riley

+0

はい、私は今間違いを認識しました。私は修正し、現在は動作しています。どうもありがとうございました! – Angela

答えて

3

すべてのローカル変数をブロックの先頭に、実行可能なステートメントよりも先に宣言する必要がある古典的なC構文に限定しています。

ループでdo/whileループ外のcount以外の変数を使用しているコードでは、ループ内で宣言を移動する必要があります。これにより、各反復の開始時に変数が適切な初期値を持つようになります。ここで

は心に留めておくためにいくつかの追加のポイントです:

  • エンドユーザーが入力ストリーム(Windows上はCtrl + ZCtrlキーを終了した場合にあなたのコードは未定義の動作になります + UNIXの場合
  • エンドユーザーが10文字未満の入力後に入力ストリームを終了すると、コードが最後の文字を破棄します
  • odd[0]=even[0]='\0'は不要です
+0

貴重なご意見ありがとうございます。 – Angela

関連する問題