Я пытаюсь создать список ссылок. У меня есть функция, которая удаляет (удалять функцию) материал из моего списка ссылок. Но, похоже, он падает, когда я пытаюсь сравнить строки. Он работает до последнего произвольного оператора printf.несовместимые типы при назначении типа 'char [50]' из типа 'char *'
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char data[50];
struct node *next;
}*head;
int main()
{
//creates a sudo user interface
printf("1. Insert\n");
printf("2. Display\n");
printf("3 Count\n");
printf("4. Delete\n");
printf("5. Exit\n");
//create the portion that decides the user input
int userSelection = 0 ;
scanf("%d", &userSelection);
userSelect(userSelection);
return 0;
}
//this function will handle user imput
void userSelect(int num)
{
if(num == 1)
{
printf("What is your name?\n");
char userName[30];
scanf(" %s", userName);
add(userName);
} else if(num ==2) {
display();
} else if (num ==2){
//do something
} else if (num ==3){
printf("%d", count());
main();
} else if (num ==4){
char delName[50];
printf("Who do you want to remove?\n");
scanf("%s", delName);
delete(delName);
}else if (num == 5){
// return 0;
}else if (num > 6){
printf("\n52Please make sure you use a valid option!\n\n");
main();
}
}
void add(char userName[])
{
struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
strcpy(temp->data, userName);
if (head== NULL)
{
head=temp;
head->next=NULL;
}
else
{
temp->next=head;
head=temp;
}
printf("\n");
main();
}
int count()
{
struct node *n;
int c=0;
n=head;
while(n!=NULL)
{
n=n->next;
c++;
}
printf("\n");
return c;
}
void display(struct node *r)
{
r=head;
if(r==NULL)
{
return;
}
while(r!=NULL)
{
printf("%s ",r->data);
r=r->next;
}
printf("\n");
main();
}
void delete(char delName)
{
struct node *temp, *prev;
temp=head;
printf("sffs\n");
while(temp!=NULL)
{
printf("sdg\n");
if(strcmp(temp->data, delName)==0)
{
if(temp==head)
{
head=temp->next;
free(temp);
return 1;
}
else
{
prev->next=temp->next;
free(temp);
return 1;
}
}
else
{
prev=temp;
temp= temp->next;
}
}
main();
}
Я думаю, что это что-то делать с STRCMP в function..but удаления кто-нибудь есть какие-нибудь идеи?
Вы должны опубликовать остальную часть вашего кода. У вас есть «свободный», и мы не видим, где он выделяется. Также вы называете 'main'? Это не может быть прав ... – rost0031
Действительно ли 'delName' является' char' или это 'char *'? Вы должны скомпилировать все предупреждения ('gcc -Wall', если вы используете gcc). – JS1
Я назвал main только для того, чтобы назначить меню снова, как только пользователь выполнит задание, он вернется и снова предложит их. –