2017-10-08 129 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内规模下是完全独立于外部之一,那么为什么它们筑巢?