X



C言語なら俺に聞け 148
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (アウアウカー Sacf-slpW)垢版2018/09/19(水) 17:56:50.83ID:XSTNMnDwa
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 147
http://mevius.5ch.net/test/read.cgi/tech/1534430162/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0006デフォルトの名無しさん (アウアウカー Saeb-slpW)垢版2018/09/19(水) 21:01:51.92ID:zcXFtBV7a
opaque音頭
0009デフォルトの名無しさん (アウアウカー Saeb-slpW)垢版2018/09/19(水) 21:46:14.52ID:zcXFtBV7a
透けるトン
0010デフォルトの名無しさん (ワッチョイ 9780-9b2l)垢版2018/09/19(水) 22:44:21.77ID:xLP4ypV20
おおきいおっぱいを占領する
0011デフォルトの名無しさん (アウアウカー Sae9-kke4)垢版2018/09/20(木) 12:33:56.62ID:irJ5n1n9a
おっぱいがキューイングされてる状態だろ
0012デフォルトの名無しさん (アウアウカー Sae9-rLjT)垢版2018/09/20(木) 12:46:40.86ID:rEtRtbV+a
キューは口を尖らせて発音
0018デフォルトの名無しさん (ワッチョイ 6976-Syfo)垢版2018/09/21(金) 17:35:46.83ID:r4ObfaEn0
c言語本格入門のリスト構造(単方向リスト)が理解できず困っています。
書籍には図を書けば理解できるとあり、ソースにprintf関数をところどころに入れて、ポインタの動きを追いかけていたのですが、余計こんがらがってしまいます。
他のサイトや他者の質問が掲載された掲示板なども参考にしましたが、さっぱりわかりません。
図を描いても理解には繋がりません。
プログラムは250行くらいあり、掲載出来る様なサイトがあれば誘導お願いします。

ポインタの*ptr_now、*ptr_before、*ptr_new の動きと役割が理解できれば、前に進めると思うのですが、知恵を貸して下さい。
0022デフォルトの名無しさん (ブーイモ MM05-Nssn)垢版2018/09/21(金) 18:39:31.34ID:FeY49FdEM
>>18
とある位置に新しいデータを挿入するサンプルコードなんじゃないか?

newが新たに挿入しようとするデータのアドレス、
nowが挿入先の直後のデータのアドレス、
beforeが挿入先の直前のデータのアドレス。
(単方向リストへのデータ挿入は新しいデータを挿入する位置の前後のデータのアドレスが必要のため)


ところでnowってスケジュールリストか何かなのか
0023デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/21(金) 18:44:04.65ID:M1mNaNG00
>>18
努力しているようだが、色々おかしい。

> ソースにprintf関数をところどころに入れて、ポインタの動きを追いかけていたのですが
ポインタの『動き』ではなく、ポインタの『中身』を追いかけろ。
ポインタは自然言語で言う「ポイントする(指し示す)もの」でしかないから、
正しい物を示しているかどうかだけであって、
それはポインタ自体ではなく、『中身』を見ないと判定出来ない。

> 単方向リスト
> *ptr_now、*ptr_before、*ptr_new
単方向リストならポインタは一つだけだし、
> now と before は作業用領域で、newは名前とかを格納しています。
名前の付け方が絶望的におかしい。
多分君の理解が間違っているだけだと思うが、
もしその理解が正しくて、ガチでこんな名前を付けているソースなら、
その本は今すぐ捨てるべきだ。
これはソースを上げれば誰かが見てくれるだろう。
(多分>>22が当たりだろう)

当たり前だが、
1. まず、0,1,2,3... とリストに入れて、それを表示(リストアップ)出来る関数を作れ。
2. 次に、その関数を用いて、挿入等したとき、期待通りにリストアップ出来るか確認しろ。
3. それでバグっているようなら、その後でいちいちIDE等で止めてポインタの値を確認するんだよ。
多分お前はデバッグの仕方もおかしい。

ただまあ正直なところ、このレベルの初心者ならリストなんてどうせ使わないし、
スキップしても構わんぞ。いちいち全部やらなくてもいい。
そんなことより、ゲームを作りたいのならそのゲームを作る方向目指してコーディングしろ。
そのうち、ポインタ等の意味も分かってきて、今回の問題なんて自然に解決出来るようになる。
0025デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/21(金) 19:50:07.83ID:M1mNaNG00
>>22
ちなみに細かいようだが、

