Почему эта программа для создания связного списка символов и печати текущего добавленного элемента показывает вывод дважды?
И я новичок в структуре данных, поэтому хочу задать еще один вопрос. Правильно ли я сделал эту реализацию в функции Insert?
#include <stdio.h>
#include <stdlib.h>
struct Node
{
char data;
struct Node *next;
};
struct Node *Head;
void Insert(char data)
{
struct Node *temp = (struct Node *)malloc(sizeof(struct Node));
temp->data = data;
temp->next = Head;
Head = temp;
printf("Data in this Node: %c \n", temp->data);
}
int main()
{
Head=NULL;
char data;
while (1)
{
printf("Enter a Character : ");
scanf("%c", &data);
if (data == '0')
break;
Insert(data);
}
}
PS C:\Users\Dell\OneDrive\Desktop\Data Structure1\Data Structure Text Book> cd "c:\Users\Dell\OneDrive\Desktop\Data Structure1\Data Structure Text Book\Linked list\" ; if ($?) { gcc practice1.c -o practice1 } ; if ($?) { .\practice1 }
Enter a Character : q
Data in this Node: q
Enter a Character : Data in this Node:
Enter a Character : w
Data in this Node: w
Enter a Character : Data in this Node:
Enter a Character : 0
PS C:\Users\Dell\OneDrive\Desktop\Data Structure1\Data Structure Text Book\Linked list>
Это потому, что когда вы нажимаетеq<RETURN>
, с участием<RETURN>
является клавишей Return , которая помещает символ перевода строки во входной поток послеq
персонаж.
Лучше прочитать всю строку, а затем проверить, что:
char line[128];
while (fgets(line, sizeof line, stdin) != NULL)
{
Insert(line[0]);
}