-
關於堆疊
使用堆疊,題目為依序輸入name,age,salary最多為五筆超過顯示stack full,沒有資料顯示empty
我寫ㄉ程式大約如下,但是我輸入name取出時都會顯示亂碼,有人可以幫我改改程式ㄇ??~~謝謝
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define max_size 5
char mystack[max_size];
int mytop=-1;
struct person {
char name[20];
int age;
float salary;
};
struct person x;
void add(int *top,char value)
{
if (*top>=max_size-1) {
printf("stack full");
return;
}
mystack[++*top]=value;
}
char delete1(int *tt)
{
if(*tt==-1) {
printf("stack empty");
return 0;
}
return mystack[(*tt)--];
}
void main()
{
char sel;
char item;
char ch;
clrscr();
for(;;) {
printf("\n(a)add (b)delete (c)quit");
sel=getche();
switch (sel) {
case ''a'':
printf("\ninput name:");
gets(&x.name);
add(&mytop,x.name);
break;
case ''b'':
ch=delete1(&mytop);
printf("\noutput data is:%s\n",ch);
break;
case ''c'':
exit(0);
break;
}
}
}
-
試試看這樣.. 可以符合你想做到的功能.
but~ stack 不是這樣動作的, 打從一開始你的程式流程就不對了~
[CODE]
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define max_size 5
char *mystack[max_size];
int mytop=-1;
struct person {
char name[20];
int age;
float salary;
};
struct person x;
void add(int *top,char *value)
{
if (*top>=max_size-1) {
printf("\nstack full");
return;
}
(*top)++;
mystack[*top] = new char[strlen(value)+1];
strcpy(mystack[*top], value);
}
char* delete1(int *tt)
{
if(*tt==-1) {
printf("\nstack empty");
return 0;
}
printf("\noutput data is:%s\n", mystack[*tt]);
delete [] mystack[*tt];
return mystack[(*tt)--];
}
void main()
{
char sel;
char item;
clrscr();
for( ; ; ) {
printf("\n(a)add (b)delete (c)quit:");
sel=getche();
switch (sel) {
case 'a':
printf("\ninput name:");
gets(x.name);
add(&mytop,x.name);
break;
case 'b':
delete1(&mytop);
break;
case 'c':
exit(0);
break;
}
}
}
[/CODE]
-
[QUOTE][i]最初由 xbug 發表[/i]
[B]試試看這樣.. 可以符合你想做到的功能.
but~ stack 不是這樣動作的, 打從一開始你的程式流程就不對了~
[CODE]
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define ... [/B][/QUOTE]
謝謝你
不過我還要同時輸入年紀跟薪水
請問該如何加進去ㄋ??
-
謝謝你
不過我還要同時輸入年紀跟薪水
請問該如何加進去ㄋ??