我是系统分析师&开发人员学生,我正在尝试编写代码但是我被卡住了,结构和函数很容易理解,但是同时使用它们......是一个废话......
我做错了什么?
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
typedef struct mercearia
{
char mercadoria[20];
int quantidade;
int valor;
} mercearia;
void EstruturaCadastro(struct mercearia *m)
{
int i;
for(i = 0; i < 5; i++)
{
printf("\n");
setbuf(NULL, stdin);
printf("Insira nome do produto a cadastrar: ");
scanf("%s", &(*m)[i].mercadoria);
setbuf(NULL, stdin);
printf("Insira a quantidade do produto: ");
scanf("%i", &(*m)[i].quantidade);
setbuf(NULL, stdin);
printf("Insira o valor do produto: R$ ");
scanf("%i", &(*m)[i].valor);
}
}
int main(void)
{
setlocale(LC_ALL, "");
struct mercearia m[5];
EstruturaCadastro(&m);
}
它给了我巨大的错误列表。然后我写了相同的代码,但没有创建结构数组,代码完美。我错过了一些东西。
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
typedef struct mercearia
{
char mercadoria[20];
int quantidade;
int valor;
} mercearia;
void EstruturaCadastro(struct mercearia *x)
{
printf("\n");
printf("Insira nome do produto: ");
scanf("%s", &(*x).mercadoria);setbuf(NULL, stdin);
printf("Insira a quantidade do produto: ");
scanf("%i", &(*x).quantidade);setbuf(NULL, stdin);
printf("Insira o valor do produto: R$ ");
scanf("%i", &(*x).valor);setbuf(NULL, stdin);
}
int main(void)
{
setlocale(LC_ALL, "");
struct mercearia produto;
EstruturaCadastro(&produto);
}
答案 0 :(得分:1)
在尝试第一个(更难)
之前,您需要了解第二个例子(简单)void EstruturaCadastro(struct mercearia *x)
{
printf("\n");
printf("Insira nome do produto: ");
scanf("%s", x->mercadoria);
printf("Insira a quantidade do produto: ");
scanf("%i", &x->quantidade);
printf("Insira o valor do produto: R$ ");
scanf("%i", &x->valor);
}
无需setbuf()
调用,按键时刷新标准符
完成此操作后,您可以在第一个示例中更改为m[i]->mercadoria
等。
答案 1 :(得分:0)
您的原始功能有各种各样的错误。你向它传递了一个指向struct mercearia
的指针,这对于传入你的数组来说很好。在函数内部,您可以像对待数组一样处理m
,因此例如m[0].valor
是您访问第一个元素的valor
值的方式。
这意味着您对scanf
的各种来电变为
scanf("%s", m[i].mercadoria);
scanf("%i", &m[i].quantidade);
scanf("%i", &m[i].valor);
注意,对于不同于其他数据类型的字符串读取,您不需要将指针传递给字符串,因此您不需要前面的&
。