这两种解决方案有什么区别?

时间:2013-05-31 13:23:04

标签: c

  

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

     

示例

     

输入: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 个答案:

答案 0 :(得分:2)

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

  1. 打印每个号码后,不输出换行符“\ n”。

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

  3. 否则它们(功能上)相同。但我觉得有必要补充一下:

    • 你的代码稍微丑陋......使用适当的缩进!

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

它们在功能上是等同的,我个人更喜欢你的解决方案:while(1)被一些人(包括我)认为是不良做法。通过查看单行而不是必须遍历代码,更容易看到while循环何时终止。否则会有一些差异:

  • 您需要缩进代码,否则很难阅读
  • 您没有打印换行符(\n