私は現在、ユーザーが入力した値をプッシュしてポップする単純なスタックメニュープログラムを作成しようとしています。 (また、スタックを印刷してください)スタックは値をCに格納しません
これはこれまでのコードです。値を挿入しようとすると(ケース1)、それはうまくいくと思いますが、スタック(ケース3)を印刷しようとすると、「スタックが空です」というメッセージが表示されます。スタックをポップしようとすると(ケース2)、クラッシュするだけです。
私の構造がオフであるか、私のポインタが正しくないかどうか分かりません。
ご協力いただきありがとうございます。私はこの乱雑なコードを非常に残念に思っています。私はまだ非常に新しいです!
#include<stdio.h>
#include<stdlib.h>
#define EMPTY 0
struct node
{
int data;
struct node *link;
};
typedef struct node Stack;
Stack* get_node()
{
Stack *tmp;
tmp = (Stack*) malloc(sizeof(Stack));
tmp->link = EMPTY;
return tmp;
}
void push(Stack **top, int data)
{
Stack *tmp;
tmp = *top;
*top = get_node();
(*top)->data = data;
(*top)->link = tmp;
}
void pop(Stack **top)
{
Stack *tmp;
int num;
if (top == EMPTY)
{
printf("Stack is Empty!");
}
else
{
tmp = *top;
printf("%d", tmp->data);
*top = tmp->link;
free(tmp);
}
}
void stack(Stack *top)
{
if (top == EMPTY)
{
printf("Stack is Empty...");
}
else
{
Stack *tmp = top;
while (tmp->link != EMPTY)
{
printf("%d", tmp->data);
tmp = tmp->link;
}
}
}
void menu(int choice)
{
Stack *top = EMPTY;
int data;
switch (choice)
{
case 1:
printf("Enter Data : ");
scanf_s("%d", &data);
push(&top, data);
break;
case 2:
pop(&top);
break;
case 3:
stack(top);
break;
case 4:
exit(1);
}
}
void main()
{
int choice;
printf("< < = M e n u = = >\n");
printf("1.push\n");
printf("2.pop\n");
printf("3.print_all\n");
printf("4.quit\n");
printf("Select : ");
while (1)
{
scanf_s("%d", &choice);
menu(choice);
}
}
"私のコードには何が問題なのですか":これはあなたの質問を表現するための非常に悪い方法です。 –
ああ申し訳ありませんが、私はこのサイトを初めて使用しています。いいタイトルを作る方法がわかりません。どうすればいいですか? – Kitty
[mcve]に問題を絞り込む必要があります。それからあなたはどのタイトルに変更するのか分かります –