【发布时间】:2021-08-22 17:19:16
【问题描述】:
我编写了非常简单的代码,我曾经对此充满信心,但它不起作用。我不知道我做错了什么,或者我的 vscode 有问题。我已经为整数和字符数组分配了内存,然后我使用 scanf 来读取我想要保存在所述数组中的值。但是当我使用 printfs 进行调试时,它似乎将这些值保存为垃圾值。
对于上下文:tamanhos = 大小,应该是 p、P、g 或 G,而 quantidades 应该是整数。
#include <stdio.h>
#include <stdlib.h>
#define professores 7
int main () {
int quantidade, total, holder;
char tamanho;
total = 0;
int * quantidades = (int*)malloc(professores*sizeof(int));
char * tamanhos = (char*)malloc(professores*sizeof(char));
for (int i = 0; i < 7; i++){
scanf(" %d", &quantidade);
scanf(" %c", &tamanho);
quantidades[i] = quantidade;
tamanhos[i] = tamanho;
}
printf("%d", total);
for (int i = 0; i < 7; i++ ){
if (tamanhos[i] == "P" || tamanhos[i] == "p") {
holder = quantidades[i];
total = total + quantidades[i]*10;
}
else if (tamanhos[i] == "G" || tamanhos[i] == "g") {
total = total + quantidades[i]*16;
}
}
printf("%d\n", total);
int xprof = total / 7;
printf("%d", xprof);
free(quantidades);
free(tamanhos);
return 0;
}
【问题讨论】:
-
旁注,在循环控件和除数中使用
professores而不是硬编码7。 -
同时避免强制转换 malloc 的输出 (cf stackoverflow.com/questions/605845/…)
-
我发现你的代码有问题。您的 scanf 语句正在使用 & 运算符。结果不是 *quantidades,而是得到 **quantidades,它是指向指针的指针。删除 & 它应该可以正常工作。 & 是运算符的地址,它提供了相关项的内存地址。由于您的变量已经是指针,因此无需使用它。