У меня проблемы с диагностикой, почему моя программа не выводится правильно. Когда появится меню и вы выберете вариант 1, вам будет предложено ввести свой возраст, PUID (10-значное число), имя и вашу фамилию. Затем после этого, когда вы выбираете вариант 2 для отображения вновь введенного узла, вывод будет неполным, отсутствуют атрибуты имени и фамилии, а также неверные значения возраста и PUID.
Например, допустим, мы установили возраст 21, PUID - 0123456789, имя - Джон, а фамилию - Доу. Вот как это выглядит.
Вот результат после ввода этих значений. Опять же, обратите внимание, что введенные имя и фамилия не выводятся, а PUID неверен.
Ниже приведен код, который у меня есть. Спасибо за помощь!
#include<stdlib.h>
#include <stdio.h>
struct node
{
char firstName;
char lastName;
int age;
int PUID;
struct node *next;
};
struct node *start=NULL;
int main()
{
int choice;
while(1){
printf(" MENU\n");
printf(" 1.Create\n");
printf(" 2.Display\n");
printf(" 3.Insert at the beginning\n");
printf(" 4.Insert in the middle\n");
printf(" 5.Insert at the end\n");
printf(" 6.Delete from beginning\n");
printf(" 7.Delete from the middle\n");
printf(" 8.Delete from the end\n");
printf(" 9.Traverse\n");
printf(" 10.Find a node by index\n");
printf(" 11.Exit program\n");
printf("--------------------------------------\n");
printf("Enter your choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
create();
break;
case 2:
display();
break;
case 3:
insertFirst();
break;
case 4:
insertMiddle();
break;
case 5:
insertEnd();
break;
case 6:
deleteFront();
break;
case 7:
deleteMiddle();
break;
case 8:
deleteEnd();
break;
case 9:
traverse();
break;
// case 10:
// lookUpIndex();
// break;
case 11:
exit(0);
break;
default:
printf("Wrong Choice");
break;
}
}
return 0;
}
void create()
{
int age, PUID;
char firstName, lastName;
struct node *temp,*ptr;
temp=(struct node *)malloc(sizeof(struct node));
if (temp==NULL)
{
printf("Out of Memory Space");
exit(0);
}
printf("\nEnter the data for the first node: ");
printf("\nEnter age: ");
scanf("%d", &age);
printf("\nEnter PUID: ");
scanf("%d", &PUID);
printf("\nEnter first name: ");
scanf("%s", &firstName);
printf("\nEnter last name: ");
scanf("%s", &lastName);
temp->next=NULL;
if (start==NULL)
{
start=temp;
temp->age = age;
temp->PUID = PUID;
temp->firstName = firstName;
temp->lastName = lastName;
}
else
{
ptr=start;
while(ptr->next!=NULL)
{
ptr=ptr->next;
}
ptr->next=temp;
}
}
void display()
{
struct node *ptr;
if (start==NULL)
{
printf("List is empty");
return;
}
else
{
ptr=start;
printf("The node elements are: ");
while(ptr!=NULL)
{
printf("\nAge = %d\n", ptr->age);
printf("\nPUID = %d\n", ptr->PUID);
printf("\nFirst name = %s\n", ptr->firstName);
printf("\nLast name = %s\n", ptr->lastName);
ptr=ptr->next ;
}
}
}
void insertFirst()
{
struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
if (temp==NULL)
{
printf("nOut of Memory Space:n");
return;
}
printf("Enter the data value for the node:" );
printf("\nEnter age: ");
scanf("%d", &temp->age);
printf("\nEnter PUID: ");
scanf("%d", &temp->PUID);
printf("\nEnter first name: ");
scanf("%s", &temp->firstName);
printf("\nEnter last name: ");
scanf("%s", &temp->lastName);
temp->next =NULL;
if (start==NULL)
{
start=temp;
}
else
{
temp->next=start;
start=temp;
}
}
void insertEnd()
{
struct node *temp,*ptr;
temp=(struct node *)malloc(sizeof(struct node));
if (temp==NULL)
{
printf("nOut of Memory Space:n");
return;
}
printf("Enter the data value for the node:" );
printf("\nEnter age: ");
scanf("%d", &temp->age);
printf("\nEnter PUID: ");
scanf("%d", &temp->PUID);
printf("\nEnter first name: ");
scanf("%s", &temp->firstName);
printf("\nEnter last name: ");
scanf("%s", &temp->lastName);
temp->next =NULL;
if (start==NULL)
{
start=temp;
}
else
{
ptr=start;
while(ptr->next !=NULL)
{
ptr=ptr->next ;
}
ptr->next =temp;
}
}
void insertMiddle()
{
struct node *ptr,*temp;
int i,pos;
temp=(struct node *)malloc(sizeof(struct node));
if (temp==NULL)
{
printf("Out of Memory Space");
return;
}
printf("Enter the position for the new node to be inserted: ");
scanf("%d\n",&pos);
printf("Enter the data value of the node: ");
printf("\nEnter age: ");
scanf("%d", &temp->age);
printf("\nEnter PUID: ");
scanf("%d", &temp->PUID);
printf("\nEnter first name: ");
scanf("%s", &temp->firstName);
printf("\nEnter last name: ");
scanf("%s\n", &temp->lastName);
temp->next=NULL;
if (pos==0)
{
temp->next=start;
start=temp;
}
else
{
for(i=0,ptr=start;i<pos-1;i++) { ptr=ptr->next;
if (ptr==NULL)
{
printf("Position not found\n");
return;
}
}
temp->next =ptr->next ;
ptr->next=temp;
}
}
void deleteFront()
{
struct node *ptr;
if (ptr==NULL)
{
printf("List is Empty");
return;
}
else
{
ptr=start;
start=start->next ;
printf("\nAge deleted = %d\n", ptr->age);
printf("\nPUID deleted = %d\n", ptr->PUID);
printf("\nFirst name deleted = %s\n", ptr->firstName);
printf("\nLast name deleted = %s\n", ptr->lastName);
free(ptr);
}
}
void deleteEnd()
{
struct node *temp,*ptr;
if (start==NULL)
{
printf("List is Empty\n");
exit(0);
}
else if (start->next ==NULL)
{
ptr=start;
start=NULL;
printf("\nAge deleted = %d\n", ptr->age);
printf("\nPUID deleted = %d\n", ptr->PUID);
printf("\nFirst name deleted = %s\n", ptr->firstName);
printf("\nLast name deleted = %s\n", ptr->lastName);
free(ptr);
}
else
{
ptr=start;
while(ptr->next!=NULL)
{
temp=ptr;
ptr=ptr->next;
}
temp->next=NULL;
printf("\nAge deleted = %d\n", ptr->age);
printf("\nPUID deleted = %d\n", ptr->PUID);
printf("\nFirst name deleted = %s\n", ptr->firstName);
printf("\nLast name deleted = %s\n", ptr->lastName);
free(ptr);
}
}
void deleteMiddle()
{
int i,pos;
struct node *temp,*ptr;
if (start==NULL)
{
printf("The List is Empty\n");
exit(0);
}
else
{
printf("Enter the position of the node to be deleted: ");
scanf("%d\n",&pos);
if (pos==0)
{
ptr=start;
start=start->next ;
printf("\nAge deleted = %d\n", ptr->age);
printf("\nPUID deleted = %d\n", ptr->PUID);
printf("\nFirst name deleted = %s\n", ptr->firstName);
printf("\nLast name deleted = %s\n", ptr->lastName);
free(ptr);
}
else
{
ptr=start;
for(i=0;i<pos;i++) { temp=ptr; ptr=ptr->next ;
if (ptr==NULL)
{
printf("Position not Found\n");
return;
}
}
temp->next =ptr->next ;
printf("\nAge deleted = %d\n", ptr->age);
printf("\nPUID deleted = %d\n", ptr->PUID);
printf("\nFirst name deleted = %s\n", ptr->firstName);
printf("\nLast name deleted = %s\n", ptr->lastName);
free(ptr);
}
}
}
void traverse()
{
struct node *temp;
// Return if list is empty
if (start == NULL)
{
printf("List is empty.");
return;
}
temp = start;
while(temp != NULL)
{
printf("\nAge = %d\n", temp->age);
printf("\nPUID delet = %d\n", temp->PUID);
printf("\nFirst name deleted = %s\n", temp->firstName);
printf("\nLast name deleted = %s\n", temp->lastName); // Print data of current node
temp = temp->next; // Move to next node
}
}
Скопируйте и вставьте ввод / вывод в свой вопрос как текст вместо показа снимков экрана.
Прежде всего, функции должны быть определены до их использования.
В своей основной функции вы закомментировали case 10
. Я вижу, вы не писали функцию для lookUpIndex()
. Планируете ли вы обновить свой пост, чтобы включить в него функцию для этого, или вы хотите исключить ее из программы?
char firstName; char lastName;
Они могут хранить только один символ. Таким образом, можно сохранить только пустую строку. Все остальное приводит к переполнению буфера. Начните с определения их как массивов.