我正在使用以下代码,但它显示错误:在* token之前的预期构造函数,析构函数或类型转换。 它显示了函数原型和函数声明行中的错误。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
node *insert(node *head); // the compiler is showing error here
main()
{
int dat;
char x,ch;
struct node_type
{
int data;
node_type *next;
};
typedef struct node_type node;
// node *head;
node *temp;
// head= NULL;
temp=NULL;
printf("do u wanna enter a new node? \n");
scanf("%c", &x);
if (x=='y' or x=='Y')
{
temp=(node *)malloc(sizeof(node));
printf("enter the data: \n");
scanf("%d ", &dat);
temp->data= dat;
temp->next = NULL;
}
printf("do u want to insert another element?\n");
scanf("%c ", &ch);
if( ch=='y' or ch=='Y')
{
insert(*temp);
}
getch();
}
node *insert(node *temp)
{
int dat;
char ch;
node *new;
new=(node *)malloc(sizeof(node));
printf("enter the data: ");
scanf(" %d ", &dat);
new->data=dat;
new->next=temp;
temp=new;
printf("do u want to insert another element?\n");
scanf("%c ", &ch);
if (ch == 'y' or ch == 'Y')
{
insert(*temp);
}
else
return temp;
}
错误是什么,如何纠正?
答案 0 :(得分:1)
首先,您可以将node_type
的定义移出主函数,高于insert
函数的声明。该错误是因为编译器在第一次看到它时未知节点。所以在顶部有类似的东西:
struct node_type
{
int data;
node_type *next;
};
typedef struct node_type node;
node* insert(node *head);
这应该照顾你问的问题,但是还有一些你需要照顾的问题:
当您调用insert
时,不应取消引用该参数,因为该函数需要一个指针。例如,你应该改为:
if ( ch=='y' or ch=='Y')
{
//insert(*temp);
insert(temp);
}
在insert
中,您有一个名为node*
的{{1}},但new
实际上是一个实际上不应用于命名变量的关键字。您可以将其重命名为其他内容,它可能如下所示:
new
希望这可以让你达到可以编译和测试你的程序的程度。
答案 1 :(得分:1)
代表C
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iso646.h>
typedef struct node_type {
int data;
struct node_type *next;
} node;
node *insert(node **head);
node *new_node(void){
int dat;
node *new=(node *)malloc(sizeof(node));
printf("enter the data: ");
scanf(" %d", &dat);
new->data = dat;
new->next = NULL;
return new;
}
void print(node *np){
while(np){
printf("%d ", np->data);
np = np->next;
}
printf("\n");
}
int main(){
int dat;
char ch;
node *temp = NULL;
printf("do u wanna enter a new node? \n");
scanf("%c", &ch);
if (ch=='y' or ch=='Y') {
temp=new_node();
}
printf("do u want to insert another element?\n");
scanf(" %c", &ch);
if( ch=='y' or ch=='Y'){
insert(&temp);
}
print(temp);
getch();
return 0;
}
node *insert(node **temp){
int dat;
char ch;
node *new = new_node();
new->next=*temp;
*temp=new;
printf("do u want to insert another element?\n");
scanf(" %c", &ch);
if (ch == 'y' or ch == 'Y'){
insert(temp);
}
return *temp;
}