C 如何修复这些无效类型的参数(链表/结构),并确保它们不';不会再发生了吧?
所以,在大学这学期我们开始学习C。我以为我掌握了指针的概念,但现在我意识到我真的需要你的帮助。作为最后一项任务,我们需要编写一个程序,该程序能够从文件中读取一组单词,将它们全部放在一个链表中,并对其进行排序(按字母顺序和其他标准)。我目前正试图编写这部分代码,但面临着很多“无效类型参数->”之类的问题,因此我确实需要帮助了解我做错了什么,如何修复它,以及如何确保它不会因为我的无知而再次发生C 如何修复这些无效类型的参数(链表/结构),并确保它们不';不会再发生了吧?,c,pointers,struct,linked-list,C,Pointers,Struct,Linked List,所以,在大学这学期我们开始学习C。我以为我掌握了指针的概念,但现在我意识到我真的需要你的帮助。作为最后一项任务,我们需要编写一个程序,该程序能够从文件中读取一组单词,将它们全部放在一个链表中,并对其进行排序(按字母顺序和其他标准)。我目前正试图编写这部分代码,但面临着很多“无效类型参数->”之类的问题,因此我确实需要帮助了解我做错了什么,如何修复它,以及如何确保它不会因为我的无知而再次发生 typedef struct local{ char *name; struct loc
typedef struct local{
char *name;
struct local *next;
}t_local;
void printlocalsalphabetical(t_local *header_l){
createlistlocals(*header_l);
sort_alphabetical(*header_l);
t_local l = header_l->next;
while (l){
puts(l->name);
l=l->next;
}
}
void crialistlocals(t_local *header_l){
FILE *fp;
t_local *aux = header_l->next;
char line[150];
char *namel;
fp = fopen("locais.txt","r");
while (!feof(fp)){
fgets(line, 100, fp);
namel = strtok(line, '/');
aux->name = namel;
aux->next = header_l;
header_l= aux;
}
}
void sort_alphabetical(t_local *header_l){
int swapped;
t_local *ptr1;
t_local *lptr = NULL;
if (header_l == NULL)
return;
do
{
swapped = 0;
ptr1 = header_l;
while (ptr1->next != lptr)
{
if (ptr1->name > ptr1->prox->name)
{
swap(ptr1, ptr1->next);
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
}
while (swapped);
}
void swap(t_local *a, t_local *b)
{
char *temp = a->name;
a->name = b->name;
b->name = strdup(temp);
}
t_local *create_headerL(void){
t_local *list = (t_local*)malloc(sizeof(t_local));
if (list != NULL)
list->next = NULL;
return lista;
}
int main()
{
t_local *header_l = create_headerL();
printlocalsalphabetical(*header_l);
return 0;
}
我真的很难理解这一点,由于我无法理解它,我真的开始发疯了,所以非常欢迎所有和任何帮助您必须知道何时使用指针,何时不使用。(如果使用链表,通常需要指针。)还必须知道星号何时定义指针以及何时取消引用指针
void printlocalsalphabetical(t_local *header_l)
这就是定义header\u l
是指向t\u local
的指针
createlistlocals(*header_l);
sort_alphabetical(*header_l);
这些是函数调用,*header\u l
是取消引用指针的表达式,给出一个t\u local
。这两个函数都需要指向t\u local
的指针,因此请删除星号
t_local l = header_l->next;
在这里,您定义了一个t\u local
,但是header\u l->next
是指向t\u local
的指针,l
也应该是指针:更改为t\u local*l
puts(l->name);
l=l->next;
->
运算符仅当左侧是指向结构或sunion的指针时才起作用。使用
将修复语法错误,但不会修改代码。事实上,通过将l
的类型更改为t\u local*
,代码已经被修复
(我在这里只看了第一个函数,但我希望您能理解。)
所以没必要惊慌失措。保持冷静,阅读错误信息,确定是否需要指针,然后修复代码。错误消息是为了帮助您,而不是让您烦恼