> (単方向リストへのデータ挿入は新しいデータを挿入する位置の前後のデータのアドレスが必要のため)
実際の所、単方向リストなら

struct List {
T value; // または T* ptr;
T* next;
};

だから、ループは now と next だけで構成しないと筋が悪いんだけどね。
ソート済みリストでデリミタがヌルポなら、

while (now->next && value <= next->value) now = next; // 同値なら挿入順

で now を確定させ、now と next の間に挿入する。
nowは「今」、newが「新」として、beforeは余計だね。
何かの説明をする為なのだろうけど、余計におかしくなってる。
(挿入するのは『nowとnext』の間であって、『beforeとnow』の間ではない)
0027デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/21(金) 19:58:44.97ID:M1mNaNG00
>>24
駄目な事を駄目だとはっきり言っただけだ。
怒られたことのないゆとりには噛みついているようにしか見えないのかもしれないが、
このレベルの駄目っぷりを駄目出ししてもらえない方が問題だろ。

これが許容出来ないのなら、コテハン制の他サイトに行けよ。
どんなアホな投稿でも優しく教えてくれるだろうさ。
ただそれが本人の為になるかどうかはまた別だが、ゆとりにはお似合いだ。

右も左も分かってない馬鹿なんだから普通にIDE使えよ。
printfデバッグなんて(IDEが有料だった昔はさておき)
今のそのレベルの初心者がやるもんじゃない。


まあしかし、お前がそういうのならお前が導いて見せろ。
出来もしないのに文句だけ言うのもゆとりの特徴だとも思うがね。
0031デフォルトの名無しさん (アウアウカー Sae9-rLjT)垢版2018/09/21(金) 22:15:10.02ID:ZlhIYDcEa
うまい釣りだ。このままじらしてじらしていつまでもソースを公開しなければこのスレは活性化して書き込みで溢れあっという間に3スレぐらい消費するだろう。流石としか言いようがない。
0033デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 00:33:04.56ID:PGp2AKzL0
低学歴知恵遅れには質問の意味が理解できない
普通に質問の内容を再現すればだいたいこうなる

typedef struct tag_aho_list_t {
  char new[0x10];
  t_aho_list_t* next;
} t_aho_list_t;

ptr_new = (t_aho_list_t*)malloc(sizeof(t_aho_list_t));
strcpy(ptr_new->name, "aho1");
ptr_before = ptr_now;
ptr_now = ptr_new;
ptr_before->next = ptr_now;

ptr_new = (t_aho_list_t*)malloc(sizeof(t_aho_list_t));
strcpy(ptr_new->name, "aho2");
ptr_before = ptr_now;
ptr_now = ptr_new;
ptr_before->next = ptr_now;
0034デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 01:01:16.23ID:16ZpsTnK0
>>33
お前も絶望的にダサいコードを書くな。
追加なら、

> ptr_before = ptr_now;
> ptr_now = ptr_new;
> ptr_before->next = ptr_now;

ではなくて、

ptr_now->next = ptr_new;
ptr_now = ptr_new;

だろ。
つか、単方向リストで before を使う時点で間違い。
0037デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 01:42:06.64ID:16ZpsTnK0
>>36
マジでIDE使え。
そして貼るときはlanguageをCにしとけ。シンタックスハイライトが変わるから。
で、どれが分からんの?

> enter
> find
> delete
> show_all
> delete_all

mainはこの際分からなくていい。
最初に理解しないといけないのは show_all だ。

ただし細かいことを言ってもキリがないが、

> void show_all(void)

なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
さらに酷いのは show_all 内でグローバル変数 address を掴んでいること。
普通は void show_all(tag_address* ta) だよ。
そうじゃないと複数のリストがあったときに使い物にならないだろ。

マジな話、このソースのレベルの本なら捨てた方がいい。
俺は大学の教材がいいと思うぞ。
(読んでないが)リストならググったら東工大とか出てきた。
http://www.is.titech.ac.jp/compview/clang/chap11.html
0040デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 01:54:37.82ID:16ZpsTnK0
>>38
マジかーと思って linux kernel のコード見たが、書いてるな。
そして K&R 見てみたら、なんとこれも書いてた。

