gpt4 book ai didi

c - 如何将for循环转换为while循环?

转载 作者:行者123 更新时间:2023-11-30 21:44:35 26 4
gpt4 key购买 nike

如何将下面的 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 语言的总体看法 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 的大小
  • for else内完全独立于外部,那为什么还要嵌套它们呢?

关于c - 如何将for循环转换为while循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46631708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com