• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:終了条件Ctrl+zについて,結果表示ついて(C言語))

終了条件Ctrl+zについて,結果表示ついて(C言語)

このQ&Aのポイント
  • 終了条件Ctrl+zについて,結果表示ついて(C言語)というセンセーショナルなタイトルを生成しました。
  • C言語のプログラムで、逆順につながったリストを作成する問題に取り組んでいます。しかし、終了条件のCtrl+zがうまく機能しておらず、入力時にも問題があります。また、変数の増減が制限されています。解決策を教えてください。
  • C言語のプログラムで逆順につながったリストを作成する問題に取り組んでいます。Ctrl+zによる終了条件が機能せず、入力時の並列化もうまくできません。また、変数の増減が制限されています。解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • DT200
  • ベストアンサー率38% (63/164)
回答No.1

先ほど回答しようとしたところ締め切られていたのでここで改めて。 データを1行で入力しなければならない縛りが解けたみたいですね。 #include<stdio.h> #include<malloc.h> #include <unistd.h> #include <string.h> struct tfield{ char name[20]; char tel[20]; struct tfield *pointer; }; struct tfield *talloc(void); int main(void) { struct tfield *head,*p; char buffer[BUFSIZ]; head=NULL; while(1){ p=talloc(); if( p == NULL ){ printf( "メモリを確保できません。\n" ); _exit( 0 ); } printf( "name? " ); if( scanf( "%s", buffer ) == EOF ){ /* Ctrl+zだとscanfはEOFを返すので、このルートを通りループを抜ける */ /* 質問者はここで構造体へデータをいれようとしていますが、それはダメ */ free( p ); /* 使わないのでメモリを開放 */ break; } strcpy(p->name, buffer); printf( "tel? " ); if( scanf( "%s", buffer ) == EOF ){ /* nameと同じ */ free( p ); break; } strcpy(p->tel, buffer ); p->pointer = head; head = p; } printf( "\n" ); if( head != NULL ){ p=head; while( p != NULL ){ printf("%6s %s\n",p->name,p->tel); p=p->pointer; } /* 確保したメモリはきちんと開放する */ do{ p = head->pointer; free( head ); head = p; } while( head != NULL ); } return 0; } struct tfield *talloc(void) /*記憶領域の取得*/ { return (struct tfield *)malloc(sizeof(struct tfield)); }

関連するQ&A