2017-10-08 8 views
-6

forループをwhileループに変換するにはどうすればよいですか?whileループをwhileループに変換するには?

for (j = 0; s1[j] != '\0'; j++, i++) 
    sen[i] = s1[j]; 

私はこれと間違っているかわからない、変換しようとしたが、任意の空の結果を得た:

while (j= 0, s1[j] != '\0') { 
    j++, i++; 
    sen[i] = s1[j]; 
} 

元のコードは以下の通りです:

#include <stdio.h> 
#include <stdafx.h> 

int main() 
{ 
    char s[] = "Bad"; 
    char s1[] = "weather!"; 
    char sen[10]; 
    int i, j; 
    for (i = 0; i<20; ++i){ 
     if (s[i] != '\0') 
      sen[i] = s[i]; 
     else { 
      sen[i++] = ' '; 
      for (j = 0; s1[j] != '\0'; j++, i++) 
       sen[i] = s1[j]; 
      break; 
     } 
    } 
    sen[i] = '\0'; 
    puts(sen); 
} 
+0

whileループの使い方を読んでください。これはあなたを助けるかもしれません:https://en.wikipedia.org/wiki/While_loop – Cherubim

+0

'while'ループを書くのではなく、おそらくあなたは[' strcpy'](http://en.cppreference.com/ w/c/string/byte/strcpy)と['strcat'](http://en.cppreference.com/w/c/string/byte/strcat)を参照してください。 –

答えて

0
j = 0; 

while(s1[j] != '\0') 
{ 
    sen[i] = s1[j]; 
    i++; 
    j++; 
} 
+0

ご協力ありがとうございます。 –

+1

@SamaelSaverem答えが良ければ投票してください。それがあなたの質問を解決したら、それを受け入れるべきです。 – bolov

+0

'break 'はいつもここで実行されますか? –

0

私の一般的なC言語forステートメントは、whileステートメントのコンパクトバージョンです。そこcontinueを使用している場合、いくつかの小さな違いがありますが、それとは別に、これは一般的な全単射変換である:あなたがあなたのケースにこれを適用する場合

for (expr1 ; expr2 ; expr3) { 
    statements; 
} 

だから

expr1; 
while (expr2) { 
    statements; 
    expr3; 
} 

次のようになります。

for (j = 0; s1[j] != '\0'; j++, i++) 
sen[i] = s1[j]; 

あなたはそれを得る

expr1  <==> j = 0 
expr2  <==> s1[j] != '\0' 
expr3  <==> j++, i++ 
statements <==> sen[i] = s1[j]; 

ですので、変換は@ user2233706で提案されたものと同じです。

j = 0; 
while (s1[j] != '\0') { 
    sen[i] = s1[j]; 
    j++, i++; 
} 

とにかく、元のコードは長いエラーのためにひどいです。彼女の私たちは行きます:

  • #include <stdafx.h> - >これはVisual Studioの下のCコードには使用しないでください。空のプロジェクトをポータブルにすることをお勧めします。 (私の意見)
  • int main() - >int main(void)を標準にする必要があります。
  • char sen[10]; - >この配列には、9文字とターミネータを含めることができます。 "Bad weather!"には、12プラスターミネータが必要です。
  • for (i = 0; i<20; ++i){ - >なぜ20ですか?
  • s[i] != '\0' - >自分自身に好意を持ってください:それは魔法の価値ではないことを強調するためにs[i] != 0と書いてください。あるちょうど0(私の意見)
  • sen[i] = s[i]; - >ielsesen
  • forのサイズよりも小さい外1の完全に独立しているので、なぜそれらをネストかどうかをチェックしませんでした?