使用函数将值放入C

时间:2016-11-23 04:13:18

标签: c struct

分配需要使用函数将数据输入结构

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放入结构中。相反,在该部分完成后,成本只是垃圾代码。

不要担心错误检查或其他任何事情,我只是对如何使函数正确获取输入值并将它们放在结构中感兴趣。

2 个答案:

答案 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语言中,当您声明地址变量(指针)时,使用*。获取您使用的地址时&