c - 函数定义中的结构变量和结构成员

标签 c struct

考虑代码:

#define STRINGMAX 50

struct GIFTS {
    char whofor[STRINGMAX];
    char city[STRINGMAX];
    float weight;
    struct DIMENSIONS {
        float width;
        float length;
        float height;
    } dim;
} gifts[STRINGMAX];

以及函数定义:

void takeString(char * structvar, char structarr[], int arrpos) {
    while (scanf("%[^\n]%*c]", structarr[arrpos].structvar) != EOF) {
        scanf("%[^\n]%*c]", structarr[arrpos].structvar);
    }

}

它给了我一个错误:

request for member ‘structvar’ in something not a structure or union

在这种情况下有什么方法可以传递结构成员吗?我在这里看到了一些类似的主题,但我无法将这些想法引入我的代码中(我是一个完全的 C 初学者)。 我将不胜感激任何帮助,尤其是代码中的清晰示例。

顺便说一句。我知道我不应该使用 scanf,但这只是举例。当我知道如何在函数参数中传递结构成员时,我会做其他事情。

最佳答案

至于你的问题(据我了解),确实无法完成。考虑使 takeString 函数仅接受单个字符串参数,并将输入读取到该字符串中。

然后将正确的字符串从数组和结构传递给函数。这可以通过另一个函数来完成,该函数采用指向要读取的结构的指针(或索引)。

也许像这样的伪代码:

void takeString(char *string)
{
    scanf("...", string);
}

void takeStructure(int arrayIndex)
{
    ...
    takeString(gifts[arrayIndex].city);
    ...
}

关于c - 函数定义中的结构变量和结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41265207/

相关文章:

c - 将结构插入队列时出现段错误

c++ - 错误 : copy assignment operator not allowed in union

有人能准确解释一下这段代码中的 for 循环是如何工作的吗?

java - 小端到整数(或 BigInteger)

c - 函数的隐式声明 ‘close'

c - 将 MATLAB 代码移植到优化 C 的有效方法

c - 如何用零初始化结构的数组字段

c++ - C++类/结构中的函数相关属性

c++ - 此结构的生命周期和内存设置

c - C中一行输入不同的值