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有*
符号的问题。我该如何解决这个问题?
答案 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]);
应该可以工作。