Почему цикл while не работает для этой программы со списком ссылок? - PullRequest
0 голосов
/ 03 июля 2018

Не могли бы вы помочь мне понять, почему цикл while не работает в следующем коде:

     #include<stdio.h>
     #include<stdlib.h>
     typedef struct node_type{
                int data;
                struct node_type *next;
    }node;

    typedef node *list;
    list head;

    void main()
    {
            list temp,new;
            head=NULL;
            int n;
            char ch;
            temp=(list) malloc(sizeof(node));
            printf("\nGive data: ");
            scanf("%d",&temp->data);
            head=temp;
            printf("\n");
            printf("Enter Data? (y/n): ");
            scanf("%c",&ch);while(getchar()!='\n');
            while(ch=='y'||ch=='Y')
            {
                    new=(list) malloc(sizeof(node));
                    printf("Give data: ");
                    scanf("%d",&new->data);while(getchar()!='\n');
                    temp->next=new;
                    temp=new;
                    printf("\nEnter more data(y/n): ");
                    scanf("%c",&ch);while(getchar()!='\n');
            }
            temp->next=NULL;
            traverse(head);
}

Вывод выглядит следующим образом: Дайте данные: 2

Введите дополнительные данные (y / n): y

2

, и программа завершается.

1 Ответ

0 голосов
/ 04 июля 2018

Вам не нужно использовать while(getchar()!='\n'); везде до scanf(). Это привело к прекращению вашей программы. Вместо этого вы можете использовать scanf("\n%c", &ch);. Также рекомендуется писать new->next = NULL; после new = (list)malloc(sizeof(node));. Кроме того, вы пропустите функцию traverse().

Попробуйте этот модифицированный код: -

#include <stdio.h>
#include <stdlib.h>
typedef struct node_type
{
        int data;
        struct node_type *next;
} node;

typedef node *list;
list head;

void traverse(node *head) // This is simple traverse function just to demonstrate code.
{
        while (head != NULL)
        {
                printf("%d  ", head->data);
                head = head->next;
        }
}
void main()
{
        list temp, new;
        head = NULL;
        int n;
        char ch;
        temp = (list)malloc(sizeof(node));
        temp->next = NULL;
        printf("\nGive data: ");
        scanf("%d", &temp->data);
        head = temp;
        printf("\n");
        printf("Enter Data? (y/n): ");
        scanf("\n%c", &ch);
        while (ch == 'y' || ch == 'Y')
        {
                new = (list)malloc(sizeof(node));
                new->next = NULL;
                printf("Give data: ");
                scanf("%d", &new->data);
                new->next = NULL;
                temp->next = new;
                temp = new;
                printf("\nEnter more data(y/n): ");
                scanf("\n%c", &ch);
        }
        temp->next = NULL;
        traverse(head);
}

Выход: -

Give data: 2

Enter Data? (y/n): y
Give data: 22

Enter more data(y/n): y
Give data: 32

Enter more data(y/n): n

 List is :  2  22  32  
...