2017-10-08 61 views
-6

如何將下面的for循環轉換爲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 -'-loops,或許你應該閱讀['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]; - >您還沒有檢查i大於sen
  • forelse內規模下是完全獨立於外部之一,那麼爲什麼它們築巢?