C言語初心者用スレ

このエントリーをはてなブックマークに追加
1JOY
初心者の方、わからないことがあれば何でも聞きなさい。
2プリンちゃん:2001/02/11(日) 00:34
ファイルから読んだ新、旧ユーザーリストファイルを読みこんで
ソートする方法。それを構造体にぶち込んで、
お互いを比較する方法。

教え下さい。
3名無しさん@1周年:2001/02/11(日) 00:36

構造体に一気にいれて比較ってできんのか?
47743:2001/02/11(日) 01:04
構造体ポインタでふぃるたーってことか???
5名無しさん@1周年:2001/02/11(日) 01:05

ここのページに来る奴じゃ、わかんねーよ。
6名無しさん@1周年:2001/02/11(日) 01:19
2です。
質問が曖昧ですみませんでした。

struct TBL_INF{
int UID;
char PWD;
};

main()
{
tmpptr = ((struct TBLINF *)buf);

とした後、PWDをmemcmpしたのですが、PWDを指定しても
何も表示できません。
7名無しさん@1周年:2001/02/11(日) 03:26
>>6
余計わからん…
8名無しさん@1周年:2001/02/11(日) 03:31
>>6
memcmpでなくても良いんでないの?
char PWD; だんべ?

比較してる部分の式おせ〜てちょ!
9名無しさん@1周年:2001/02/11(日) 03:52
>>6

相変わらず質問の意味が良く分からんけど、ユーザリストを事前に構造体
TBL_INF の配列に叩き込んでおいて、UID@` PWD フィールドの値でソートし
たい、ってことで良い?

データの数にもよるけど、主記憶でケリがつく程度の量なら qsort() 使え
ば OK。qsort() 使った構造体のソートは、こんな感じ。

# サンプルってことで、構造体の要素の型を変えてあるんで注意ね。

-----------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

struct ulist {
int ul_uid;
char *ul_name;
};

int
ulist_cmp(const void *p1@` const void *p2)
{
const struct ulist *up1 = p1@` *up2 = p2;
int rv = 0;

if (up1->ul_uid > up2->ul_uid)
rv = 1;
else if (up1->ul_uid < up2->ul_uid)
rv = -1;
else
rv = strcmp(p1@` p2);

return (rv);
}

#define NELEM(x) (sizeof(x) / sizeof(x[0]))