旧来の記法なら書くのが正しくて、物によってはコンパイル通らないとかか?
とにかく、 void がクソだというのは取り下げる。


>>39
> Cだと show_all(...) と同じ意味になって何渡してもコンパイル通っちゃうからあぶない。
マジ?今まで聞いたこと無かったわ。

しかし ( ... ) と同じ意味なら例の va_list を使う糞コードになるから、
コンパイラのチェックが甘くなるとはいえ、間違って使うって事はなさそうだが。

まあとにかくありがとう。
0041デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 02:29:56.24ID:16ZpsTnK0
>>36
何度も言ってるがマジでIDE使え。
次にマジでこの本はソースがおかしいから捨てた方がいい。処理のフローがクレイジーだ。
何かおかしな規約に沿って書いているように思える。

178-205行目は、普通なら以下。

while(ptr_now != NULL && no >= ptr_now->no) {
if (no == ptr_now->no) {
if (address == ptr_now) address = ptr_now->next;
else ptr_before->next = ptr_now->next;
free(ptr_now);
return 0;
}
ptr_before = ptr_now;
ptr_now = ptr_now->next;
}
return -1;
0042デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 02:55:23.92ID:16ZpsTnK0
>>36
ちなみに一応ちゃんとポインタで書いておくと、以下な。
whileの条件は分けた方が分かりやすいか?
書き込みターゲットは一つに纏める。

int delete(int no, tag_address* ptr_now) {
tag_address** ptr_tgt = &ptr_now;
while(ptr_now != NULL) {
if (no == ptr_now->no) {
*ptr_tgt = ptr_now->next;
free(ptr_now);
return 0;
}
if (no < ptr_now->no) return -1;
ptr_tgt = &ptr_now->next;
ptr_now = ptr_now->next;
}
return -1;
}
0044デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 03:03:32.99ID:16ZpsTnK0
>>36、42の訂正版

int delete(int no, tag_address** ptr_head) {
tag_address** ptr_tgt = ptr_head;
tag_address* ptr_now = *ptr_head;
while(ptr_now != NULL) {
if (no == ptr_now->no) {
*ptr_tgt = ptr_now->next;
free(ptr_now);
return 0;
}
if (no < ptr_now->no) return -1;
ptr_tgt = &ptr_now->next;
ptr_now = ptr_now->next;
}
return -1;
}

君には余計に分かりにくくなったかもしれないけど、こんな感じ。
まあ頑張れ。
0045デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 03:13:04.00ID:16ZpsTnK0
>>36
enter関数も作りがおかしい。
25で言ったとおり、
> (挿入するのは『nowとnext』の間であって、『beforeとnow』の間ではない)
このソースは before と now の間に挿入しており、明らかに間違ってる。

マジでこの本はゴミだから捨てろ。
0046デフォルトの名無しさん (ワッチョイ 6e5b-Nssn)垢版2018/09/22(土) 03:44:08.18ID:wyOkhzEz0
まあいいんじゃね?
処理内容毎に塊を分けて上から順番に並べているのは他人にわかりやすく説明するために都合がいいのだと思う。
きっと書籍では、N行目からM行目まではこんなことをしてます、とか、塊毎に処理内容のコメントが記述されてるのではないかと思う。
0047デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 04:34:50.74ID:16ZpsTnK0
>>46
いやこれはさすがにアウトだろ。
実際部下にこのコード出されたら絶句するだろ。

178行目と194行目のヌルチェックなんてダブってるし、マジで意味無い。
頭が悪い奴が一生懸命書いたコードだぞこれは。手本にするには酷すぎる。
delete関数は筆者には難しすぎて、異常系を一つずつ外して行ってるから無駄にダブってる。
だけどこの規模でこれだと絶望的だろ。
マジでこの本は捨てた方がいい。

18が読めないのは18の技量の問題だけど、
読みやすいコードと読みにくいコードというのは実際にあって、
要するに腕前がいい奴が書いたコードは一般的に読みやすく、下手くそが書いたコードは読みにくい。
(勿論高速化等かけた場合は若干読みにくくなるが)

頭が悪いのなら、関数を分けて分割すべきであって、
breakして下に無理矢理繋げているから意味不明なコードになる。

