分配需要使用函数将数据输入结构
typedef struct AC {
char code[4];
double cost;
unsigned day;
} AC;
到目前为止,我的功能是
int main(){
AC *ac;
input(&ac);
}
void input(AC * ac)
{
printf_s("Input code (3 characters), cost, and day (0 = Sun 6 = Sat) separated by spaces: \n");
gets(ac->code);
printf_s("\nCode: %s\n", ac->code);
scanf_s(" %lf", ac->cost);
printf_s("\nCost: %.2lf\n", ac->cost);
scanf_s(" %i", ac->day);
printf_s("\nDay: %i\n", ac->day);
}
机场代码的获取工作正常,但是成本和日期的扫描似乎没有做任何事情;使用断点,似乎函数不会将值scanf放入结构中。相反,在该部分完成后,成本只是垃圾代码。
不要担心错误检查或其他任何事情,我只是对如何使函数正确获取输入值并将它们放在结构中感兴趣。
答案 0 :(得分:2)
你到处都有未定义的行为。问题是您没有填充AC
结构的实际空间。这是一个简单的改变。将AC *ac;
替换为AC ac;
。这会将ac
从指向具有后备内存的实际结构的指针更改。
答案 1 :(得分:1)
使用& 。
像scanf_s(" %i", &ac->day)
;
字符串是字符数组(char *或char [])所以它不需要&amp ;.但是非阵列需要它。
此外,您应该声明AC ac;
(正如Michael Arbers先指出的那样)然后在调用函数调用时传递地址( &ac)
。那是因为你传递地址并声明函数指针指向AC(AC * ac)。
在C语言中,当您声明地址变量(指针)时,使用*。获取您使用的地址时&