Member 12627385 Ответов: 2

Когда я запускаю этот код в компиляторе C, я получаю недопустимое использование указателя в операторе while.


#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>
void push(); //push() function declaration
void pop(); //pop() function declaration
void display(); //display() function declaration
struct node
{
    int data;
    struct node *next;
};
struct node *top=NULL;
void main()
{
    int choice;
    clrscr();
    while(1)
    {
        printf("n1.Push");
        printf("n2.Pop");
        printf("n3.Display");
        printf("n4.Quit");
        printf("nEnter your choice:");
        scanf("%d",&choice);
        switch(choice)
        {
            case 1: push();
            break;
            case 2: pop();
            break;
            case 3: display();
            break;
            case 4: exit(1);
            default:printf("Invalid Choicen");
        }//end of switch
    } //end of while loop
}//end of main fuction
void push()
{
    struct node *ptr;
    int item;
    ptr=(struct node *)malloc(sizeof(struct node));
    printf("Enter a value to be pushed onto the stack: ");
    scanf("%d",&item);
    ptr->data=item;
    ptr->next=top;
    top=ptr;
}//end of push fuction
void pop()
{
    struct node *ptr,*next;
    if(top==NULL)
        printf("nStack is Empty");
    else
    {
        ptr=top;
        printf("nPopped element is : %dn",ptr->data);
        top=top->next;
        free(ptr);
    }
}//end of pop function definition
void display()
{
    struct node *p;
    p=top;
    if(top==NULL)
        printf("nStack is emptyn");
    else
    {
        printf("nStack elements:n");
        while(p!=NULL)
        {
            printf("%dn",p->data);
            p=p->next;
        }
    }
} //end of display function 


Что я уже пробовал:

меня смущает оператор while если это массив то я могу понять проблему но в связанном списке я не могу заменить указатели

2 Ответов

Рейтинг:
7

Patrice T

Цитата:
Когда я запускаю этот код в компиляторе C, я получаю недопустимое использование указателя в операторе while.
Вы уверены ,что сообщение приходит во время выполнения?
Это сообщение типично для компилятора, поэтому во время компиляции. Время компиляции-это время до того, как ваша программа начнет что-то делать.

Сообщение говорит вам, что вы не можете иметь условие, основанное на значении указателя в состоянии while, тогда не делайте этого !
Вы знаете, как сделать бесконечный цикл
while(1)

Вы знаете, как проверить значение указателя в операторе if
if(top==NULL)

Зная, что а break может выйти из цикла, изменить свой цикл не сложно.

Рекомендуемая литература:
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

См. раздел Использование break здесь:
C Tutorial &#8211; for loop, while loop, break and continue | Codingunit Programming Tutorials[^]
оператор break в C[^]


Member 12627385

Итак, вы хотите, чтобы я изменил цикл nto endless loop....на самом деле я новичок в этом языке кода, поэтому, пожалуйста, помогите мне решить его легко..что я даю понять

Patrice T

то break оператор позволяет вам существовать бесконечным циклом.
См. использование break там.
C Tutorial &#8211; for loop, while loop, break and continue | Codingunit Programming Tutorials[^]
оператор break в C[^]

Member 12627385

спасибо.... проблема решена

Patrice T

Спасибо
Вы можете принять мое решение, если оно было полезным.

Рейтинг:
15

OriginalGriff

Который while петля-у вас их две?

Используйте отладчик: поставьте точку останова в начале main функция и шаг через ваш код-посмотрите на ваш код и ваши данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Добавьте элемент в свой список и вручную проверьте правильность списка, прежде чем добавлять второй.
Затем добавьте еще один и вручную проверьте еще раз.

Извините, но мы делаем это не для вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!


Member 12627385

но я хочу знать, что структура обоих состояний while правильна или неправильна,и это простая программа стека с использованием связанного списка.

OriginalGriff

Так что же происходит, когда вы запускаете их в отладчике?

Member 12627385

аааа,......огромное спасибо ....Я проверил с помощью отладчика и решил проблему.

OriginalGriff

Пожалуйста!