トップページ⇒tech
1001コメント285KB

C言語なら俺に聞け(入門篇) Part 52

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/08/17(月) 03:16:31
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
http://pc12.2ch.net/test/read.cgi/tech/1250204272/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 51
http://pc12.2ch.net/test/read.cgi/tech/1248445143/

過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0153デフォルトの名無しさん2009/08/23(日) 16:00:11
人間の誕生
0154デフォルトの名無しさん2009/08/23(日) 16:01:16
>>152
うっせーんだよITドカタw
マ板にいけ。
0155デフォルトの名無しさん2009/08/23(日) 16:01:58
芸能界も覚せい剤を使って 怖くみられて  普段は優しそうだけど 実は怖いっていうギャップを狙ってるのかw
芸能界は覚せい剤など、コネなどステータスかと思ってマネするのと同じだなww
0156デフォルトの名無しさん2009/08/23(日) 16:04:46
フローチャートだけではプログラムの1側面して表現できておらぬ。
状態遷移図やシーケンス図なども駆使して多角的に表現できなくてはならない。
0157デフォルトの名無しさん2009/08/23(日) 16:12:48
>>152
wの数を数えると
そいつの程度の低さが分かるって言うけど本当なんだね。
0158デフォルトの名無しさん2009/08/23(日) 16:17:46
図星なのかしらないけど 程度の低さなどとしか言い返せないww
0159デフォルトの名無しさん2009/08/23(日) 16:24:09
延びていると思えばこれ流れか
スレ立てて別のところでやれ
0160デフォルトの名無しさん2009/08/23(日) 17:38:46
いや、もう別のスレを立てられる方が迷惑だろ。
このスレないで収めてくれ
0161デフォルトの名無しさん2009/08/23(日) 17:42:42
処理時間を大まかに把握したいときにフローチャートが役に立つことはある。
0162デフォルトの名無しさん2009/08/23(日) 17:44:16
データの流れを書いた物があればいい
0163デフォルトの名無しさん2009/08/23(日) 17:45:05
アクター図で十分なきもする
0164デフォルトの名無しさん2009/08/23(日) 18:12:14
標準ライブラリの使い方について詳しく説明してる定番本のようなものはありますか?
K&Rのライブラリの説明はあまりにも簡素すぎて今の私には使いこなせません。
0165デフォルトの名無しさん2009/08/23(日) 18:18:13
C言語のライブラリの辞書買えばいいのでは
0166デフォルトの名無しさん2009/08/23(日) 18:37:56
>>164
MS-Cの頃は、それなりの書籍があって、MS-C 独自関数も含めて標準ライブラリの使い方を書いた本があったんですけどね。
今はどうかな?
0167デフォルトの名無しさん2009/08/23(日) 19:34:28
時間があるならUNIXプログラミングから勉強するのもお勧め。
システムコールレベルのコード読んでると標準ライブラリ見てるだけでは気付かなかったことが色々分かってくる。
Javaから始めた人がCを勉強して色々気付くのと同じ感覚。
0168デフォルトの名無しさん2009/08/23(日) 21:05:26
普通にMSDNみればいいんじゃねぇの
0169デフォルトの名無しさん2009/08/23(日) 21:20:43
MS独自拡張のライブラリなんか覚えても他で通用しないんじゃ汎用性に欠ける。
昔からそうやって利用者を囲い込む姑息な企業だからな。
0170デフォルトの名無しさん2009/08/23(日) 21:28:27
POSIXはその囲い込みに失敗した良い例というわけ
0171デフォルトの名無しさん2009/08/23(日) 21:38:43
>>164
ちょっとちがうけど「Cプログラム診断室」は?
人の書いたコードをけなしながら「そういう処理は標準関数をこうつかえよw」みたいな
つっこみがいっぱいあったような記憶が。
今でもネットで見れると思う。
0172デフォルトの名無しさん2009/08/23(日) 21:55:27
C言語始めたばかりで、自作関数の勉強をしています。
「キーボードから整数の入力を受け取って、それを10倍した値を返す関数を作って下さい。」
という問題で下記を作ったのですが、失敗作のようです。
どこがどう間違っているのか解説お願いします。

