質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1083閲覧

リスト構造のfappendの部分

-Yuya-

総合スコア5

C

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/07/13 12:20

編集2021/07/13 12:25

こちらのコードの//リスト領域のアドレス設定からvoid foutの前までが何をしているのかわかりません。
細かく知りたいです。
よろしくお願いします。

C言語

1//リスト 2 3#include<stdio.h> 4#include<string.h> 5#include<stdlib.h> 6 7//コマンドに対応する関数のプロトタイプ宣言 8void fappend(), fout(), fdelete(), finsert(); 9 10//構造体LISTの宣言 11struct LIST {char *pname; struct LIST *pnext; }; 12 13//グローバル変数 14struct LIST *listtop; 15 16struct LIST *pwlist, *plistnow; 17 18char *pwname; 19 20int main(void) 21{ 22 23//コマンド名を記憶する配列comary[5][7] 24char comary[5][7]={"append","out","end","delete","insert"}; 25 26//コマンドを読み込む配列com[7] 27char com[7]; 28 29 30int i; 31 32//listtopの初期値 33 listtop=NULL; 34 35 36 37COMINPUT: 38//コマンドの入力 39 printf("コマンドを入力せよ\n"); 40 scanf("%s",com); 41 42//正しいコマンドか調べる 43 for(i=0; i<=4; i++){ 44 if(strcmp(com,comary[i])==0){ 45 goto COMCASE; 46 } 47 } 48 printf("未定義コマンド\n"); 49 goto COMINPUT; 50 51//コマンドに対応する関数を呼び出す 52COMCASE: 53 switch(i){ 54 case 0: fappend(); break; 55 case 1: fout(); break; 56 case 2: printf("***プログラムの終了***\n"); return 0; 57 case 3: fdelete(); break; 58 case 4: finsert(); break; 59 default: printf("***switch文のエラー***\n"); return 0; 60 } 61 62 63 goto COMINPUT; 64} 65 66void fappend() 67{ 68//データ領域の確保 69 pwname=(char *)malloc(20); 70 if(pwname==NULL){ 71 printf("データ領域が確保できなかった\n"); 72 return; 73 } 74 75//リスト領域の確保 76 pwlist=(struct LIST *)malloc(sizeof(struct LIST)); 77 if(pwlist==NULL){ 78 printf("リスト領域が確保できなった\n"); 79//データ領域の解放 80 free(pwname); 81 return; 82 } 83 84//追加する名前をデータ領域に読み込む 85 printf("追加する名前を入力せよ\n"); 86 scanf("%s",pwname); 87 88//リスト領域のアドレス設定 89 pwlist->pname=pwname; 90 pwlist->pnext=NULL; 91 92//名前が1つも記憶されていないか調べる 93 if(listtop==NULL){ 94 listtop=pwlist; 95 return; 96 } 97 98//リストをlisttopから辿って、最後のリスト領域を見つけ、接続する 99 plistnow=listtop; 100LOOP: 101 if(plistnow->pnext==NULL){ 102 plistnow->pnext=pwlist; 103 return; 104 } 105 106 plistnow=plistnow->pnext; 107 goto LOOP; 108} 109 110void fout() 111{ 112int i=1; 113 114 if(listtop==NULL){ 115 printf("名前が1つも記憶されていない\n"); 116 return; 117 } 118 119 plistnow=listtop; 120 121LOOP: 122 printf("No.%d %s\n",i,plistnow->pname); 123 if(plistnow->pnext==NULL){ 124 return; 125 } 126 127 plistnow=plistnow->pnext; 128 i++; 129 goto LOOP; 130} 131 132void fdelete() 133{ 134 135} 136 137void finsert() 138{ 139 140}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/07/13 12:23

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
-Yuya-

2021/07/13 12:24

わかりました
-Yuya-

2021/07/13 12:26

今編集しました これで大丈夫でしょうか
jimbe

2021/07/13 12:37

goto だらけですね。アセンブラからベタ移植でもしたのでしょうか。 > 細かく知りたい 細かくコメントが書かれていますのに、何を細かく知りたいのでしょう。
-Yuya-

2021/07/13 12:44

すみません、私はコメントを見てもこのfappend関数でどうやって名前を追加するのかわからなったので質問したのですが、コメントをみればわかることなのですね、変な質問をして本当にすみませんでした。
jimbe

2021/07/13 12:59

プログラムは「何をするか」を並べたものです。ですから 「何をしているか」というのは見れば分かることです。 例えば「A=B;」とあれば「A に B の値を代入する」であることは c 言語を知っていれば分かります。 「if(A==NULL) { ~ }」であれば「A が NULLだったら ~ を実行する」ですね。 そして、これらの組み合わせで結局何をしているのかをコメントで書いてあります。「//リストをlisttopから辿って、最後のリスト領域を見つけ、接続する」などです。 さて、それでも分からないとなると、「リストを辿って」とはどういうことなのか、「リスト領域」とは?「接続」ってどういうイミ?…という、専門っぽい表現が分からないというレベルが想定されます。 いえ、もしかすると、「リスト」ってナニ? なぜそのようなものがある? というテツガク的な方向を指しているかも知れない…しかし、「コードのココからココまでを細かく知りたい」と仰る。 つまり、どうしたら解決するのかが分からないのです。
guest

回答1

0

ベストアンサー

コード内コメントに書かれたとおりのことをやってます。
リストの末尾を見つけ、そこに新たに確保した struct LIST を繋いでますね。

投稿2021/07/13 12:31

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

-Yuya-

2021/07/13 12:34

回答ありがとうございます それはリスト構造において必要なものなのですか? 必要な場合はなぜ必要か知りたいです。 なにもわからなくてすみません、よろしくお願いします。
episteme

2021/07/13 12:41 編集

知らん。 fappendが「リストの末尾に要素を追加する」であり、プログラムがその機能/処理を必要としているんでしょう。実際mainから呼ばれてるし。 そもそも不要ならなぜそこにあるん?
-Yuya-

2021/07/13 12:47

こちらのリスト構造は私が考えたのではなく別の方が考えたものです。ですがテストに出るため勉強していました。お時間を取らせてしまい本当にすみませんでした。
episteme

2021/07/13 12:48

だったらその方に訊いてください。
-Yuya-

2021/07/13 12:50

わかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問