ここから本文です

解決済みの質問

知恵コレに追加する

プログラムの拡張

suginami0201さん

プログラムの拡張

前に質問したプログラム(http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320202413)にpush-down/pop-up機能を下記にしたがって拡張したいのですが、どう書けば良いのかわかりません。どなたか教えていただけないでしょうか?
・作成したプログラムによりファイルからキー(文字)を読み込みスタックにpush-downし、スタックの内容を表示した後に、キーボードからキー(文字)を1文字ずつ入力して、スタックを操作する。
・スタック操作の仕様はキーボードからキー(文字)を1文字ずつ入力する際に、0を入力した場合、プログラム終了。1を入力した場合、1文字pop-upした後、pop-upした文字とスタックの内容を表示。その他の文字を入力した場合、その文字をpush-downした後、スタックの内容を表示。スタックの内容の表示はprint_stack_mtrx(s,top)を使用する
・push-downとpop-upはそれぞれ1つの関数で定義する。
<作成途中のプログラム>
#include<stdio.h>
#include<stdlib.h>
#define MAX 100

char s[MAX];
int slen=100;
int top;

void init_stack(){
_______top = 0;
_______return;
}

void print_stack_mtrx(char* s, int top)/* この関数はURLにあるので省略 */

int main(void)
{
_int c;
_int kc;
_int j;

____init_stack();
_______while(((c=getc(stdin))!=EOF) && top<slen){
_______/* /kyozai/mitsuda/prog2/data.dat からgetc()を用いて
_______1文字ずつ読み込みスタックsに格納.
_______ただしスタックの出入り口を示す top の値も監視すること */
_________if(top>0) {
___________for(kc=top;kc>0;kc--) {
______________s[kc] = s[kc-1];
___________}
_________}
_________s[0] = c;
_________top++;
_______}

_______print_stack_mtrx( s, top );
_______/* この関数は/kyozai/mitsuda/prog2/print_stack_mtrx.o
_______にあり,スタック(配列)の内容を表示する関数である.*/
_______scanf("%d\n", &j);
_______while(1){
_________if(j==0){
___________break;
_________}
_________else if(j==1){
_________/* 1文字pop-upした後, pop-upした文字とスタックの内容を表示 */
_________}
_________else{
_________/* その他の文字を入力した場合, その文字をpush
}
以上です。よろしくお願いします。

  • アバター

違反報告

ベストアンサーに選ばれた回答

rhinosugarさん

>前に質問したプログラム
>(http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320202413
>にpush-down/pop-up機能を下記にしたがって
>拡張したいのですが

拡張する元のプログラムを示しているのかと思ったら、
前回、質問して回答を貰ったまんまの内容で
結局「丁寧な回答ありがとうございました。とてもわかりやすかったです。」
といいながら、何も作ってなくて、「拡張したい」と
またぞろ、質問していますね。今回の
作成中のプログラムを見ると、殆どなにもできてないし
要は、プログラムの拡張ではなくて、
「仕様が拡張されたので、拡張した仕様のプログラムを
作って見せて下さい。前の仕様での回答プログラムは
なかったことにして」と言っているようなものです。
その程度の質問なら、提示された仕様は無視して、

jariten_catさん

がおっしゃってるように、通常の常識的なスタック構造
で作るのがベストです。そうすれば、自分でもなんとか
出来るでしょう。今回はプログラムでの回答をしません。

  • アバター

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
はい
いいえ

お役立ち度:お役立ち度 0点(5点満点中)0人中 0人が役に立つと評価しています。

ベストアンサー以外の回答

1件中11件)

 

jariten_catさん

pushは、配列のtop番目に値を入れてtopを1増やす
popは、配列のtop番目から値を取ってきてtopを1減らす
ではだめですか?

  • アバター

あなたにおすすめの解決済みの質問

例えば以下のようなC言語のプログラムで、30文字の文字列を入力したとき、ハングアップしてしまうのを防ぐソースを埋め込みたいのですが。 #include<stdio.h> #define max 20 int main(void) { char str[max]; printf("Input : "...
C言語で文字列とポインタについてです キーボードから文字を受け取って、それを逆順にして表示するプログラムを作りたいのです。 ただ配列に添字を使ってはいけないという縛りがありまして・・・。 作ってみたところどうもうまく...
C++です。 fgetsで文字列を読み込むとき #include<stdio.h> #include<string.h> int main(void) { char s[10]; while(fgets(s,10,stdin) != NULL){ if(strncmp(s,"abc",3) == 0){ fputs(s,stdout); } } return 0;} 上記はコマン...