#include<stdio.h>

int sum(void);

int main(void)
{
sum();
printf("%d",(int)(num * 10));
return 0;
}
int sum(void)
{
printf("整数を入力してください\n");
scanf("%d",&num);
return 0;
}
0173デフォルトの名無しさん2009/08/23(日) 21:56:32
>>172
南無
0174デフォルトの名無しさん2009/08/23(日) 22:02:00
それだとだめだよ
#include<stdio.h>
int sum(void);
int main(void)
{
printf("%d\n",sum());
return 0;
}
int sum()
{
int num;
scanf("%d",&num);
return num*10;
}
こう
0175デフォルトの名無しさん2009/08/23(日) 22:04:00
なんでsumなんだろう
0176デフォルトの名無しさん2009/08/23(日) 22:05:31
>>172
おまえ、雑記帳ってサイトでネタにされてたよ。
0177デフォルトの名無しさん2009/08/23(日) 22:11:14
キーボードから整数の入力を受け取って、それを10倍した値を返す関数を作って下さい。

でぐぐれかす
0178デフォルトの名無しさん2009/08/23(日) 22:12:19
>>174
ありがとうございます!
自分のだと自作関数内の数値がメイン関数に反映されてないっぽいですね。
見比べながら復習しようと思います。参考になりました。
0179デフォルトの名無しさん2009/08/23(日) 22:13:55
>>170
POSIXいいぞ。
教科書どおりのfopenとかだけで20年以上飯食えてるからな。
0180デフォルトの名無しさん2009/08/23(日) 22:28:36
どこで質問したらよいのか分からないので質問させてください。
僕は意味不明なファイルがどういうものか知りたくて
(たとえばCドライブにあるsetting.iniとかを見て「こいつはこのソフトを動かすのに使われているんだな」って分かるような)
プログラミングを始めました。言語はVB.NETです。
それで、VBの方は簡単なゲームを作れるところまでできてきたのですが、当初の目的の
「ファイルがどういうものかを知る」というのがいまひとつピンときません。

VBだから当たり前なのかもしれないのですが、なぜかC言語なら分かる気がしたのでVisualC++をとりあえずインストールしました。
そこで伺いたいのは、別にCとかC++とか関係なくC系の言語を学べばファイルというものがどういうものなのか理解できるのでしょうか?
本当にあいまいな質問ですみません。

また、職業はプログラマとかではないので将来プログラミングをバリバリ使って働くわけでもないです。
そういう意味で僕の目的を満たすには、C言語を学ぶのはオーバーワークなんでしょうか?
ご回答よろしくお願いします。
018193,1742009/08/23(日) 22:36:47
>>173
C言語がいちばん簡単だから安心しろ^^
資料もおおいし。
最初からPythonとかマイナー言語進める奴はバカだな
何かの記事でハッカーはPythonを使うとかバカの一つ覚えてかっこいいと思って使ってる奴が多い。
名前が蛇みたいでかっこいいとか^^;(滝汗)
0182デフォルトの名無しさん2009/08/23(日) 22:40:09
>>180
VBでもファイルを読み書きしたり、作ったりと言うようなプログラムは作れるでしょ。
0183デフォルトの名無しさん2009/08/23(日) 22:41:54
>>180
setting.iniに関していえば、初期設定情報をファイルとして外に出したと思っていい。
0184デフォルトの名無しさん2009/08/23(日) 22:42:23
>>181
救いようのない馬鹿だな。
何調子のってんだ?
0185デフォルトの名無しさん2009/08/23(日) 22:45:11
>>181
消えろカス
0186デフォルトの名無しさん2009/08/23(日) 22:45:32
>>180
これはいい燃料ですね

