用于显示 "One" 值的 For 循环与 While 循环 (CS50)
For Loop vs While Loop for Displaying "One" Value (CS50)
观看 CS50 讲座的第 2 周(此处:https://video.cs50.net/2016/fall/lectures/2?t=84m33s),他通过 运行 对字符串的字符进行 while
循环来重新实现 strlen
,使用此循环(已编辑其他代码):
string s = get_string();
int n = 0;
while (s[n] != '[=11=]')
{
n++;
}
printf("%i",n);
我的问题是:上面的内容可以在for
循环中表述吗?
我试图创建一个,但由于 for
循环的格式化方式,它似乎在每次迭代后强制输出,这与允许一个输出的 while
循环不同循环,一旦满足特定条件。
我很好奇 for
循环是否可以在这种情况下实现相同的 "one-time, conditional" 输出。如果我没记错的话,while
是 C lang 独有的,而 Python 等其他语言则专门有 for
循环(如果我错了请告诉我!)。
同样可以用for循环来写。例如
string s = get_string();
int n = 0;
for ( ; s[n] != '[=10=]'; n++ );
printf("%i",n);
然而,这个带有空子语句的 for 循环可能会混淆代码的 reader,即使它是这样写的
for ( ; s[n] != '[=11=]'; n++ ) /* empty body */;
或
for ( ; s[n] != '[=12=]'; n++ ) { / *empty body */ }
通常同样的事情可以有多种不同的方式。你应该 select 一个更具表现力的结构。对于此任务,最好使用 while 循环。
考虑到变量 n
.
使用类型 size_t
而不是类型 int
会更正确
例如
string s = get_string();
size_t n = 0;
for ( ; s[n] != '[=13=]'; n++ );
printf("%zu",n);
此代码也适用于这种情况:
int n=0;
for(;s[n];n++);
printf("%d ",n);
这是如何工作的:
字符串元素有ASCII值,所以直到字符串中有字符,for循环的条件部分为真。当它到达字符串的末尾,即 '\0'('\0' 的整数值为零)时,条件失败,循环退出。
观看 CS50 讲座的第 2 周(此处:https://video.cs50.net/2016/fall/lectures/2?t=84m33s),他通过 运行 对字符串的字符进行 while
循环来重新实现 strlen
,使用此循环(已编辑其他代码):
string s = get_string();
int n = 0;
while (s[n] != '[=11=]')
{
n++;
}
printf("%i",n);
我的问题是:上面的内容可以在for
循环中表述吗?
我试图创建一个,但由于 for
循环的格式化方式,它似乎在每次迭代后强制输出,这与允许一个输出的 while
循环不同循环,一旦满足特定条件。
我很好奇 for
循环是否可以在这种情况下实现相同的 "one-time, conditional" 输出。如果我没记错的话,while
是 C lang 独有的,而 Python 等其他语言则专门有 for
循环(如果我错了请告诉我!)。
同样可以用for循环来写。例如
string s = get_string();
int n = 0;
for ( ; s[n] != '[=10=]'; n++ );
printf("%i",n);
然而,这个带有空子语句的 for 循环可能会混淆代码的 reader,即使它是这样写的
for ( ; s[n] != '[=11=]'; n++ ) /* empty body */;
或
for ( ; s[n] != '[=12=]'; n++ ) { / *empty body */ }
通常同样的事情可以有多种不同的方式。你应该 select 一个更具表现力的结构。对于此任务,最好使用 while 循环。
考虑到变量 n
.
size_t
而不是类型 int
会更正确
例如
string s = get_string();
size_t n = 0;
for ( ; s[n] != '[=13=]'; n++ );
printf("%zu",n);
此代码也适用于这种情况:
int n=0;
for(;s[n];n++);
printf("%d ",n);
这是如何工作的:
字符串元素有ASCII值,所以直到字符串中有字符,for循环的条件部分为真。当它到达字符串的末尾,即 '\0'('\0' 的整数值为零)时,条件失败,循环退出。