なお高速コードは以下。
int delete(int no, tag_address** ptr_head) {
tag_address** ptr_tgt = ptr_head;
tag_address* ptr_now = *ptr_head;
while(ptr_now != NULL && no >= ptr_now->no) {
ptr_tgt = &ptr_now->next;
ptr_now = ptr_now->next;
}
if (ptr_now != NULL && no == ptr_now->no) {
*ptr_tgt = ptr_now->next;
free(ptr_now);
return 0;
} else return -1;
}
0049デフォルトの名無しさん (スプッッ Sd0a-RfHF)垢版2018/09/22(土) 08:07:18.41ID:MIXlgiXZd
C言語で
A,B,C,D,E,F,G,H,I,J,K,Lの12個のペアを、3個ずつの4つのグループに分ける場合
例えばA,BとA,CとD,Eは同じグループに入れないとして、実行時には(ADF,BCE,GHI,JKL)みたいな感じで返すプログラミングの書き方の例を教えてください
0052デフォルトの名無しさん (ワッチョイ c193-h/KU)垢版2018/09/22(土) 08:32:14.74ID:Yqnou5lg0
>>45
このソースでは「beforeとnowの間にnewを挿入」するenter()で正しく動作するね。

リストの定常状態で、各要素はメンバnoの値で昇順整列している。
ポインタnextのつなぎ換えをする時点で、
beforeのnoは新要素のnoより小さい、nowのnoは新要素のnoより大きい、

よって new->next = now, before->next = new と格納すれば
before->no < new->no < now->no の順序が維持される。
ただし境界条件(リストの端っこの処理)はここでは考えていない。


変数やメンバの命名をもう少し工夫すれば…と思うけど。
この投稿を書いててnewとnow、メンバnoで混乱してきた。
0053デフォルトの名無しさん (ワッチョイ c27c-iHci)垢版2018/09/22(土) 08:58:29.84ID:bcuOiC7Q0
リスト操作に特化した関数を作ればいいのに
リスト操作といろんな処理を混ぜ込むから見通しが悪くなってる
教育目的ならなおのこと美しく書かないといけないのに
0056デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 09:48:51.25ID:16ZpsTnK0
>>52
そりゃ糞コードでも動くだろうさ。
しかし教科書でこれはない。マジであり得ないくらい酷い。
必要のない変数を作って保持してるだろ。

走査は25に書いたとおり、(書き落とした点を修正するが)

while (now->next && value <= now->next->value) now = now->next;

でやるんだよ。そうすれば now と next だけの世界で済む。
enter()も頂けない。これは>>53の指摘通り、
int insert(tag_address* ta) と
tag_address* make_new_element(int no, char* name, char* addr)
に分けないと駄目だ。
マジでここまで酷いのはなかなか見かけないくらい酷い。
部下がこんなコード書いたら当然突き返す会社が大半だと思うぞ。

例も酷い。これは List ではなく SortedList だし、
そもそもこれをやりたいのならCではなくC++でやるべきだし。
0057デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 09:49:43.97ID:16ZpsTnK0
>>54
そこで俺叩きに転じてるのが逆に、お前が馬鹿である証拠だ。
このコードは擁護のしようがないくらい酷い。ど素人でもここまで酷いコードは書かない。
お前にはそれが分からないから俺を叩こうとしてる。

お前みたいな初心者は文法のことばかり気にするが、文法の細かいところは本当に関係ないんだよ。
俺はC++コンパイラを使っているから>>39は関係なかったし、
>>38はそうじゃないから void を書くルールになってるんだろ。
そういうもんなんだよ。
文法的に問題があるケースはルールで禁止されてるか、環境で対策されてる。

まあ俺に文法知識が欠けているのは事実としても、この本がゴミなのは揺るがない。
理由は筆者が馬鹿だから、だから、マジですぐに捨てて他の本/サイトを参考にした方がいい。
嘘だと思うのなら、この事を覚えておいて、
数年後、お前らが上達してからもう一度このコードを見直して見ろ。絶句するから。
0058デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 09:56:21.04ID:16ZpsTnK0
ちなみに余談だが K&R の良い点は、糞コードがないこと、余分な表現がないこと、なんだよ。
無駄を限界まで削ぎ落とした、極めて上質なコードが掲載されている。
筆者が頭が良く、一流のプログラマだからだ。