とりあえず.NETならXMLという話をどこかできいた
0187デフォルトの名無しさん2009/08/23(日) 22:46:09
Windowsならレジストリ
018893,1742009/08/23(日) 22:46:31
>>184-185
Pythonをやればハッカーだと思って勉強しちゃったカスですか かっこわらい
018993,1742009/08/23(日) 22:47:18
図星で反論 テラパオスですね かっこ笑い
0190デフォルトの名無しさん2009/08/23(日) 22:47:55
>>188
ポインタも理解できないお前の方がカスだけど(爆笑)
019193,1742009/08/23(日) 22:49:26
バーベルで頭ぶっ叩いたら即逝しそうだなクソガリ かっこわらい
0192デフォルトの名無しさん2009/08/23(日) 22:50:28
>>191
Pythonで挫折したんですね、わかります。
0193デフォルトの名無しさん2009/08/23(日) 22:51:17
たしかに、Pythonはクソ言語だな
0194デフォルトの名無しさん2009/08/23(日) 22:52:35
>>193
どうした?
夏休みの宿題が終わらなくて泣いているのかな?w

じゃあてめぇが素晴らしい言語を設計してみろカス
0195デフォルトの名無しさん2009/08/23(日) 22:53:19
この間うちのチームに入ってきた奴が3年近くPGやってるはずなのにファイルを触ったことが
無いっていうのを聞いて驚いたんだが、今はそういうのが多いの?
0196デフォルトの名無しさん2009/08/23(日) 22:53:59
夏休みの宿題か…
ただの一度も完遂したことがないな
0197デフォルトの名無しさん2009/08/23(日) 22:54:11
93 : 名無しさん : 2009/08/22(土) 00:16:19
 #include <stdio.h>
 #include <string.h>
 int main(void)
 {
 char *p="A";
 char *h="B";
 char *rp;
 int length;
 length=p-h;
 printf("%d\n",*p);
 printf("%d\n",*h);
 printf("%d\n",*p-*h);
 printf("%d\n",length);
 return 0;
 }
 これで最後のlengthが何故 -4 って出るかがわからない
 上の*p-*hはA(64)-B(65)で-1ってわかるけど

 length=p-h;これが何故-1なのか不明教えてくれ
0198デオフォルトの名無しさん2009/08/23(日) 22:54:27
>>194
どうした?
夏休みの宿題が終わらなくて泣いているのかな?w

じゃあてめぇが素晴らしい言語を設計してみろカス
0199デフォルトの名無しさん2009/08/23(日) 22:55:02
93 : 名無しさん : 2009/08/22(土) 00:16:19
 #include <stdio.h>
 #include <string.h>
 int main(void)
 {
 char *p="A";
 char *h="B";
 char *rp;
 int length;
 length=p-h;
 printf("%d\n",*p);
 printf("%d\n",*h);
 printf("%d\n",*p-*h);
 printf("%d\n",length);
 return 0;
 }
 これで最後のlengthが何故 -4 って出るかがわからない
 上の*p-*hはA(64)-B(65)で-1ってわかるけど

 length=p-h;これが何故-1なのか不明教えてくれ
0200デフォルトの名無しさん2009/08/23(日) 22:55:25
>>195
ファイルってのは標準関数でオープンしたりするあれ?
それとも特定の開発現場でSQLを使わなくてアクセスできるあれのこと?
0201デフォルトの名無しさん2009/08/23(日) 22:56:16
>>197
もういいそれは見飽きた貼るな
020293,1742009/08/23(日) 22:57:28
ぷぎゃー
くやしいのぅwwwwwww草w
0203デフォルトの名無しさん2009/08/23(日) 22:59:03
>>200
標準関数でオープンしたりするアレ。
特定の開発現場は知らん。
0204デフォルトの名無しさん2009/08/23(日) 22:59:13
93の釣りに釣られた奴は低能なんだろうなw
低能の釣りに低能が釣られる
0205デフォルトの名無しさん2009/08/23(日) 22:59:52
ファイル触ったこと無いって
よっぽど高級なことやってたに違いない
アルゴリズマー
0206デフォルトの名無しさん2009/08/23(日) 23:00:01
>>181
> C言語がいちばん簡単だから安心しろ^^

