Int不在struct中工作

时间:2016-05-18 14:54:49

标签: c struct int

int似乎无法与struct合作,我也不知道为什么。我做了和以前一样的事情并且它有效,但现在它没有。

这是主要代码。

int main()
{
    struct elemente {
    char *prod[20];
    int cod[20];
    int cant[20];
    int pret[20];
    };

    struct elemente a[20];
    int i,n=1,p[20];
    char *val[20];
    for(i=1;i<=n;i++){
        puts("Numele produsului");
        scanf("%s",&a[i].prod);
        puts("Codul");
        scanf("%i",&a[i].cod);
        puts("Cantitatea");
        scanf("%i",&a[i].cant);
        puts("Pretul");
        scanf("%i",&a[i].pret);
    }

它有效,我不认为它有问题。

这就是问题所在。

puts("Scrieti numele produsului");scanf("%s", &val);

    for(i=1;i<=n;i++){
        if(strcmp(val,a[i].prod)==0){
            printf("Codul produsului: %i\n", a[i].cod);
            printf("Cantitatea: %i\n", a[i].cant);
            printf("Pretul: %i\n", a[i].pret);
            //p[i]=a[i].cant*a[i].pret;
            //printf("Valoarea totala a elementelor %i\n",p[i]);
        }
    }

strcmp工作正常。但它无法找到我用scanf输入的整数。它显示了一个奇怪的代码,如&#34; 2303134&#34;。我做错了什么? 另外你可以看到我需要乘以2个函数,但CodeBlocks有*符号的问题。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题是你的struct包含每个元素的数组而不是单个数组。这也是乘法a[i].cant*a[i].pret无法编译的原因,因为您尝试将两个int [20]乘以int而不是{。}}。

由于您创建了一个struct elemente数组,因此您只需在每个数组中输入一个元素:

struct elemente {
    char prod[50];
    int cod;
    int cant;
    int pret;
};

然后,您将scanf调用更改为prod,如下所示,以确保您不会读取超出值可以处理的字符数:

scanf("%49s",a[i].prod);

此外,请务必检查scanf的返回值,以查看是否实际读入了值。

答案 1 :(得分:0)

奇怪的代码,在 printf("Codul produsului: %i\n", a[i].cod)这种情况,是因为您尝试打印a[i].cod的地址而不是整数值。

解决此问题的最简单方法是将结构修改为:

struct elemente {
   char *prod[20];
   int cod;
   int cant;
   int pret;
};

似乎没有要求在结构中分配int数组,int变量就足够了。 修改后,

p[i]=a[i].cant*a[i].pret;
printf("Valoarea totala a elementelor %i\n",p[i]);

应该可以工作。