如何将循环转换为while循环?

时间:2017-10-08 13:39:03

标签: c loops for-loop while-loop

如何将下面的for循环转换为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);
}

2 个答案:

答案 0 :(得分:0)

j = 0;

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

答案 1 :(得分: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> - &gt;不要将它用于Visual Studio下的C代码。首选空项目以使其可移植。 (我的意见)
  • int main() - &gt;应int main(void)为标准。
  • char sen[10]; - &gt;这个数组可以包含9个字符加一个终结符。 "Bad weather!"需要12个加终结符。
  • for (i = 0; i<20; ++i){ - &gt;为什么20?
  • s[i] != '\0' - &gt;帮自己一个忙:把它写成s[i] != 0,强调它不是一个神奇的价值。只是一个0.(我的意见)
  • sen[i] = s[i]; - &gt;您没有检查i是否低于sen
  • 的大小
  • for中的else完全独立于外部{{1}},为什么要将它们嵌套?