簡単なことで躓いている奴が言う台詞じゃねぇ・・・w
0207デフォルトの名無しさん2009/08/23(日) 23:00:46
>>203
まあ分業でやることが増えてるからそういう人もいるんじゃないの?
020893,1742009/08/23(日) 23:01:05
>>204
おいおい、見苦しいぞ低脳君 かっこわらい
0209デフォルトの名無しさん2009/08/23(日) 23:02:16
なんで93が暴れてるのか不明なんだけど、まとめてくれ > 93
0210デフォルトの名無しさん2009/08/23(日) 23:02:47
夏だねえ
まだ終わらないのか>夏休み

>>93はこれでもみてろ
http://www.b-ch.com/flash/mv_det.php?sq=1&msc=10
02111802009/08/23(日) 23:03:47
皆さん素早いレスありがとうございます。

>>182
確かにそうですね。その辺りもやってみます。
>>183
それについてはネットで検索して「なんとなく分かるような分からないような」という感じです。
でも、教えていただきありがとうございます。
>>186
xmlですか。
そういえば以前ちょっとだけやって何に使うんだろうと思ったことはあります。

やっぱりファイルといえども全部を理解しようとするのは無理なのかもしれなかったです。
C言語をやるかどうかはもう少し考えてみたいと思います。
0212デフォルトの名無しさん2009/08/23(日) 23:04:45
醜い
0213デフォルトの名無しさん2009/08/23(日) 23:05:13
夏だなぁ
0214荻原2009/08/23(日) 23:07:18
夏は暑いな
0215デフォルトの名無しさん2009/08/23(日) 23:09:37
>>211
ファイルの識別をしたいのか?もちろんVBでもできるよ。
大抵のファイルにはヘッダやフッダがあるから、バイナリで先頭数バイトを読んでみれ。
ヘッダ一覧は別ファイルでDBにでもしておけばいいだろう。
02161802009/08/23(日) 23:18:23
>>215
VBでもできるんですか!
自分の勉強不足で全く知りませんでした。
それではもう少しVBをやってみたいと思います。

スレ違いの質問に答えて下さりありがとうございました。
0217デフォルトの名無しさん2009/08/23(日) 23:21:03
>>211
iniなんかはWindowsAPIに読み書き関数が用意されていて
フォーマットも分かりきっているけど

「俺は■■■みたいに書いて△☆ミのように読みたいんだ!」っつーフォーマットを自分で決めればいい
0218デフォルトの名無しさん2009/08/24(月) 00:28:13
>>216
極窓か?識別プログラム自体は楽だろうが、
ファイルのヘッダのデータ収集が一番めんどくさそうだ。
0219デフォルトの名無しさん2009/08/24(月) 00:34:12
あるソースファイルの中で、別のファイルで定義された関数を使っている場合、
gccでコンパイルする時にコンパイラは何を元に関数の実体の場所を探しているのですか?
たとえばJavaであればclasspathというのがありますが、Cにも独自の環境変数が用意されているのでしょうか?
0220デフォルトの名無しさん2009/08/24(月) 00:35:25
もっとも早くMD5が取得できるライブラリ教えてくだしあ
0221デフォルトの名無しさん2009/08/24(月) 00:42:31
ファイルを整理するソフトを作ろうと思っています。
結構色々なソフトがありますが、ファイル数が多いとハッシュを取得するのに結構案時間がかかってしまいます。
なので、咲にファイルサイズを取得してから同一のサイズのファイルだけハッシュの取得、比叡するという事をしたいです。
どうすればいいですか?
02222212009/08/24(月) 00:44:37
自決しました
0223デフォルトの名無しさん2009/08/24(月) 00:47:13
>>219
リンカオプションですべてのファイルの位置をちゃんとぴっちり設定する必要があるのだ。
0224デフォルトの名無しさん2009/08/24(月) 01:02:41
なぜスコープ付き#defineがないのか
0225デフォルトの名無しさん2009/08/24(月) 01:03:53
>>224
一応ファイルスコープだ
0226デフォルトの名無しさん2009/08/24(月) 02:18:36
なぜならCプリプロセッサはC言語とは全く関係ないからだ
0227デフォルトの名無しさん2009/08/24(月) 17:31:05
コンパイラへの命令だって本で読んだよ!
0228デフォルトの名無しさん2009/08/24(月) 17:53:24
Cプロプリセッサへの命令。
0229デフォルトの名無しさん2009/08/24(月) 18:16:41
>>220
MD5 アルゴリズムそのものは↓
ttp://www.ipa.go.jp/security/rfc/RFC1321JA.html