実際の所、入門書は総じてゴミだ。
これは入門書を書く奴は一般的に一流のプログラマではないからだ。
だから入門書のコードはマジで参考にしない方がいい。
今回のは特に。

お前らが上達すれば、このコードの酷さが分かるようになるだろうさ。
今回の顛末を覚えておいて、数年後に見直して見ろ。マジで。
0059デフォルトの名無しさん (ワッチョイ 429f-m2E0)垢版2018/09/22(土) 10:10:07.07ID:l48TeZqd0
>>57
うんそだね〜
でもどんな言い訳してもここはC言語スレだしCプラプラコンパイラと言えどCの文法書けるわけだし
初心者に偉そうに講釈垂れるならCの最 低 限の文法くらい知ってた方がいいよ
0064デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 10:42:23.23ID:16ZpsTnK0
>>61
そりゃそうだろ。
俺が文法を知らなかったことは本筋とは関係ないし、
実際、お前ら以外気にしてないだろ。
お前らは役に立つレスを全くしてないし、ただの粘着荒らしでしかない。


なお>>39、知ってるかもしれんが以下だそうな。
> C99にて廃止予定機能となった。C11でどうなったかは不明
http://d.hatena.ne.jp/eel3/20141005/1412521223
仕様に詳しい人よろしく。


「C言語本格入門」はゴミだから今すぐ捨てろ、マジで。
0067デフォルトの名無しさん (ワイモマー MM62-Y32S)垢版2018/09/22(土) 10:56:24.32ID:rjQGIIPhM
>> void show_all(void)
>
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?

以下のコード見たことありまちゅか〜?wwww

#inlcude <stdio.h>
int main(void)
{
printf("Hello World!");
return 0;
}
0068デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 11:02:28.11ID:PGp2AKzL0
こういう簡単なコードの書き方なら
喜々として低学歴知恵遅れのシロウトが喜々として一杯よってくる
0069デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 11:09:05.39ID:16ZpsTnK0
つか、粘着馬鹿共は誰も役に立つことを言えてない件。
お前らが俺に粘着する意味は何なんだ?

なお>>18、一番近いのは std:forward_list でソース例は以下だが、
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/forward_list.h
毎回思うがGNUは別の意味で読みづらいから(マクロまぶしすぎ)
今の君には無理だが、可能ならこれを読んだ方がいい。最終的な目標にしとけ。

>>37で既に示した東工大、斜め読みしたが、
1. before 関数 を使って list_add 関数を修正して p の「直後」に挿入
2. before 関数
だから明らかにこっちの方が筋がいい。
2の意味は分からないだろうが、これはコンパレーターであり、関数ポインタに繋がる。
こちらはそもそも教育の現場、やはりちゃんとしている。
こっち使った方がいいと思うぞ。


「C言語本格入門」はゴミだから今すぐ捨てろ、マジで。
0070デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 11:10:50.53ID:PGp2AKzL0
低学歴知恵遅れはこの程度のコードしか
理解できないのがよくわかるわ
0071デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 11:13:00.76ID:PGp2AKzL0
まず質問と関係ない内容で喜々として得意になってレスしてる
こういう簡単な内容ならめっちゃ元気
0072デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 11:25:44.82ID:16ZpsTnK0
ああ、そういえば一応>>18には直球で返した方がいいか?なら、

*ptr_now:今エレメント
*ptr_before:前エレメント
*ptr_new:新エレメント

であり、まんまそのままだ。
ただ、単方向リストで before は履歴が必要だから、このコードは筋が悪い。
単方向リストなら、出来る限り、

*ptr_now:今エレメント
*ptr_next:次エレメント

で構成されるべきで、この場合には履歴が要らないからより単純なコードになる。
そして東工大はそうだからそっちを参考にしろ、というわけ。


「C言語本格入門」はゴミだから今すぐ捨てろ、マジで。
0074デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 11:41:41.67ID:PGp2AKzL0
コードがどういう書かかたされてるとか
質問してるヤツは一切してないからな

コレは低学歴知恵遅れの自分が理解できてる範囲のことを
コレは低学歴知恵遅れがひたすら連騰してるだけだからな
つまりこの質問ではどうでもいいただのコードの書き方

