リンクリストに挿入するとsegfaultが表示され、見つからないだけです。ある時点で最大3つのノードを挿入することができますが、最初の挿入後にsegfaultを実行し、whileループとforステートメントを繰り返し実行しません。情報をアレイに正しくスキャンしていませんか?私はいくつかの入力値を取り入れることができなければなりません。最終的には、ユーザーによって与えられる文字列とカウント値に基づいてノードを削除して印刷する必要があるからです。あなたがtemp->symbol
にメモリを割り当てる必要がリンクされた文字列を使用したリスト
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'が割り当てられていない' int'ポインタ、まだあなたはそれにscanf'いくつかの文字列 'しようとしています... –