もっとも早くの"早く" が実行速度を指しているのだったらワカラン
0230デフォルトの名無しさん2009/08/24(月) 21:04:54
ちょっとこのプログラムどこがおかしいのか見てくれないだろうか
52枚のトランプカードから2枚引くプログラム作ってみてコンパイル通ったけどおかしな数値しか出てこないんだ
構造体でマークと数字を別々に保管してるの作ろうとしたら二枚目で同じカード引かないようにするトコで行き詰ってこういう形になった
要するに配列52個用意して一度引いた配列に0代入して同じの引かないように作ったんだが、何か間違ってたんだろうか

int i,j,x,y,z=0;
int pcard[2];
//プレイヤーの引いたカード・今回は二枚なので
char *mark[]={"Diya","Clober","Spade","Heart"};
//数字をマークに変換する為の変数

srand(time(NULL));
//乱数の種をまく

int allcard[52];
x=1;

for(x=1;x<5;x++){
y=x*100;
for(i=0;i<13;i++){
allcard[z]=i+y+1;
z++;
}
}
//52種類のカードを用意
//100の位がマーク
//1〜10の位でカードの数字

for(i=0;i<52;i++){
printf("%d\n",allcard[i]);
}
//確認用
0231デフォルトの名無しさん2009/08/24(月) 21:05:44
printf("\n\n\n\n二枚引いてください。\n");
printf("まずは一枚目です。");
j=0;
//jは今が何枚目のカードなのか

while(getchar()!='\n'){}

i=rand()%52;
//出した乱数をとりあえず変数に保存しておく
pcard[j]=allcard[i];
allcard[i]=0;
//今回引いたカードにはゼロを入れておく

printf(" %d to %s\n",pcard[i]%100,mark[pcard[j]/100]);
//プレイヤーカードを100で割った余りのを出力
//プレイヤーカードを100で割った数値に対応したマークを表示
j=1;
//プレイヤーカード二枚目
printf("\n二枚目を引いてください。\n");

while(getchar()!='\n'){}

i=rand()%52;
pcard[j]=allcard[i];
while(allcard[i]==0){
i=rand()%52;
pcard[j]=allcard[i];
}
  //既に引いたカードならやり直し
allcard[i]=0;
//今回引いたカードにゼロを入れておく
printf(" %d to %s\n",pcard[i]%100,mark[pcard[j]/100]);
0232デフォルトの名無しさん2009/08/24(月) 21:13:34
>>230
まずアプローチがちがう
配列 シャッフル
でggrks
0233デフォルトの名無しさん2009/08/24(月) 21:21:27
>>227
その本は焼き捨てるか、
窓から投げ捨てると良いよ。
このご時世ならリサイクルもありだな。
0234デフォルトの名無しさん2009/08/24(月) 21:43:22
>printf(" %d to %s\n",pcard[i]%100,mark[pcard[j]/100]);
pcard[i]%100じゃなくて、,pcard[j]%100だろ
0235デフォルトの名無しさん2009/08/24(月) 21:54:13
>>234
ありがとうございます。視力が弱いせいでiとjが同じに見えてました
凡ミス・・・確認不足・・・恥ずかし・・・もうちょっと区別の付きやすい変数にしとこ・・・xyz使い回すか
0236デフォルトの名無しさん2009/08/24(月) 22:02:17
0で埋めるより、抜いたところに一番後ろのカードを入れると無駄なループしなくていいよ。

