【问题标题】:how do I input values into a structure using pointers?如何使用指针将值输入到结构中?
【发布时间】:2014-11-16 09:09:53
【问题描述】:

我正在编写的这个程序有一个小问题,我正在尝试使用指针将数据输入到结构中,但编译器只是给我一个错误说明:“取消引用指向不完整类型的指针”

程序的功能很简单: 使用函数通过指针将数据输入结构的程序

代码如下: 主函数只是调用输入函数并将结构指针作为参数传递

void input(struct test *ptr)
{
printf("Enter: \n");
fflush(stdin);
scanf("%s",&ptr->entry);

}

void print(struct test *ptr)
{

}

int main()
{
    int counter;
    struct test
    {
        char entry[20];

    }p[4];
    struct test *ptr=p;
    ptr=&p;

    for(counter=0;counter<=4;counter++)
        {
            input(ptr);
            ptr++;
        }
    return 1;
}

打印功能还是空的。

【问题讨论】:

  • "打印功能还是空的。"是的。我们不会为您编写代码。您的具体问题是什么?
  • 而且您不想要 p 数组末尾的一个。
  • "编译器只是给我一个错误说明:"取消引用指向不完整类型的指针""在哪一行?帮助我们帮助您...
  • 我编辑了原始帖子,陈述了我的问题,但无论如何我的问题是如何使用指针将值输入到我的结构中? "scanf("%c",&ptr->entry);"似乎会导致错误。
  • @Slaine scanf("%s",ptr-&gt;entry);

标签: c pointers structure function-pointers


【解决方案1】:

第一个问题是struct test 仅在您的“主”函数中定义,inputprint 无法访问。在所有函数之外定义它。

然后你想扫描一个字符串,而不是一个字符,所以你需要"%s"。实际上是“%19s”,所以如果输入太长,你不会离开条目数组的末尾(向@BLUEPIXY 致敬)

ptr-&gt;entry 是您要放置字符串的地址,因此您不需要&amp;ptr-&gt;entry 而需要ptr-&gt;entry

您在main 中分配给ptr 两次。第二个是错误的(同样,p 是结构数组的地址,所以你在初始化时就正确了。&amp;p 的分配是错误的。

最后,您的 for 循环执行 5 次 (0,1,2,3,4),最后一次迭代访问您的 4 元素 p 数组末尾的一次

总而言之:

#include <stdio.h>

struct test
{
    char entry[20];
};

void input(struct test *ptr)
{
    printf("Enter: \n");
    fflush(stdin);
    scanf("%19s", ptr->entry);
}

void print(struct test *ptr)
{

}

int main()
{
    int counter;
    struct test p[4];
    struct test *ptr=p;

    for(counter=0;counter<4;counter++)
    {
        input(ptr);
        ptr++;
    }
    return 1;
}

【讨论】:

  • 糟糕,实际上错过了更改%c。谢谢
【解决方案2】:

不需要使用&amp; 扫描字符串。 应使用%s 而不是%c 扫描字符串。 填满你的空印。最好将您的函数名称 print 更改为其他名称。

检查以下代码:

#include <stdio.h>
#include <string.h>
    struct test
    {
        char entry[20];

    }p[4];

void input(struct test *ptr)
{
printf("Enter: \n");
scanf("%s",ptr->entry);
return;
}

void print(struct test *ptr)
{
int i;
for(i=0;i<4;i++)
{
    printf("%s\n",ptr[i].entry);
}
return;
}
int main()
{
    int counter;

    struct test *ptr=p;

    for(counter=0;counter<4;counter++)
        {
            input(ptr);
            ptr++;
        }
        print(p);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2020-08-08
    • 2011-01-20
    • 2010-09-25
    相关资源
    最近更新 更多