質問してるヤツはどういう動作をして
どうデータが格納されてるかを質問してる

低学歴知恵遅れはなんでまともに日本語が読めないわけ
まともな教育とは思えないわ。。。
0075デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 11:45:02.82ID:PGp2AKzL0
(正)まともな教育を受けてるとは思えないわ。。。
(誤)まともな教育とは思えないわ。。。

つまり
まともな教育を受けてない低学歴知恵遅れが
このスレにきた初心者にえらそうにしてるわけ

わかる?
0076デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 11:47:39.15ID:16ZpsTnK0
>>73
てかマジでこれが助けになると思ってるのか?
お前もしかして18なの?

なら絶望的に頭悪いし、プログラミングなんて止めた方がいい。
そしてもしこの回答を得る為にひたすら単発で煽っていたのなら、マジでウザイから止めろ。


「C言語本格入門」はゴミだから今すぐ捨てろ、マジで。


>>74
ならお前が回答してやれよw
お前も回答出来ただろうし、お前はそれが役に立つと思ってたんだろ。
0077デフォルトの名無しさん (フリッテル MMd6-l/4I)垢版2018/09/22(土) 11:51:25.42ID:N6pdG9BDM
よくわからんけどその本の後の方の章でそのコードを改良して双方向リストの説明でもしてるんじゃないの?
入門書とかだとよく前の章のコードの説明を元に段階的に説明していく場合があるけど
0080デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 11:57:50.23ID:16ZpsTnK0
>>77
双方向リストでもこの意味分からん処理フローにはならないし、
関数ポインタを見据えている東工大の方が数段筋がいいよ。


「C言語本格入門」はゴミだから今すぐ捨てろ、マジで。
0081デフォルトの名無しさん (ブーイモ MMed-Nssn)垢版2018/09/22(土) 12:19:33.32ID:ZMLQwSgJM
入門書だぞ?
汎用性や高速性なんて二の次どころか入門書では不要かもしれない。
ポインタの理解も危うい段階でダブルポインタとかlist.hを提示するとか狂気の沙汰だわ。

もしもID:16ZpsTnK0が入門書を書いたらいきなりハードモードでそれこそ役に立たないから即捨て間違いないわ
0082デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 12:30:11.20ID:PGp2AKzL0
こんな簡単な質問の回答能力があるヤツはいないか
まずenter()関数をみなさい

まず一回目のenter()で動く箇所はココになる

while (ptr_now != NULL) {
  ・・・ ← ココ
}

if (address == NULL){
  ・・・ ← ココ
}

それ以外は
一回目と一回目以外、enter()では同じ
0083デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 12:31:13.43ID:PGp2AKzL0
次にココをみなさい

if (no < ptr_now->no) {
  break;
}

if (address->no > ptr_new->no){
  address = ptr_new;
printf("address(enter)=%p\n", address);
}

ココでなにやってるか
次に考えなさい
0084デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 12:40:05.82ID:PGp2AKzL0
https://ideone.com/F3xZFe
>>36のコードをCのコードの設定にしてやったから
まずenter()とshow_all()の結果をみなさい
0085デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 12:53:15.25ID:16ZpsTnK0
>>81
ならお前がまず何か役に立つ回答をしてから言えよ。
お前だって

> *ptr_now:今エレメント
> *ptr_before:前エレメント
> *ptr_new:新エレメント

は回答出来ただろうに。(何故か>>73には感謝されてるようだし)
半角君は少なくとも自分で説明しようとしている分、お前ら粘着単発馬鹿共より数段ましだぜ。

ダブルポインタ云々ではなく、18はまず、
1. リスト構造自体を理解出来ていない
2. 多分ポインタも怪しい
3. そもそも全くプログラムが追えてない
だから、IDEで全関数の頭にブレークポイントで気が済むまでステップ実行させるべきだろ。
printfデバッグなんて何でこいつがやる必要があるんだ?
このレベルの入門書ならIDEの使い方から教えるべきだろ。

そして教科書のコードはそれとなしに汎用性があるコードであるべきなのさ。
東工大はこれを満たしてる。この本は全然駄目だ。その違いだよ。
勿論東工大は最初からEcilpse + CDTだ。
http://www.is.titech.ac.jp/compview/clang/chap1.html


