スタックを利用して入力された文字列の回文を作るプログラムを作成したら、出力されません。
例えば、「abcd」と入力したら、「abcddcba」と主著力される。
###発生している問題・エラーメッセージ
文字列かendを入力してください->this
文字列かendを入力してください->end
###該当のソースコード
C言語
1#include<stdio.h> 2#include<stdlib.h> 3#include<string.h> 4struct cell{ 5 char c; 6 struct cell *next; 7}; 8 9struct cell *stack,*listhead=NULL; 10char pop(); 11void free_stack(); 12void push(char ic[10]); 13void print_stack(); 14 15int main(void){ 16 char moji[10]; 17 while(1){ 18 printf("文字列かendを入力してください->"); 19 scanf("%s",moji); 20 21 if(strcmp(moji,"end")==0){ 22 free_stack(); 23 return 0; 24 } 25 26 27 else{ 28 while(stack!=NULL){ 29 push(moji); 30 } 31 print_stack(); 32 while(stack!=NULL){ 33 printf("%c",pop()); 34 print_stack(); 35 } 36 37 } 38 } 39} 40 41char pop(){ 42 char popdata; 43 popdata=listhead->c; 44 stack = listhead; 45 listhead = listhead->next; 46 free(stack); 47 return popdata; 48} 49void free_stack(){ 50 if(listhead!=NULL) 51 free(stack); 52} 53void push(char ic[10]){ 54 stack = (struct cell *)malloc(sizeof(struct cell)); 55 stack->c=ic[0]; 56 stack->next =listhead; 57 listhead = stack; 58} 59void print_stack(){ 60 stack = listhead; 61 while(stack!=NULL){ 62 printf("->%c",stack->c); 63 stack = stack->next; 64 } 65 printf("\n"); 66} 67
###試したこと
forループで回す
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
while(stack != NULL)
だと、stackがNULLの間は入れないのでpushされずに表示されないのでは?
やりたいことについて編集しました
文字列かendを入力してください->abcd \n
abcddcba \n
文字列かendを入力してください-> \n
という結果がほしいのでしょうか?
そうです!それです!
配列使った方がいいんでしょうか
固定長配列で良いならその方が作りやすい、可変長への対応は少し高度なので、いきなり試すようなものではないよ。そもそも回文を作るだけならば入力文字列を出力後、逆順に出力すれば良いだけ。練習用の課題としてみるならば可変長の対応の方がずっと高度なので、慣れてからの方が良いよ。

回答3件
あなたの回答
tips
プレビュー