【问题标题】:How to convert for loop into while loop?如何将for循环转换为while循环?
【发布时间】:2018-03-19 19:01:59
【问题描述】:

如何将下面的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);
}

【问题讨论】:

标签: c loops for-loop while-loop


【解决方案1】:
j = 0;

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

【讨论】:

  • 感谢您的帮助。
  • @SamaelSaverem 如果答案是好的,那么你应该投赞成票。如果它解决了您的问题,那么您应该接受它。
  • break 总是在这里执行什么?
  • 抱歉,我以为中断在 for 循环内。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 2017-04-26
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2021-02-17
    相关资源
    最近更新 更多