質問編集履歴

2 書式の改善

murasame.

murasame. score 0

2021/05/27 10:33  投稿

stackを表示させたい
```### 前提・実現したいこと
### 前提・実現したいこと
stackが空ならpush
stackの頂上よりも大きいときはpush
stackの頂上にある整数よりも大きい、または空状態になるまでpopして、そのあとにpush
していく。
プログラム引数で読み込む
### 発生している問題・エラーメッセージ
実行しても、stackには一個の値しか表示されていない。
セグメントエラーが起きる。
---------
```c
#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 ]
  • C++

    8532 questions

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

  • C

    8995 questions

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

1 codeとタグの変更

murasame.

murasame. score 0

2021/05/27 10:14  投稿

stackを表示させたい
### 前提・実現したいこと
```### 前提・実現したいこと
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 ]
  • C#

    16119 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • C++

    8532 questions

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

  • C

    8995 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る