这个程序我遇到一个小问题我正在编写,我试图使用指针将数据输入到结构中,但编译器只是给出了一个错误说明:"取消引用指向不完整的类型"
程序的功能很简单: 一个程序,它使用函数使用指针将数据输入到结构中
继承人的代码: 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;
}
打印功能仍为空。
答案 0 :(得分:1)
第一个问题是struct test
仅在“主要”功能中定义,input
或print
无法访问。在所有功能之外定义它。
然后你要扫描一个字符串,而不是一个字符,所以你需要"%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;
}