allcard[i] = allcard[51-j];

i = rand() % (52 - j);
0237デフォルトの名無しさん2009/08/24(月) 22:33:01
だれか助けていただけないでしょうか。

2プロセス間(A,B)でメッセージ通信を行っています。
この際に例えばAでBからのメッセージ1を受信後、さらにBよりメッセージ2を受信しようとすると、
セグメンテーションエラーがでます。
GDBを利用してデバッグしましたが、具体的にエラーが出ている行数や関数名等が表示されず、
大変困っています。
0238デフォルトの名無しさん2009/08/24(月) 22:35:37
デバッガ使ったけどバグ直ってないニダ
謝罪と賠償ニダ
0239デフォルトの名無しさん2009/08/24(月) 22:39:41
はいはい
とりあえずソースを見せろ
0240デフォルトの名無しさん2009/08/24(月) 23:47:53
>>233
独習Cってそんなにまずいの?w
2回も読んだよ
0241デフォルトの名無しさん2009/08/25(火) 00:00:17
ハーバートシルト先生の本は
ともかく平易で読みやすくキレイにまとまってはいるんだけど
平易にしすぎるせいか、意味があいまいだったり、
コードが安全でなかったりするんだよね。

STL標準講座も標準講座MFCもそんな感じだった。
とっかかりの本としてはいいんだけど
それだけで終わるとプログラマとしても終わってしまう。
別の本で、曖昧な箇所をきっちり矯正しておく必要あり。

ある程度他の言語を使ってきた人には二度手間本。
0242デフォルトの名無しさん2009/08/25(火) 00:03:36
独習C++も簡単?
0243デフォルトの名無しさん2009/08/25(火) 00:04:48
いつになったらwindowsアプリ作れるようになるんですか
0244デフォルトの名無しさん2009/08/25(火) 00:32:49
>>237
コア吐かせれば何か分かるでしょ。
0245デフォルトの名無しさん2009/08/25(火) 00:37:57
>>237
*((char*)p+1)なことやってるとか
handleを生ポインタで扱ってるとか
作って消して渡して読み取ってるとか
そもそもメッセージングには何使ってるんだおい
0246デフォルトの名無しさん2009/08/25(火) 01:06:46
PS3薄型と旧型の違い

旧型PS3:
Linuxインストール機能内蔵でPS3をPCとして使うことができる。
PPC Linux用の無料のソフトがいっぱい動く。
また、Cellの開発ツールも無料で入手できるので自分でCellのプログラムを作って実行させることができる。
ドルビーTrueHD、DTS-HDMAはリニアPCM変換で対応。
HDD〜80G
実勢価格36000円程度

薄型PS3:
Linuxインストール機能は除去された。
ブラビアリンク機能でブラビアと連動した電源のON OFFができる。
ドルビーTrueHD、DTS-HDMAのビットストリーム出力対応。
HDD120G
比較して低騒音低発熱
実勢価格29980円
0247デフォルトの名無しさん2009/08/25(火) 09:59:48
>>246
何?nanなの?
0248デフォルトの名無しさん2009/08/25(火) 13:11:54
>>236
ぐっときた
0249デフォルトの名無しさん2009/08/25(火) 14:24:23
>>235
iとjを見分ける労力=無駄【目がチカチカ】
http://pc12.2ch.net/test/read.cgi/tech/1243509968/

このスレ思い出したw
0250デフォルトの名無しさん2009/08/25(火) 18:49:57
インクリメントに使う一時変数の名前を最初にiとしたヤツは死刑。
0251デフォルトの名無しさん2009/08/25(火) 19:12:27
フォントによってはiとjの区別がほとんどつかないのもあるよねw
lと1の区別がつかないのもあるし、mとnも似てるし、oは0と混同するし、qは9と似てる場合もあるし。
0252デフォルトの名無しさん2009/08/25(火) 19:13:39
Cの標準ライブラリの関数名決めた奴の方が問題だろ
■ このスレッドは過去ログ倉庫に格納されています