【发布时间】:2018-05-29 18:36:16
【问题描述】:
我是系统分析师和开发人员学生,我正在尝试编写代码,但我被卡住了,结构和函数很容易理解,但是将两者一起使用......是一个......废话......
我做错了什么?
#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);
}
【问题讨论】:
-
我从不相信自己有运算符优先级,我会在这里更慷慨地使用
():&(*m)[i].mercadoria。 -
这与结构无关,而与您如何将数组传递给函数有关。要使该代码正常工作,应将参数声明为
mercearia (*m)[5]。 -
您可能需要接受指导tour。它是pittoresque。
-
您可以在
mercadoria字段中使用m[i]而不是&(*m)[i],在其他两个字段中使用&m[i]而不是&(*m)[i]。 -
或者,您可以更改函数参数而不是参数类型。在您的第一个版本中传递
m而不是&m。
标签: c function struct parameter-passing