首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

新手求教! acmer1004,求大神帮看看代码错哪了

2013-08-09 
新手求教!!! acmer1004,求大神帮看看代码哪里错了。输入的第一行是一个正数N,表示后面有N行。每一行的第一个

新手求教!!! acmer1004,求大神帮看看代码哪里错了。
输入的第一行是一个正数N,表示后面有N行。每一行的第一个数是M,表示本行后面还有M个数。
样例输入
2
4 1 2 3 4
5 1 2 3 4 5
样例输出
10
15
我的代码:
#include <stdio.h>
int main()
{
    int n,m,k;
    int s1[50]={0};
    int c=0;
    scanf("%d\n",&n);
    while(scanf("%d\n",&m)&&n>0)
    {
        int s=0;
        if(m==0)
            break;
        else
         for(int i=0;i<m;i++)
         {
            scanf("%d",&k);
            s=s+k;
         }
        s1[c]=s;
        c++;
        n--;
    }
    for(int i=0;i<c;i++)
    {
        printf("%d\n",s1[i]);
    }
    return 0;
}

运行结果:
2
4 1 2 3 4 5
5 1 2 3 4 5 
6 1 2 3 4 5
10
15

不明白为什么我能多输入6开头那一行。弄了一个早上也没找出问题,求大神赐教啊!
C
[解决办法]
step by step debug
[解决办法]

while(scanf("%d\n",&m)&&n>0) //把n>0放在前面,代码如下行
while(n>0 && scanf("%d\n",&m)) //这样就可以了

[解决办法]
#include <stdio.h>
int main()
{
    int n,m,k;


    int s1[50]={0};
    int c=0;
    scanf("%d\n",&n);
    while(n>0)
    {
        scanf("%d\n",&m);//去掉while里面的输入改成这样
       
        //或者不去掉改成这样while(n>0&&scanf("%d\n",&m))
        int s=0;
        if(m==0)
            break;
        else
         for(int i=0;i<m;i++)
         {
            scanf("%d",&k);
            s=s+k;
         }
        s1[c]=s;
        c++;
        n--;
    }
    for(int i=0;i<c;i++)
    {
        printf("%d\n",s1[i]);
    }
    return 0;
}



主要原因在于while的循环里面多了一次输入,因为while里的scanf先让你
输入,然后才判断n>0所以多一次。 前后改成这样while(n>0&&scanf("%d\n",&m))就哦了。

热点排行
Bad Request.