如何将下面的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);
}
答案 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}},为什么要将它们嵌套?