C 这两种解决方案的区别是什么?
问题:从输入到输出重写小数字。停止处理 读取数字42后输入。输入的所有数字都是 一个或两个数字的整数 范例 输入:1 2 88 42 99 产出:1 288 我的解决方案:C 这两种解决方案的区别是什么?,c,C,问题:从输入到输出重写小数字。停止处理 读取数字42后输入。输入的所有数字都是 一个或两个数字的整数 范例 输入:1 2 88 42 99 产出:1 288 我的解决方案: #include<stdio.h> int main() { int i; scanf("%d",&i); while(i!=42) { printf("%d",i); scanf("%d",&i); } return 0; } #包括 int main() { int i; scanf(“%
#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
while(i!=42)
{
printf("%d",i);
scanf("%d",&i);
}
return 0;
}
#包括
int main()
{
int i;
scanf(“%d”、&i);
而(i!=42)
{
printf(“%d”,i);
scanf(“%d”、&i);
}
返回0;
}
正确的解决方案:
#include <stdio.h>
int main( void ) {
int i;
while( 1 ) {
scanf( "%d", &i );
if( i == 42 ) break;
printf( "%d\n", i );
}
return 0;
}
#包括
内部主(空){
int i;
而(1){
scanf(“%d”、&i);
如果(i==42)中断;
printf(“%d\n”,i);
}
返回0;
}
如果输入为42,两个程序都结束,那么两者之间的区别是什么
编辑:我刚刚意识到这应该发布在codereview.stackexchange.com管理员处,请执行所需操作。在第一个程序中,您在用户输入第一个值后输入循环,因此您必须在while条件下检查该值
相反,第二个程序总是在循环内检查输入,因此更清晰。在第一个程序中,用户输入第一个值后,您进入循环,因此您必须在while条件下检查该值
相反,第二个程序总是在循环内检查输入,因此更清晰。它们在功能上是等效的,我个人更喜欢您的解决方案:
,而(1)
被包括我在内的一些人认为是不好的做法。只需查看单行,而不必跟踪代码,就可以更容易地看到while循环何时终止。除此之外,还有一些不同之处:
- 您需要缩进代码,否则代码很难阅读
- 您没有打印换行符(
)\n
,而(1)
被包括我在内的一些人认为是坏习惯。只需查看单行,而不必跟踪代码,就可以更容易地看到while循环何时终止。除此之外,还有一些不同之处:
- 您需要缩进代码,否则代码很难阅读
- 您没有打印换行符(
)\n
这些网站也符合您回答问题的格式。因此,换行符(\n)是必要的。从问题本身来看,我可以说它来自编程竞赛网站实践问题之一
这些网站也符合您回答问题的格式。所以换行符(\n)是必要的。不要太多。我看到的唯一区别是:
scanf(“%d”、&i);
)- 你的代码有点难看。。。使用适当的缩进李>
- 不要太多。我看到的唯一区别是:
- 打印每个数字后,不输出换行符“\n”
- 您的代码不是完全“干的”(您重复了
)scanf(“%d”、&i);
否则它们(在功能上)是相同的。但我不得不补充一点:
- 你的代码有点难看。。。使用适当的缩进李>
语句,就像它们表面上一样,似乎永远循环。如果代码的意图是在特定条件下停止,那么编写代码时应该清楚地反映该意图。一个打印“\n”,一个不打印。我相信它们是严格等效的,一些铁杆的“不去不破”的家伙甚至会说您的代码更优雅。我同意@Medinoc。我讨厌,而(1)
语句,就像它们表面上一样,似乎永远循环。如果代码的意图是在特定条件下停止,那么编写代码时应明确反映该意图。但这不是spoj法官拒绝第一个的原因。但这不是spoj法官拒绝第一个的原因。为什么,而(1)
被视为不良做法?你反对所有形式的无限循环吗?还是你更喜欢而(1)
,while(true)
,for(;;)
…?我个人并不喜欢无限循环,因为我上面说过。我认为它更清晰,也不太可能导致bug,因为可能有一些代码路径是您错过的,它们不会在应该的时候中断。正如我所说的,这是我(至少还有一些人,请参阅对问题的评论)的观点,它在功能上仍然是正确的。感谢您进行更新。我不确定我是否同意你的推理,但原因现在已经很清楚了:-)我不明白goto
做了什么。1只是一个常数。为什么它被视为循环条件?1是否意味着在执行而(1)
循环的主体之前不计算任何条件?如果是这种情况,那么我可以不输入其他字符或数字而不是1吗?在C中,不存在true和false这两种情况—相反,while
(作为整数)被处理,false非零值被视为true。因此,C中的0
是1
。true
表示“永远循环”。为什么while(1)
被认为是不好的做法?你反对所有形式的无限循环吗?还是你更喜欢while(1)
,while(true)
,for(;;)
…?我个人并不喜欢无限循环,因为我上面说过。我认为它更清晰,也不太可能引起bug,因为goto