Ich bekomme einen segfault, wenn ich in meine verkettete Liste einfügen und ich kann es einfach nicht finden. An einem Punkt würde es mir erlauben, bis zu drei Knoten einzufügen, aber jetzt segmentiert es nach der ersten Einfügung und durchläuft nicht die while-Schleife und für Anweisungen. Scanne ich die Informationen falsch in das Array ein? Ich muss in der Lage sein, mehrere Eingabewerte aufzunehmen, weil ich schließlich Knoten basierend auf String- und Zählwerten, die vom Benutzer angegeben werden, löschen und drucken kann.Linkeds Liste mit Strings
Eingabe vom Benutzer würde wie folgt aussehen:
ins books
ins table
prl // to print list
del v1 v5 //to delete nodes with count values that fall between 1 and 5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char *symbol;// each Node contains a array 'symbol'
int count; // each Node contains a symbol counter
struct node *next;
};// end struct
void insert(struct node**,struct node **, char *str);
void printL(struct node *);
int main()
{
struct node *head;
struct node *tail;
head = NULL;
tail = NULL;
//Declare variables needed for input and output
char input[15]={0};
char cmd [4]={0};
char info[11] = {0};
int *val={0};
//possible command strings
char ins[]= "ins";
char prl[]= "prl";
char end[]= "end";
// Prompt user for command and corresponding input
puts("Please enter a command with corresponding value(s) where necessary");
scanf("%s%s%s", cmd,info, val);
//While command is not 'end':
while (strcmp(end,cmd) != 0){
// Read value(s) for the command, in necessary
if (strcmp(ins,cmd)==0)
{
insert(&head, &tail, info);
}
if (strcmp(prl, cmd)==0)
{
printL(head);
}
puts("Please enter your next command and value where necessary:");
scanf("%s%s%s", cmd,info, val);
}
return 0;
}
void insert(struct node **h, struct node **t, char * str)
{
struct node *temp;
if ((temp=(struct node *)malloc(sizeof(struct node)))==NULL)
{
printf("Memory allocation or node failed.\n");
exit(1);
}
strcpy(temp->symbol,str);
temp->count= 1;
temp->next=NULL;
if(*h == NULL)
{
*h=*t=temp;
}
else
{
(*t)->next = temp;
*t = (*t)->next;
}
}
void printL(struct node *h)
{
// NodePtr hPtr = NULL;
//hPtr=malloc(sizeof(Node));
//hPtr=head;
if(h == NULL){
puts("The list is empty");
}
else{
while(h != NULL){
printf("%s", h->symbol);
printf("\t %d", h->count);
h= h->next;
}
printf("\n");
}
}
'val' nicht zugeordnet' int' Zeiger, aber Sie versuchen, zu 'scanf' hinein eine Schnur ... –