「C言語本格入門」はゴミだから今すぐ捨てろ、マジで。


ただマジな話、18はプログラミングは全く駄目なタイプだと思うぞ。
数学の素養/素質がない奴は、努力しても上達しない。
プログラミングは暗記で対応出来るものではないから。
プログラミング自体を止めた方がいいと思うよ。マジで。
0086デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 12:59:10.11ID:PGp2AKzL0
printfで十分わかるからな
IDEは低学歴知恵遅れに必要
0087デフォルトの名無しさん (ワイモマー MM62-Y32S)垢版2018/09/22(土) 12:59:52.28ID:rjQGIIPhM
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ? 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
0088デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 13:02:56.96ID:PGp2AKzL0
むしろ
ID:16ZpsTnK0 ← コイツ
が一番プログラミングに向いてない

その自覚がない
しかも相当自分の頭の悪さの自覚がない
致命的
0090デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 13:10:24.37ID:PGp2AKzL0
そもそもデバッグライトは
プロのプログラミングの世界では重要な技術要件だからな

問題が発生したとき
速やかに問題点の発見ができるようにする助けになるのが
デバッグライト

問題が発生したとき
まずデバッグモードでコンパイルしてデバッグライトの出力して
なぜ問題が発生しているか原因をすみやかに発見する
幾重にも重なった巨大なシステムになるほどデバッグライトの出力は重要になる

役に立つわかりやすい適切なデバッグライトを書けるか書けないかで
だいたいそいつのオツムの程度が分かる
0093デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 13:16:47.33ID:PGp2AKzL0
さらにいえば低学歴知恵遅れに作らせると
一切ログが出力されない知恵遅れなシステムになる

エラーとしか出力されない
もしくはエラーが発生してハズなのに正常終了して
停止せずに次の処理にいってしまう
0095デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 13:24:22.34ID:PGp2AKzL0
オレの説明はカンペキだからな
0096デフォルトの名無しさん (ワッチョイ f94f-yqSl)垢版2018/09/22(土) 13:28:52.60ID:16ZpsTnK0
一応東工大の全部読んだぞ。
俺は東工大の教材の方がずいぶんましだと思うが。
概ね初心者向けによく書けてる。(当たり前だが)

> int main() {
> struct schedule* list = NULL;
> list = list_add(list, 2009, 1, 1, 0, "元旦");

毎回書き戻すこのインタフェースについては若干検討の余地ありだけども、
ダブルポインタも難しいというのならこれでも致し方無しか。
ただこれだとインミュータブルの言語では複数ヶ所から使用出来なくなるから、
やはりオブジェクト指向で list->add() と書く癖を付けた方がいいし、
リストなんて使いたければ素直にC++使えってことだと思うけどね。


「C言語本格入門」はゴミだから今すぐ捨てろ、マジで。


まあ>>36のコードのゴミっぷりが分からないうちは大口叩くのは止めとけ。
そしてこれを覚えておいて、数年後に見直してみろ。
俺が何言ってたか分かるから。

>>91
ファンではないぞ。偶々ググったらヒットしただけ。
ただ、概ね大学の講義資料は良く出来てるよ。
これまでも、他大学を含めて何度もURL貼ったことがある。
(良く出来ているのが検索上位に来るだけかもしれないが、
それでもそれを有り難く利用させてもらえばいい)
0097デフォルトの名無しさん (ブーイモ MMed-Nssn)垢版2018/09/22(土) 13:29:39.28ID:c//Edh7FM
>>85
えー、あなたより先にそれ答えたけど。
単発idはnvno業者のせいなんで文句言われても困る。

ちょっとポインタで躓いたくらいでやめたほうがいいとかどんだけハードル高いんだよ。
あなたは下っ端が向いてそうだから間違っても後輩の教育係にはならんようにな。
0098デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 13:30:53.14ID:PGp2AKzL0
まずオマエの場合、
自分がゴミでクズの低知能の低学歴知恵遅れの自覚がない
そこが問題

講義用のプリント読んでもその程度だからな
0100デフォルトの名無しさん (ワッチョイ c980-yqSl)垢版2018/09/22(土) 13:33:54.35ID:PGp2AKzL0
低学歴知恵遅れがなにも理解できてないのに
分かったつもりになれる

そういう意味で東工大のプリントは優秀
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況