質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

1527閲覧

stackを表示させたい

murasame.

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/05/26 17:47

編集2021/05/27 01:33

前提・実現したいこと

stackが空ならpush
stackの頂上よりも大きいときはpush
stackの頂上にある整数よりも大きい、または空状態になるまでpopして、そのあとにpush
していく。
プログラム引数で読み込む

発生している問題・エラーメッセージ

実行しても、stackには一個の値しか表示されていない。
セグメントエラーが起きる。

#include<stdio.h> #include<stdlib.h> #define STACK_SIZE 10 int gStack[STACK_SIZE]; int gSNum =0; typedef double STACK_TYPE; void push(int x){ gStack[gSNum] = x; gSNum++; } int pop(void){ int x=gStack[gSNum - 1]; gSNum--; return x; } int isStackEmpty(void){ return gSNum == 0; } STACK_TYPE peek(void){ return gStack[--gSNum]; } void printStack(void){ int i; printf("STACK[ "); for(i=0;i<gSNum;i++){ printf("%d ",gStack[i]); } printf("]\n"); } int main(int argc,char*argv[]){ int i,x; for(i=1;i<argc;i++){ x = atoi(argv[i]); if(isStackEmpty()){ push(x); }else if(x>peek()){ push(x); }else{ while(x>peek() || !isStackEmpty()){ pop(); } push(x); } printStack(); } return 0; }

試したこと

実行結果を表示します
2 4 6 8 3の時、
STACK[ 2 ]
STACK[ 4 ]
STACK[ 6 ]
STACK[ 8 ]
セグメントエラー

補足情報(FW/ツールのバージョンなど)

正しい結果は以下のようになります。
STACK[ 2 ]
STACK[ 2 4 ]
STACK[ 2 4 6 ]
STACK[ 2 4 6 8 ]
STACK[ 2 3 ]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/26 22:50

C# のタグははずして、C, C++ のタグを付けてください。(C# のタグで見ている人にはノイズになり迷惑です)
y_waiwai

2021/05/27 00:30

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
dodox86

2021/05/27 01:20

(説明文まで入ってしまっているので) コードをマークダウン記法で提示する際は、具体的には以下のようにします。 ```C /* C言語のソースコード */ int main() { printf("hoge\n"); } ```
guest

回答1

0

  • peek()gSNumの値が減ってしまっている。(動作的にはpopになってしまっている)
  • 「stackの頂上にある整数よりも大きい、または空状態になるまでpopして、そのあとにpush」の条件文がおかしい。

xがstackの頂上にある整数よりも大きい、または空状態になる まで pop()」というのは
xがstackの頂上にある整数以下で、かつ空でなければpop()を繰り返す」

投稿2021/05/27 01:33

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問