0

问题:将小数从输入改写到输出。读入数字 42 后停止处理输入。输入处的所有数字都是一位或两位数的整数。

例子

输入:1 2 88 42 99

输出:1 2 88

我的解决方案:

#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
while(i!=42)
{ 
printf("%d",i);
scanf("%d",&i);
}
return 0;
}

正确解决方案:

#include <stdio.h>

int main( void ) {
int i;
while( 1 ) {
    scanf( "%d", &i );
    if( i == 42 ) break;
    printf( "%d\n", i );
}
return 0;
}

如果输入为 42,两个程序都结束,那么两者有什么区别?

编辑:我刚刚意识到这应该已经发布在 codereview.stackexchange.com 管理员请做必要的事情。

4

4 回答 4

2

没有太多。我看到的唯一区别是:

  1. 打印每个数字后,您不会输出换行符“\n”。

  2. 您的代码并不完全“干燥”(您重复该行scanf("%d",&i);)。

否则它们(功能上)是相同的。但我觉得有必要补充:

  • 你的代码有点难看......使用适当的缩进!
于 2013-05-31T13:29:21.797 回答
1

在第一个程序中,您在用户输入第一个值后进入循环,因此您必须检查 while 条件中的值。

相反,第二个程序总是在循环内检查输入,因此更清晰。

于 2013-05-31T13:26:35.113 回答
1

从问题本身我可以说它来自编程竞赛网站练习题之一。

这些网站也与您回答问题的格式相匹配。所以换行符(\n)是必要的。

于 2013-05-31T13:29:05.220 回答
0

它们在功能上是等效的,而且我个人更喜欢你的解决方案:while(1)被包括我在内的一些人认为是不好的做法。仅通过查看单行就更容易看到 while 循环何时终止,而不必跟踪代码。其他一些差异:

  • 你需要缩进你的代码,否则很难阅读
  • 您没有打印换行符 ( \n)
于 2013-05-31T13:28:28.700 回答