scanf不会全部输入

时间:2015-03-01 08:36:00

标签: c scanf

我应该执行一个分配结构人员N字节内存的项目 并扫描f每个人的名字initial_money和一些其他变量 当我运行代码时,对我来说问题是它在接受输入过程的某个时刻终止,我不知道为什么 昨天在代码部队竞赛中我遇到了这个问题

    #include <stdio.h>
#include <stdlib.h>

struct person
{
    char name[15];
    int initial_money;
    int g;
    int final_money;
    int money;

};

int main()
{

    int NP,i,j;
    char target1[15];
    scanf("%d",&NP);
    struct person *p=malloc(NP*sizeof(struct person));
    for(i=0;i<NP;i++)
    {
        scanf("%s",(p+i)->name);
    }
    for(i=0;i<NP;i++)
    {

        scanf("%s",target1);

        for(j=0;j<NP;j++)
        {
            if((p+j)->name==target1)
            {
                scanf("%d%d",(p+j)->initial_money,(p+j)->g);
                (p+j)->final_money=(p+j)->initial_money%(p+j)->g;
            }
        }
    }

    for(i=0;i<NP;i++)
    {

        printf("%s %d %d %d",(p+i)->name,(p+i)->initial_money,(p+i)->g,(p+i)->final_money);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

scanf函数需要指向输入值的指针。 这一行:

scanf("%d%d",(p+j)->initial_money,(p+j)->g);

应该是:

scanf("%d %d",&(p+j)->initial_money,&(p+j)->g);

比较字符串时,您通常无法直接比较指针:

 if((p+j)->name==target1)
应该是:

 if(strcmp((p+j)->name, target1) == 0)