Мой код функции для просмотра не работает? это почему? Может ли кто-нибудь помочь мне с моей функцией взгляда?
#include<stdio.h> #include<stdlib.h> #define maxsize 10 int stack[maxsize]; int stacktop=0; void instructions(); int process(); int push(int value); int pop(); void display(); void peek(); int main() { process(); getch(); } int process() { int val; int choice; do { instructions(); printf("Enter Your Choice: "); scanf("%d",&choice); switch( choice ) { case 1: printf("\nElement to be Pushed : "); scanf("%d",&val); push(val); break; case 2: val=pop(); if(val!=-1) { printf("Popped Element : %d\n",val); } break; case 3: peek(); break; case 4: display(); break; case 5: break; } }while(choice !=5); } void instructions() { printf("Enter Your choice for the following process\n"); printf("\n[1]Push a Node on top of the list"); printf("\n[2]Pop a node off the list"); printf("\n[3]Peek The Top Node"); printf("\n[4]Display The Whole list"); printf("\n[5]Exit The Program\n"); } int push(int val) { if(stacktop<maxsize) { stack[stacktop++]=val; } else { printf("Stack is full"); } } int pop() { int a; if(stacktop>0) { a=stack[--stacktop]; return a; } } void display() { int i; i = 0; if(stacktop>0) { printf("Elements are:"); while(i<stacktop) { printf("\n%d--\n",stack[i++]); } } } void peek() { printf("%d",stacktop); }
Я знаю, что это не Проверка кода , но я подумал, что дам вам несколько советов.
Когда вы звоните scanf,всегда проверяйте результат.Например, если пользователь вводит что-то отличное от десятичного числа, ваш код в конечном итоге будет помещать неопределенное значение в переменные choice или val.Функция scanf возвращает количество элементов, которые были успешно прочитаны.Если вы запросили один элемент, а scanf возвращает 1, то вы можете положиться на значение этого объекта:
scanf
choice
val
int choice; if (scanf("%d", &choice) != 1) // handle error, can't rely on value of "choice" else // continue onwards, can rely on value of "choice"
Обычно экранирование \n идет наконец строки буквальный, а не в начале.Это более распространенный способ сделать это, но это не значит, что он всегда должен идти в конце.
\n
printf("Enter Your choice for the following process\n\n"); printf("[1]Push a Node on top of the list\n"); printf("[2]Pop a node off the list\n"); printf("[3]Peek The Top Node\n");
Для вывода простых строк рассмотрите возможность использования puts функция, которая автоматически добавляет символ новой строки для вас:
puts
puts("Enter Your choice for the following process"); puts(""); puts("[1]Push a Node on top of the list"); puts("[2]Pop a node off the list"); puts("[3]Peek The Top Node");
Ваш display метод является прекрасным примером того, когда использовать цикл for вместоwhile петля.Вообще говоря, используйте цикл for, когда вы точно знаете, сколько предметов у вас есть, и хотите перебрать каждый из них:
display
for
while
void display() { int i; puts("Elements are:"); for (i = 0; i < stacktop; i++) printf("\n%d--\n", stack[i]); }
Чтобы изменить порядок стекапросто начните сверху и идите назад:
void display() { int i; puts("Elements are:"); for (i = stacktop - 1; i >= 0; i--) printf("\n%d--\n", stack[i]); }
Это должно быть:
printf("%d\n", stack[stacktop - 1]);
Распечатать содержимое, а не размер стека?
Очевидно, что вам также необходимо проверить границы, чтобы убедиться, что вы не печатаете вне диапазона вашей стопки (когда он пуст)