C SPOJ-生命、宇宙和一切

C SPOJ-生命、宇宙和一切,c,C,我不明白他们为什么不接受这个解决方案,他们说这是一个错误的答案:- #include <stdio.h> int main(void) { int val=0; printf("Input:- \n"); do { scanf("%d",&val); printf("%d \n",val); } while(val < 42); return 0; } #包括 内部主(空) { in

我不明白他们为什么不接受这个解决方案,他们说这是一个错误的答案:-

#include <stdio.h>
int main(void) 
{
    int val=0;
    printf("Input:- \n");

    do {
        scanf("%d",&val);
        printf("%d \n",val);
    }
    while(val < 42);

    return 0;
}
#包括
内部主(空)
{
int-val=0;
printf(“输入:-\n”);
做{
scanf(“%d”和&val);
printf(“%d\n”,val);
}
val<42;
返回0;
}
两个错误:

  • 删除此行-
    printf(“输入:-\n”)
  • 有问题的是,你必须在来之前打印出来。如果42来了,你就得休息
  • 像这样:

    if(n!=42) 
       printf("%d\n",n); 
    else 
       break;
    

    首先,问题陈述指出,您应该继续打印数字,直到42到达

    1) 如果第一个数字本身是42怎么办?你的代码无论如何都要打印出来

    2)
    printf(“输入:-\n”)删除此行。提供此行只是为了显示输入内容。您不必打印此行


    3)
    while(val为什么不允许任何大于42的数字?使用
    while(1)
    并在
    42
    时中断。
    这个问题已经在

    中得到了回答。我想你误解了这个问题,当输入大于等于42时,你必须停止处理,但问题实际上是当输入正好等于42时,停止处理。
    尽管您知道您的代码中有一个缺陷,即当输入为42时,您将首先打印它,然后执行while循环将结束。

    这可能会令人惊讶,但并非每个人都知道“SPOJ…”指的是什么(除了向Douglas Noël Adams致敬)。因此,请用所有相关信息完成您的问题。阅读答案和评论,您的程序将给出正确的输出(除了提示)对于SPOJ问题定义中给出的示例,因为您打印
    88
    ,然后停止,因为
    88
    不小于
    42
    。但是您没有足够仔细地阅读问题陈述,您的提交将由SPOJ使用与示例不同的数字序列进行测试。