注:めんどくさいのでかなり略されています。原文参照
スタックを作りなさい。1~10の値が入力されたら保持し、0が入力されたら、1つ出力しなさい。なお、データがないのに出力を要求されることはなく、1~10の数は二度入力されることはない。
入力データはカレントフォルダの016.datにあるものとする。
1~10
0~10
0~10
...
0~10
1~10
1~10
...
...
1~10
1
5
6
0
1
0
10
0
0
0
6
1
10
5
1
元々の問題ではすったくということを言っていなかったのですが、めんどくさいのでそういう問題と言ってしまうことにしました。解き方としては、再帰を使った方法もありますがスタンダードに行かせて貰います。
#include <stdio.h> int main(){ int tr[10],i,in; FILE *fp; fp=fopen("016.dat","r"); i = 0; while(!feof(fp)){ //\nがポイント fscanf(fp,"%d\n",&in); if(in ==0){ i--; printf("%d\n",tr[i]); }else{ tr[i++]=in; } } return 0; }
スタックはかなり基本的なデータ構造なので覚えておきましょう。