大大,这道题中的“输入包含多组测试用例.每组用例占一行”,

1个回答

  • 看起来像是ACM的OJ系统呵.和我们平常编程的运行环境不同:它上面的输入和输出是分开的,不像咱们从键盘输入后在屏幕上显示,程序输出的内容也在屏幕上显示,交错一起的那个样子.

    这道题,你可以用一个循环,设定结束条件为连续读到两个0,循环体里对于每次读到的一行两个数,执行求和输出并换行.

    #include

    int main()

    {

    int a,b;

    while(1) {

    scanf("%d%d",&a,&b);

    if(a==0&&b==0) break;

    printf("%dn",a+b);

    }

    return 0;

    }

    在所有的输入完成前,OJ不会去检查你程序的输出的^_^,它只要一个最后的结果.所以你不必非要等最后一个数据输入后再一股脑地输出来,那样可能需要用一个足够大的数组或者是动态分配的存储来保存所有结果,会严重降低程序效率,在ACM上是很不利的.

    如果你对OJ的方式感兴趣,可以利用重定向来模仿它.在你的源文件旁边建立两个文件,一个用来存放代替键盘输入的内容,另一个用来存放代替屏幕输出的内容,假设分别叫in.txt和out.txt,然后这样写:

    #include

    int main()

    {

    int a,b;

    freopen("in.txt","r",stdin);

    freopen("out.txt","w",stdout);

    freopen("out.txt","w",stderr);

    while(1) {

    scanf("%d%d",&a,&b);

    if (a==0&&b==0) break;

    printf("%dn",a+b);

    }

    fclose(stdin);

    fclose(stdout);

    fclose(stderr);

    return 0;

    }

    然后在运行.exe前把输入数据一口气全部保存到in.txt中去,再去启动你的.exe程序,运行结束后你再手动打开out.txt对照一下,可以试试.不过记得在提交前把freopen()和fclose()的那几条语句去掉.以前在网上看过别人利用OJ环境的宏定义来条件编译,等会儿再找找看.