for(i=0;i<6;i++){ if(s[i].count==0){ strcpy(s[i].num,"s[i+1].num"); strcpy(s[i].goods,"s[i+1].goods"); strcpy(s[i].cosumer,"s[i+1].cosumer"); s[i].price=s[i+1].price; s[i].count=s[i+1].count; } } printf("请输入您需要购买的物资名称:"); scanf("%s",&v); printf("请输入您的姓名:"); scanf("%s",&x); for(i=0;i<6;i++) { if(strcmp(v,s[i].goods)==0){ if(strcmp(x,s[i].cosumer)==0){ printf("请输入您需要购买入库物资的数量:"); scanf("%d",&b); s[i].count=s[i].count+b; } else { printf("请输入您需要购买入库物资的数量:"); scanf("%d",&b); s[6].count=b; strcpy(s[6].goods,s[i].goods); s[6].price=s[i].price; strcpy(s[6].num,"007"); strcpy(s[6].cosumer,x); } } }
时间: 2024-03-03 20:50:20 浏览: 94
print("数值1:%s" % a) print("数值2:%s" % b) "加法:", end="")
这段代码有一些问题,可能会导致程序出错:
1. 在这段代码中,对结构体数组进行了循环遍历,但是在遍历的过程中,如果找到了一个空闲的位置,就将当前位置的信息用下一个位置的信息覆盖,这样会导致最后一个位置的信息丢失。应该从最后一个位置开始往前遍历,将每个位置的信息用下一个位置的信息覆盖,最后将最后一个位置清空。
2. 在使用 scanf 函数获取字符串时,应该使用 %s,而不是 &s。
3. 在使用 strcpy 函数拷贝字符串时,应该将 "s[i+1].num" 和 "s[i+1].goods" 等改为 s[i+1].num 和 s[i+1].goods 等。
4. 在为新添加的物资信息赋值时,应该将 s[6].count=b 改为 s[i].count=b,否则会将新添加的物资信息的数量赋值给最后一个位置,而不是当前位置。
5. 在比较字符串时,应该使用 strcmp 函数,而不是直接使用 ==。
下面是修改后的代码:
```
for (i = 5; i >= 0; i--) {
if (s[i].count == 0) {
strcpy(s[i].num, s[i+1].num);
strcpy(s[i].goods, s[i+1].goods);
strcpy(s[i].cosumer, s[i+1].cosumer);
s[i].price = s[i+1].price;
s[i].count = s[i+1].count;
}
}
s[5].num[0] = '\0';
s[5].goods[0] = '\0';
s[5].cosumer[0] = '\0';
s[5].price = 0;
s[5].count = 0;
printf("请输入您需要购买的物资名称:");
scanf("%s", v);
printf("请输入您的姓名:");
scanf("%s", x);
for (i = 0; i < 6; i++) {
if (strcmp(v, s[i].goods) == 0) {
if (strcmp(x, s[i].cosumer) == 0) {
printf("请输入您需要购买入库物资的数量:");
scanf("%d", &b);
s[i].count += b;
} else {
printf("请输入您需要购买入库物资的数量:");
scanf("%d", &b);
s[i+1].count = b;
strcpy(s[i+1].goods, s[i].goods);
s[i+1].price = s[i].price;
strcpy(s[i+1].num, "007");
strcpy(s[i+1].cosumer, x);
}
}
}
```
阅读全文