int
main(void)
{
struct ulist ulist[] = {
{ 1003@` "Ryo Sakazaki" }@`
{ 888@` "Bill Joy" }@`
{ 1002@` "Ryu Takagi" }@`
{ 1000@` "Ken Tompson" }@`
};
struct ulist *up;

qsort(ulist@` NELEM(ulist)@` sizeof(ulist[0])@` ulist_cmp);
for (up = ulist; up - ulist < NELEM(ulist); ++up)
printf("id = %d@` name = %s\n"@` up->ul_uid@` up->ul_name);

return (0);
}
-----------------------------------------------------------------

p.s.

UID はともかく PWD って何が入るんだ? 名前だったら char * か char[]
だろうし。

構造体の名前のつけ方とか、フィールド名が大文字ってあたりが、さりげ
なくダサい (大文字はマクロと typedef 名ぐらいにしとくのが吉)。コ
メントなしでも大体の意味が分かるように名前を選ばないと、後でコード
読めなくて苦労するよ。
10仕様書無しさん:2001/02/11(日) 05:02
>9
パスワードに決まってるだろ。PWDで十分わかる。
11仕様書無しさん:2001/02/11(日) 05:26
char PWD とは何ぞや
12仕様書無しさん:2001/02/11(日) 08:30
1文字のパスワードだよ、きっと。
13森 秀樹:2001/02/11(日) 09:04
#define PWD *password
14森 秀樹:2001/02/11(日) 12:23
char * p = &(PWD); と使うやつがかわいそうなんで、
#define PW password
をおまけで付けておきます。
15名無しさん@1周年:2001/02/11(日) 13:12
1 = 2
16名無しさん@1周年:2001/02/11(日) 19:13
age
17もい:2001/02/11(日) 19:25
ほうほう
■--荒らし速報!http://mbspro3.uic.to/user/kiyopon.html
++ デジマニ (グレイモン)…51回 ---
http://dreamcity.gaiax.com/home/kiyocchi
--------------------------------------------
ホスト↓
(proxy2.odn.ne.jp)..
あんたなにを考えてるんだ?
僕はドリームシティであって
kiyocchi@mlcity ではないのですよ?
あなたを荒らしとみなします!
って事でプロバイダ教えろ
教えないのなら こちらで解析させてもらう
では!
(q27-dn07kokubunji.tokyo.ocn.ne.jp).. 2/10(Sat) 13:11[88]
■--荒らしは書き込めません
++ デジマニ (グレイモン)…52回 ---
http://dreamcity.gaiax.com/home/kiyocchi
---------------------------------------------
荒らしが書き込めない様にしました!
これでアホな荒らしもいなくなったぜ!
(q27-dn07kokubunji.tokyo.ocn.ne.jp).. 2/10(Sat) 13:14[89]
-----------------------------------------------
■--てってめー
++ キング (コロモン)…21回 ---
-----------------------------------------------
おい私の元ホムペー師匠になんてことをなにがクソガイアックスだ
おまえまおまえはなんてことを言うんだ(怒)(proxy1.odn.ne.jp)とやらめ
しかも荒らすだとそれとこのガイアックスのホムペー作りも立派なことなんだよ
それを馬鹿にするなんて許せない
(max4k-1-i37.hk.nttdata.net).. 2/10(Sat) 19:25[92]

■--荒らし 最低です。
++ デジマニ (グレイモン)…53回 ---
http://dreamcity.gaiax.com/home/kiyocchi
-----------------------------------------
あなた誰なんですか?
僕はガイアックスのお陰でこんないい
ホームページを作れたんですよ?
あなたは何者なのですか?(只今 解析中だけどね)
また荒らすような事があれば
僕の将軍(元荒らしバスターズリーダー)
に 報告してもいいのですね?
これは脅しではないですよ
キングさんにまであんな事を・・・
ウソは最低で下劣極まりない最悪の行為だね
(p02-dn01kokubunji.tokyo.ocn.ne.jp).. 2/10(Sat) 21:14[93]
■--hgf
++ hgf (デジタマ)…1回 ---
--------------------------------------------------
(・∀・) (・∀・) (・∀・) (・∀・) (・∀・) (・∀・)
(proxy3.anonymizer.com).. 2/10(Sat) 21:18[94]
-------------------------
++ デジマニ (グレイモン)…54回
http://dreamcity.gaiax.com/home/kiyocchi
また荒らしか↓
(proxy3.anonymizer.com)..
もういいかげんにしてくれ・・・・
あんたも解析開始するよ
(p02-dn01kokubunji.tokyo.ocn.ne.jp).. 2/10(Sat) 21:19[97]
■--それは立派な荒らしだ
++ デジマニ (グレイモン)…55回 ---
http://dreamcity.gaiax.com/home/kiyocchi
-----------------------------------------------
その行いは荒らしそのものだ
今 プロに解析してもらう
(p02-dn01kokubunji.tokyo.ocn.ne.jp).. 2/10(Sat) 21:21[98]
■--まつさんへ
++ 管理人デジマニ (デジタマ)…3回 ---
http://dreamcity.gaiax.com/home/kiyocchi
--------------------------------------------------------------------------------
まつさん!すいません!
ホスト間違えてしまったらしいです!では
(q29-dn06kokubunji.tokyo.ocn.ne.jp).. 2/10(Sat) 23:54[99]
http://mbspro3.uic.to/user/kiyopon.html
18名無しさん@1周年:2001/02/11(日) 20:34
2です。
9さん、ソートの方法についてありがとうございました。

ファイルの中身はこうなっています。
新:12345password67890password改行
旧:12345PASSWORD67890password改行


というファイルを新、旧passwordの部分を比較し、
違っていれば、その一連のユーザー情報を取得して
データベースに渡すためにいったんファイルに書き出します。
最初の一つ続きのデータを区切って、構造体に入れるには
どうすればいいのでしょうか。
19仕様書無しさん:2001/02/12(月) 02:39
>>18>>2

 だ、だいじょうぶなのか?
 この調子で最後まで作りつづけられるのか? おら、心配だ・・・

 >>9
 乗りかかった船だ がんばってけろ 
207743:2001/02/12(月) 03:03
>>19
uidは5桁固定なのか?
pwも同じく。
普通csv形式にしないか?
217743:2001/02/12(月) 03:22
>>20>>19>>18だった。撃打。

ついでだ。
uidはint型のようなので直接構造体に入れるのは無理。
文字列のuidをatoi関数でintに変換しなければならない。
passの方はmemcpyでもスレ。nullつけれ。
2219:2001/02/12(月) 03:39
>>21
 >uidはint型のようなので直接構造体に入れるのは無理

 んだんだ

と、その前に・・・
>>18
 その新・旧ファイルって何ファイルなのん?テキスト?
 それともstruct TBL_INFに入ってたのを書き出したんか?
 改行はどんなタイミングで出現するんじゃ?不定期なんか?

 情報が足りんのぉ・・・
232です。:2001/02/12(月) 03:45
ファイルはテキストです。最後に一個改行が入ります。
24仕様書無しさん:2001/02/12(月) 09:14

フリーのCってのがあるらしいんですが、どこにあるのでしょうか?
25仕様書無しさん:2001/02/12(月) 10:48
>>23
仕様をまとめなさい。あなたは、自分で何をしたいのか理解してません。
仕様をまとめたら、機能ブロックに分けて自分でコードを書きなさい。
コードを書いて、思うどおり動かないのであれば相談しなさい。
26仕様書無しさん:2001/02/12(月) 11:00
>>24
FreeBSD/Linux を手に入れればついてきます。
C++ Magazine を手に入れればついてきます。
27仕様書無しさん:2001/02/12(月) 15:54
>>2

>struct TBL_INF{
>int UID;
>char PWD;
>};

はファイルに書き出すときに使うとして

読み出すときは
struct TEXT_TBL_INF{
char UID[5];
char PWD[8];
};
にして sizeof(TEXT_TBL_INF)ずつ読みだすってのはどだ?
28森 秀樹:2001/02/12(月) 17:45
>>26
最近の、ここの壊れようときたら、笑える。
12345password67890password て、2つのレコードが1行にないか?
とてもやばそうなんだけど。それはいいとして、Free C Compiler
まずは Borland C++ Compiler : http://www.borland.com/bcppbuilder/freecompiler/
unix 風にする環境 cygnus : http://sources.redhat.com/cygwin/
LSIC86の試用版: http://www.lsi-j.co.jp/
いっそ、unix でやっちゃえ: http://www.jp.freebsd.org/www.FreeBSD.org/ja/
http://www.redhat.com/jp/

昔は、LSI-C80 (86じゃないよ 80だよ)のオブジェクトコードを見て
感動したもんだがなあ。

29仕様書無しさん:2001/02/12(月) 18:37
レコード仕様が分からないとお手上げで砂。
CSVでないべた書きはCOBOLで出力したファイルなんかで
お目にかかりますが、可変長でべた書き、マーカなし、というのは
初めてみたかも。
30仕様書無しさん:2001/02/12(月) 19:44
>>28
そうは言うが、みんな日常業務はこんなことの繰り返しじゃないのん?
お客さまさまのわけわからん話を具現化していくっちゅう
31森 秀樹:2001/02/12(月) 19:59
>>30
そう、そうなんです。
で、苦労してお客さんの要求や現実のデータなんかを見て
苦労してデータの解析が終わって、これならなんとかなり
そうだ。と思ったとたんに、お客さんが逃げて、その
仕様書を持って他の所でコンペしたりしません?

私はなんどか、そういうのを見ましたけど。
32工藤 智行:2001/02/13(火) 00:10
自分の考えていることがしっかりと表現できないお客さんから、辛抱強く話を
聞いて、こんな仕様でどうでしょうと提案型で話をまとめていくのは、プログラマ
や SE の必須の能力ですね。最近の CGI を作って欲しいというお客さんなんかは
プログラミングから 100Km 位離れているので、別の星の言葉ではないかと感じて
しまう位、苦労が多いです。。。。
33仕様書無しさん:2001/02/13(火) 01:04
>>2は暗い蟻だったのか。
34仕様書無しさん:2001/02/13(火) 01:24
C++で
unsigned charに読み込んだ16進数のデータを10進数で扱って、
intの10進数のデータを16進数でファイルに書き出すにはどうしたらいいんでしょうか?
35名無しさん@1周年:2001/02/13(火) 02:08
sprintfでいいじゃん。
どんなライブラリがあるんだか知らないから
そうとしか答えられんと思うが。
3630:2001/02/13(火) 03:03
それを社内でヤラれたよ、わしゃ
解析してた期間の費用は、全てマイナス計上となった(ウチの部署持ち)
泣くに泣けんのぢゃ
3730:2001/02/13(火) 03:04
>>36>>31宛てでやんした すまそん
38仕様書無しさん:2001/02/13(火) 03:06
intの10進数のデータって所で脳味噌が活動停止しちゃったんだが(ワラ
マジレスしとくと、intのデータってのは「値」なの。
10進数とか16進数というのはその「値」の「表現」なの。
まぁ、BCDとかだったら「10進の値」って言ってもソレほど外れてないかもしれないけどね
だから、intというのは、ビット列で表された「値」であって10進のデータというのは訳がわからん
2進のデータってのならまだわからん事もないが(ワラ
39名無しさん@1周年:2001/02/13(火) 07:34
>>38
初心者用スレなんだからワラワラ書くなよ・・・
40仕様書無しさん:2001/02/13(火) 12:39
>2
>1.ファイルから読んだ新、旧ユーザーリストファイルを読みこんでソートする方法。
>2.それを構造体にぶち込んで、お互いを比較する方法。

のうち、
1. は事前にソートが済んでいれば「マージソート」というアルゴリズムが適用できるはずです。
マージソート後に重複するレコードを削除すれば済みます。
事前に済んでいない場合には、上にあるように qsort(クイックソート)を使えばいいでしょう。

2.は・・・単純に構造体の要素ごとに比較するだけじゃだめですか?

4134:2001/02/13(火) 15:18
>>38
すみません、じゃあ『データ』のところを『表現』に変えればいいんでしょうか?

で、どうしたらいいんでしょうか?
42仕様書無しさん:2001/02/13(火) 15:24
>>41
>で、どうしたらいいんでしょうか?
fprintf()を調べてみよう
43仕様書無しさん:2001/02/13(火) 15:24
突然の質問ですが、
fwriteとfputsの使い分け方を教えて下さい。
44仕様書無しさん:2001/02/13(火) 15:40
>>43
データが「文字列」か「バイナリ」で使い分ける
strcpyとmemcpyの使い分け方と同じ
45仕様書無しさん:2001/02/13(火) 15:55
>データが「文字列」か「バイナリ」で使い分ける
>strcpyとmemcpyの使い分け方と同じ
精度の違いだけで、どちらでも実現は可能ということですか?
46仕様書無しさん:2001/02/13(火) 15:59
「精度」ってのが何のつもりか判らんが、
'\0' でぶち切られるかどうか、とか '\n' が変換されるかどうか、
といったあたりには気を付けるよーに。
47仕様書無しさん:2001/02/13(火) 16:15
>>45
>どちらでも実現は可能ということですか?
'0x00'をファイルに書き込みたい場合、
fputsでは不可能、fwriteなら可能
48仕様書無しさん:2001/02/13(火) 16:16
>「精度」ってのが何のつもりか判らんが、
>'\0' でぶち切られるかどうか、とか '\n' が変換されるかどうか、
>といったあたりには気を付けるよーに。
説明ありがとうございました。
49仕様書無しさん:2001/02/13(火) 16:37
版違いにより

-- 終了 ------------------------------------------
50練習スレッドにしちゃえ:2001/03/05(月) 20:06

聞いてくれてあーりがと アロエリーナ♪
\______ ________/
          |/
         ∧_∧
   Ψ     (∀T  )
   □     (∩∩  )
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

51練習練習

     。|       ノ⌒ヽ、_ノ⌒ヽ、            。|        ノ⌒ヽ、_ノ⌒ヽ、_
 |  |。 |゚  y   /                 | |。.. |゚ y     /            
 ゚|  |  |io i|   (  春の 宵、          ゚|  |  |io i|    (  春 の宵、
。|  ゚i| 。i|@`@`ノ  |i  ) 隣りは な に を      。.|  ゚i| .。i|@`@`ノ |i    ) 隣 り はなにを
i|゚ ||゚ /ii 。 ゚|i_/゚  /   するひ と ぞ      .  i|゚ ||゚ /ii .。 ゚|i_/゚  /..  す る ひとぞ
 `ヽoー|i;|y-ノ   (               ..  `ヽoー.|i.;|y-ノ   (
   @`;:i´i;ノ       )ノ⌒ヽ、_ノ⌒ヽ、       ... @`;:i´i;ノ       )ノ⌒ヽ、_ノ⌒ヽ、
  ('';ii;;''                        . ('';ii;;''
ii\;;;ii'ノ      モナモナ               ii\;;;ii'ノ      モナモナ
.∧_∧   ∧_∧        __o__        .∧_∧   ∧_∧       . __o__       
( ・∀・)  ( ´∀`)()     ./=ニ=ヽ    .    ( ・∀・)  ( ´∀`) ()   . ./=ニ=ヽ
(つ  .⊂  (つ[]  つ┃     ~|:□|~      .  (つ  .⊂  (つ.[]  つ┃     ~|:.□|~
.( 、 ^ヽ ^ヽ ( 、 ^ヽ ^ヽ 旦~   ゛)三("     .  .( 、 ^ヽ ^ヽ ( 、 ^ヽ ^ヽ 旦~  . ゛)三("     
.ニ(__)_)ニ(__)_)ニニ⊃ |;;; |_    .   .ニ(__)_)ニ(__)_)ニニ⊃. |;;; |_
@`@`@` || @`@`@`@`@`@`@` @`@`@`@`@`@`@`@`@`@`@`@`@` @`@`@`@`@`@`@`@`@`@`@` @`@`@`@`@`|| @`@`@`@`@` @`@` @`@`|;;;〈;.ヽ@`〉@`.@`@`@` || @`@`@`@` @`@`@`@`@`@`@`@`@`@`@`@`@` @`@`@`@`@`@`@`@`@`@`@` @`@`......|| @`@`@`@`@` @`@` @`@`|;;;〈;.ヽ@`〉@`.@`.@`.@`.
;;;;;;;;  ;;;;;;;;; ;;;;;;;;;;;; ;;;;;;;;;;;; ;;;;;ヘ へヘ、~ @`.@` ;;;;;;;;;;  ;;;;;;;;;;; ;;;;;;;;;;;;;; ;;;;;;;;;;;;;; ;;;;;;;ヘ へヘ、~ @`.@`
 ;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;::丿~@`. ;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;::丿~@`.