如何使用指针将值输入到结构中?

时间:2014-11-16 09:09:53

标签: c pointers structure function-pointers

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

程序的功能很简单: 一个程序,它使用函数使用指针将数据输入到结构中

继承人的代码: main函数只调用输入函数并将结构指针作为参数传递

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;
}

打印功能仍为空。

2 个答案:

答案 0 :(得分:1)

第一个问题是struct test仅在“主要”功能中定义,inputprint无法访问。在所有功能之外定义它。

然后你要扫描一个字符串,而不是一个字符,所以你需要"%s"。实际上是“%19s”,所以如果输入太长,你就不要走出数组的末尾(帽子提示为@BLUEPIXY)

ptr->entry是您要放置字符串的地址,因此您不需要&ptr->entry,但ptr->entry

您在ptr中分配了main两次。第二个是错误的(同样,p是结构数组的地址,所以你在初始化时正确。&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;
}

答案 1 :(得分:0)

不需要使用&扫描字符串。 应使用%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;
}