问题:从输入到输出重写小数字。停止处理 读数后输入。输入的所有数字都是 一位或两位数的整数。
示例
输入: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管理员请做必要的。答案 0 :(得分:2)
不太多。我看到的唯一区别是:
打印每个号码后,不输出换行符“\ n”。
您的代码并非完全“干”(您重复了scanf("%d",&i);
行)。
否则它们(功能上)相同。但我觉得有必要补充一下:
答案 1 :(得分:1)
在第一个程序中,您在用户输入第一个值后进入循环,因此您必须检查while条件下的值。
相反,第二个程序总是在循环内检查输入,因此更清晰。
答案 2 :(得分:1)
从问题本身我可以说它是来自编程竞赛网站的一个练习题。
这些网站也与您回答问题的格式相符。所以换行符(\ n)是必要的。
答案 3 :(得分:0)
它们在功能上是等同的,我个人更喜欢你的解决方案:while(1)
被一些人(包括我)认为是不良做法。通过查看单行而不是必须遍历代码,更容易看到while循环何时终止。否则会有一些差异:
\n
)