アプリ版:「スタンプのみでお礼する」機能のリリースについて

c言語のスタックについての質問です。
実装したのですが、標準入力の部分を
i 9 o i 8 i 7 o i 6 i 5 o i 4 o o i 3 i 2 i 1 o o e
といったように指示を一括してやるために直す方法を教えていただきたいです。

iはプッシュ
oはポップ
eは終了
sは入力時点でのスタックに格納された全体の内容表示

となってます。


#include<stdio.h>

#define MaxSize 100 //スタックサイズ
int stack[MaxSize];//スタック
int sp;//スタックポインタ
int push(int);
int pop(int *);
void show_stack();


void main(void)
{
int c,n;
while(printf("]"),(c=getchar())!=EOF){
rewind(stdin);
if(c=='i'||c=='I'){
printf("data--> ");
scanf("%d", &n); rewind(stdin);
if(push(n)==-1){
printf("スタックがいっぱいです\n");
}
}
if(c=='o'||c=='O'){
if(pop(&n)==-1)
printf("スタックは空です\n");
else
printf("stack data-->%d\n",n);

if(c=='e'||c=='E')
break;
}
if(c=='s'||c=='S')
show_stack();
}
}

int push(int n)//スタックにデータをつむプッシュ
{
if(sp<MaxSize){
++sp;
stack[sp]=n;
return 0;
}
else
return -1;
}

int pop(int *n)
{
if(sp>0){
*n=stack[sp];
sp--;
return 0;
}
else
return -1;
}

void show_stack()
{
int i;

puts("スタックの内容");
if(sp<0){
printf("スタックは空です。\n");
}
else

for(i=sp;i>=1;i--)
{
printf("%11d\n",stack[i]);
printf("\n");
}
}

A 回答 (5件)

メインを自分流に変更してみました。


void main(void) {
int c,n;
while(printf("]"),(c=getchar())!=EOF){
rewind(stdin);
if(c=='i'||c=='I'){
printf("data--> "); scanf("%d", &n); rewind(stdin);
if(push(n)==-1){ printf("スタックがいっぱいです\n"); }
}
if(c=='o'||c=='O'){
if(pop(&n)==-1) printf("スタックは空です\n");
else printf("stack data-->%d\n",n);
} // 抜けているので追加
if(c=='e'||c=='E') break;
// } 余計なので削除
if(c=='s'||c=='S') show_stack();
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます。これを参考にもう一度考えてみます。

お礼日時:2013/12/03 19:24

とりあえず


rewind(stdin);
が何なのか、調べるといいかもしれません。
    • good
    • 0

あ, push がバグってる.

    • good
    • 0

stdinをファイル入力にする事もできます(これはOSの領分ですが)



ファイルオープンしてgetcですかね。
    • good
    • 0
この回答へのお礼

その発想はありませんでした。ありがとうございます。

お礼日時:2013/12/03 19:22

現状どうしてできていないのかを考えてみてください.

    • good
    • 0
この回答へのお礼

現在も検討中です。アドバイスありがとうございます。

お礼日時:2013/12/03 19:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!