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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

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

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
2デフォルトの名無しさん:2007/09/21(金) 11:43:45
3デフォルトの名無しさん:2007/09/21(金) 14:23:00
あの〜

unsigned int *i;  //2byteです
unsigned char *c;  //1byteです

 c=i;

を実行したいのですがエラーになります。
要するに*iの2byteの上位バイト(又は下位バイト)のポインタをcへ入れたいのですが...

お願いします
4デフォルトの名無しさん:2007/09/21(金) 14:25:30
c = (unsigned char*)i;
5デフォルトの名無しさん:2007/09/21(金) 14:29:03
>>3
たとえintとcharのサイズが違ってもint*やchar*のサイズは同じだよ
6デフォルトの名無しさん:2007/09/21(金) 14:32:56
そこはわかってるだろ
73:2007/09/21(金) 14:34:26
動きました。
ありがとうございます。
8デフォルトの名無しさん:2007/09/21(金) 14:35:56
c = (unsigned char*)i + 1;
c = (unsigned char*)i;
エンディアンによってどっちが上位か下位かは変わる
9デフォルトの名無しさん:2007/09/21(金) 15:37:57
ミスキャストかな?
削除依頼出しとけ
10デフォルトの名無しさん:2007/09/21(金) 15:57:56
削除依頼?なんで?
11デフォルトの名無しさん:2007/09/21(金) 16:01:02
単独質問スレを>>3が立てたんだと勘違いしたんだろ
12デフォルトの名無しさん:2007/09/21(金) 18:42:11
>>997
マジレスするとその本は超いい本だからすぐにでも買っとけ。
その本を読破したら「プログラミングwindows(上)(下)」 Charles Petzold著 を読んどけ。
これで君は立派なゲームプログラマーになれるお。
13デフォルトの名無しさん:2007/09/21(金) 20:47:47
すみませんここで聞くべきかわからないのですがちょっと質問させてもらいます。
現在大学に通ってて3回生の理系です。
将来情報系のとこに就職しようかと迷っているんですがC言語はできないとまずいでしょうか?
C言語の授業があるんですが半日も使ってやる授業が週2回もある授業なのでメリットがなければその授業受けずに
シスアドとかの資格の勉強に時間をあてようかと思ってます。
C言語はSEなどのプログラマーが主に勉強する内容なんですか?
14デフォルトの名無しさん:2007/09/21(金) 20:52:21
シスアドはあと二年くらいでなくなるよ。
15デフォルトの名無しさん:2007/09/21(金) 20:55:25
C言語を使わない仕事を選ぶならC言語ができなくてもいいんじゃね
情報系といっても分野が広いから
16デフォルトの名無しさん:2007/09/21(金) 21:05:08
>>13
http://d.hatena.ne.jp/genesis2/

こういう話もなるな。
あんまり技術指向でないっぽいから、資格試験やったほうがいいかも。
17デフォルトの名無しさん:2007/09/21(金) 21:16:04
みなかみの親水公園。水が冷たくて死ぬかと思った。
ラフティングがよく通る。帰りは温泉でサパーリと。
18デフォルトの名無しさん:2007/09/21(金) 21:35:33
>>16
技術志向ではないんですよ・・・プログラミングとか苦手で・・・
あまりC言語に興味なくて初心者からでもC言語は理解できるものなのでしょうか?
19デフォルトの名無しさん:2007/09/21(金) 21:39:16
興味がないなら身につかないんじゃね
20デフォルトの名無しさん:2007/09/21(金) 21:39:43
>>13
開発の仕事に就きたいのじゃないの?
せっかく授業でやるんだったら、しっかり身につけておいても良いと思う。
あとで他の言語やるときにも、その知識から応用が聞くと思うし...
21デフォルトの名無しさん:2007/09/21(金) 21:41:46
>>18
理解できるよ。Cは本がたくさん出てるから安心。
22デフォルトの名無しさん:2007/09/21(金) 21:42:37
>将来情報系のとこに就職しようかと迷っているんですが
がミソだな
Cを覚えても「サーバー管理をやることになりました。どうすればいいですか?」ってオチがありそうだw
俺は「新卒?別にそんなの関係ねえ。プログラマで食ってくぜ」って決めてたから>>13の気持ちはわからん
23デフォルトの名無しさん:2007/09/21(金) 21:43:00
>>18
> SEなどのプログラマー
って言ってるけど、SEとプログラマは別物だよ。
もちろん双方の知識があるに越したことはないが。
自分の進みたい分野の情報をもっと詳しく収集してみてください。
24デフォルトの名無しさん:2007/09/21(金) 21:46:03
>>13
本当に理系学生なの?
適正は文系な気がするんだが…

メリットがどうこういうよりは
やりたくないからそれを後押ししてもらいたいだけのように感じる
すでに自分の中で結論が出ているみたい

一言で言うと女性の悩み事相談みたいだ
25デフォルトの名無しさん:2007/09/21(金) 21:47:43
最低でも1つはプログラム言語に触れておいた方がいいと思うよ
VBなりJavaなりが使えるならそれでいいし、使えないならC言語も選択
26デフォルトの名無しさん:2007/09/21(金) 21:49:52
最近はプログラム好きじゃない奴も学ぶのね・・・
27デフォルトの名無しさん:2007/09/21(金) 21:51:48
しかし、一回半日で、週二回の授業じゃ、時間だけつかって、なにも身につかないって感じになりそう。
モチベーションが高くて、授業以外にも自分でガンガンやるなら、数ヶ月とか短期間でもそれなりに
できるようになるだろうけど。
28デフォルトの名無しさん:2007/09/21(金) 21:53:14
今日初心者のオレは200ページのC言語の本を一日で半分終わらした
29デフォルトの名無しさん:2007/09/21(金) 21:56:37
プログラマってプログラムが好きでずっとパソコンの前にいても平気な人達がする仕事なんだろうなって思った
30デフォルトの名無しさん:2007/09/21(金) 22:00:41
俺はそうだけどそうじゃない奴が多いのは会社に入って気づいた
31デフォルトの名無しさん:2007/09/21(金) 22:02:12
>>29
求人みれば、んなこたーないってわかる
思う前に考えろ
32デフォルトの名無しさん:2007/09/21(金) 22:03:23
コマンドライン引数ってよく分からないけど使えないとこれは無理ってことあります?
33デフォルトの名無しさん:2007/09/21(金) 22:06:54
この板に来てるPGは、技術力じゃ日本の60万人のPGの上位10%には入ってるな。
ネットで技術情報を積極的にチェックしてるPGでさえまれな存在だから。
34デフォルトの名無しさん:2007/09/21(金) 22:07:19
愚痴だがこんなネガティブな質問の仕方されるより
「これ使うと幸せになりますか?」だとウレシイな
35デフォルトの名無しさん:2007/09/21(金) 22:08:33
>>32
ファイルをexeファイルにドラッグ&ドロップして開くとか
36デフォルトの名無しさん:2007/09/21(金) 22:08:50
>>32
ファイルをダブルクリックして、アプリを起動するときに、コマンドラインから渡してるんじゃなかった?
37デフォルトの名無しさん:2007/09/21(金) 22:09:42
>>32
コマンドラインでコンパイルするのが面倒になる
make が使いにくくなる
38デフォルトの名無しさん:2007/09/21(金) 22:24:06
>>28
俺は独習C#一冊を2時間で終わらせた
それ以前にC#は経験してたけど
39デフォルトの名無しさん:2007/09/21(金) 22:39:51
俺は独学でC一回を2時間で終わらせた
それ以前にCは経験してたけど

に見えた
40デフォルトの名無しさん:2007/09/21(金) 22:43:35
まぁCも経験してたよ
41デフォルトの名無しさん:2007/09/21(金) 22:48:38
>>40
貴様は wizard になれないなw
42デフォルトの名無しさん:2007/09/21(金) 23:02:17
その煽りは何のためにあるんだろうね
43デフォルトの名無しさん:2007/09/21(金) 23:10:23
会社に入ると最初は研修があると思うけど初心者でもついていける?研修終わったらもう働けるような
技術はついてる?
44デフォルトの名無しさん:2007/09/21(金) 23:12:30
到底無理だろうな。
45デフォルトの名無しさん:2007/09/21(金) 23:16:41
>>43
そうなるように努力しなさい。
分からないことは研修の担当者にドンドン質問しな。
ただ、最初はさすがに先輩も(言い方は悪いが)期待してないと思うよ。
OJTといって現場での実務兼訓練があるし、[修行は一生]なのはどんな職業でも一緒だろう。
46デフォルトの名無しさん:2007/09/21(金) 23:21:21
>>43
オチこぼれるやつもいるな。
47デフォルトの名無しさん:2007/09/21(金) 23:23:06
ありがとうございます。中には研修で挫折する人もいると聞いたのもので・・・。
そうならないよう今のうちに言語に触れておきます。
48デフォルトの名無しさん:2007/09/22(土) 00:07:26
25 :デフォルトの名無しさん:2007/09/21(金) 21:47:43
最低でも1つはプログラム言語に触れておいた方がいいと思うよ
VBなりJavaなりが使えるならそれでいいし、使えないならC言語も選択
49デフォルトの名無しさん:2007/09/22(土) 00:09:34
VBなんてと思ったが・・・
EXCLで使うんだな
50デフォルトの名無しさん:2007/09/22(土) 00:11:07
C++のような
EXCEL使えるのか?
51デフォルトの名無しさん:2007/09/22(土) 00:13:04
俺も就職が文系よりあるからなんとなく理系に来たDラン大の2回なんだが、
実際就職してみるとこういう仕事でもなんだかんだ言ってできるもんじゃないの?
てか将来やりたいことなくて理系きたの失敗か?
52デフォルトの名無しさん:2007/09/22(土) 00:21:12
何だかんだ言って出来ないのに職に就いているヤツは多い。
53デフォルトの名無しさん:2007/09/22(土) 00:24:56
>>51
大手に入れないようならIT系はやめたほうがいいよ。
中国人やインド人の10倍の価値がないと競争できなくなる。
54デフォルトの名無しさん:2007/09/22(土) 00:26:38
高速プログラムにはやっぱり
インラインアセンブラが使えるC++だろ
55デフォルトの名無しさん:2007/09/22(土) 00:28:03
インラインアセンブラが使え無い言語は
基本的に劣っていると考えたい・・・
56デフォルトの名無しさん:2007/09/22(土) 00:29:00
俺もパソコンが好きだから理系にきたけどスキっていうのはパソコンを扱うことのほうで
プログラムとかそっち方面じゃないってことに気付いたけどもう手遅れ
57デフォルトの名無しさん:2007/09/22(土) 00:46:00
運用を担当すれ
開発じゃなく
58デフォルトの名無しさん:2007/09/22(土) 00:52:31
インラインアセンブリなんかに大した価値は無い
コードはもっと高級な言語で書くべき
59デフォルトの名無しさん:2007/09/22(土) 00:52:43
っていうかパソコンがあまり発達してないときに就職したおっさん共が開発とかプログラミングできるわけねーだろ
だから今はIT系の会社への就職は引っ張りだこだぜ?Dランでもまともなとこに就職できる。
そのためには情報収集しっかりしろ。今からちょこっと勉強して取れる程度の資格も就職活動のみのために取るというのなら必要ない。
SPIとか学校で学んだことを企業に伝えるためにも勉強しろ。
60デフォルトの名無しさん:2007/09/22(土) 00:56:07
そういや俺の大学Fランなんだけど、研究室の教授が顔の広い人なんだ。
んで知り合いがその教授に日立への推薦貰って内定貰ってたんだけど今そいつどうしてるかな・・・
うちの大学で日立とか完全に場違いなんだけど入った後、相手してくれるのかな?
61デフォルトの名無しさん:2007/09/22(土) 01:01:57
今の時代のIT企業は文系型の学生も取るようになったの?
62デフォルトの名無しさん:2007/09/22(土) 01:02:50
うちの大学も地元じゃレベル低いけどNECとか行ったしな。やっぱやらなきゃってなると
変わるのかな
63デフォルトの名無しさん:2007/09/22(土) 01:02:52
今も昔も採ってから研修させることなんてよくあるだろ。
64デフォルトの名無しさん:2007/09/22(土) 01:07:24
パソコンは好き、でも理系大変そうだし行きたくないって人は文系でIT系の会社に行く人が多いみたい。
中には文系なのに理系の人よりパソコンに詳しい人とかプログラミング得意な人いるし
65デフォルトの名無しさん:2007/09/22(土) 01:11:30
>>58
うちではインラインアセンブラはフラッシュやらチップの制御以外にはほとんど使っとらんが、
変な「べき論」のたまう前に、お前はもうちょいPC以外がターゲットの開発環境があることを知れ。
66デフォルトの名無しさん:2007/09/22(土) 01:14:17
>>59
大手はプログラミング能力軽視だよ。
日本じゃ技術指向のやつは働く場所ないよ。
67デフォルトの名無しさん:2007/09/22(土) 01:24:43
>>66
大手メーカーの研究職とか
68デフォルトの名無しさん:2007/09/22(土) 01:32:36
じゃあ就活はやっぱり学歴が最重要なのか・・・Dランの俺オワタ
69デフォルトの名無しさん:2007/09/22(土) 01:32:58
>>59
若い会社が多いから、引っ張りだこってことは無いと思うぞ
○遣とか契○とかは大量らしいけど
70デフォルトの名無しさん:2007/09/22(土) 01:33:41
今将来性のある理系の職種ってなに?
71デフォルトの名無しさん:2007/09/22(土) 01:34:02
この業界学歴はあんま関係ないよ

いいところに行きたいなら別だけど
72デフォルトの名無しさん:2007/09/22(土) 01:37:53
開発しているソフトウェアを自社製品として売る企業
↑これなんて言う職種?
73デフォルトの名無しさん:2007/09/22(土) 01:41:46
理系のいい所は超一流企業以外に入る場合は学歴あんまり必要ないこと。
後は人間性とブラックリスト会社に入らないための情報収集能力じゃね?
74デフォルトの名無しさん:2007/09/22(土) 01:42:14
NTTなんとかの社長(うろおぼえ)が、技術を軽視しすぎた、これからは技術重視でいくって
宣言してたけど、技術軽視になるのは、日本のソフトウエア産業の構造の問題だから、どうにもならんわな。
75デフォルトの名無しさん:2007/09/22(土) 01:42:42
「職種」を国語辞典で引いてくるといい
と思ったけど、詳しい解説は載ってなかった orz
76デフォルトの名無しさん:2007/09/22(土) 01:44:45
>>72
開発・サービス業とかじゃね?
77デフォルトの名無しさん:2007/09/22(土) 01:46:25
そろそろまとめよーぜ
これから将来性のある安定した理系の進路はいったい何?
78デフォルトの名無しさん:2007/09/22(土) 01:47:04
>>60
大丈夫だよ。
日立系はそういう人間で組織が出来ている。


ちなみにどこの国の話かしらんが、某F系は口の巧いだけの奴がな、、、、
人事も普通の会社はエリートなんだが、コネの奴がな、、、、
そんな奴らが成果主義で、採用・配属をだな、、、、、
79デフォルトの名無しさん:2007/09/22(土) 01:50:51
>これから将来性のある安定した理系の進路はいったい何?
地方公務員
80デフォルトの名無しさん:2007/09/22(土) 02:01:05
まぁここで言える事はおまえらスレ違いだから
就職板かマ板にでも行けという事だな
81デフォルトの名無しさん:2007/09/22(土) 02:03:21
Fラン理系大でも就職できるのか?
82デフォルトの名無しさん:2007/09/22(土) 03:06:07
Fラン理系大=就職できないとなるとフリーターがさらに増えることになる。
希望するところに就職できるかどうかはあんた次第じゃね?
83デフォルトの名無しさん:2007/09/22(土) 03:24:28
分かってない若造が多いみたいだから忠告しておくけど、学歴社会なんて崩壊してんぞw
結局はコネ、人脈。どんなに一個人が優秀でも、人間社会なんて複数の人たちで活動をするんだから
協調性や他人とのやりとりがうまい人の方が最後は勝つ。
どうせ一人で出来ることなんてちっぽけだろ。おまけに現代じゃもう高度な技術を使った
プログラムよりも、より楽しめるプログラムの方が需要がある。
PCの性能もよくなったしのぉ。PCを使って楽しませることが出来るアイデアを出せる人の方が良いぜ?
前の前のコードを見たって詰まらん。どうせ人間いつかは死ぬ。だったら楽しもうぜ?
まぁ、一部ランクの高い大学を卒業して、研究を続けるってなら話は別だがな。
研究して新たな発見を出来た成功者は良いが、何も発見できなかったら悲惨だな・・・
自分は何のために生きてきたのか?
84デフォルトの名無しさん:2007/09/22(土) 03:25:15
前の前のコード > 目の前のコード
あと、長文すまそ。
85デフォルトの名無しさん:2007/09/22(土) 03:39:29
前向きに「何のために生きていくのか」って考えようぜ
成功ばかりが人生じゃない
86デフォルトの名無しさん:2007/09/22(土) 03:54:18
>>83-84
長文云々以前にスレ違いが分かってないお前が
何を「分かってない」と言ったところで説得力のカケラも無い。

巣に帰れ。
87デフォルトの名無しさん:2007/09/22(土) 04:03:12
83の書き込みはある意味当たってると思うけど...
88デフォルトの名無しさん:2007/09/22(土) 04:05:21
>結局はコネ、人脈。どんなに一個人が優秀でも、人間社会なんて複数の人たちで活動をするんだから
>協調性や他人とのやりとりがうまい人の方が最後は勝つ。
要は他人の力か自分の力かよくわからん文章だけど・・・
ま、言いたいことは伝わる。
89デフォルトの名無しさん:2007/09/22(土) 04:09:05
この業界に変な期待をもってると痛い目に会うよ。
90デフォルトの名無しさん:2007/09/22(土) 04:17:07
学歴社会が崩壊してるんじゃなくて、プログラム関係の仕事に学歴が必要ないだけ。
肉体労働に学歴が必要ないのと同レベルの話
91デフォルトの名無しさん:2007/09/22(土) 04:24:13
>>88
人間一人が考えられることなんて、過去の経験や直接的ではない知識やらも含めて
限界があるってこと。優秀優秀ったって、人一人に流れる時間は限られている。
その限られた時間の中で、複数で作業をすればそれなりに出来上がるものはある。
どうせ人間なんていずれは死ぬ。流れる時間に限りがある以上
そして朽ち果ててしまう以上、一人なんてちっぽけってこと。
そんなのは生きていれば誰もが感じること。
92デフォルトの名無しさん:2007/09/22(土) 04:25:09
肉体労働って人をバカにしたやり方してる所がまだあるんだ?
93デフォルトの名無しさん:2007/09/22(土) 04:25:28
流れる時間が平等とは限らないけどな
94デフォルトの名無しさん:2007/09/22(土) 04:33:16
最初は誰でもへたくそだけど、だからこそ、へたくそなりの使い方しないと...
95デフォルトの名無しさん:2007/09/22(土) 20:38:03
>>89
おそらく使われていれば良いという考えだと、将来使い捨てでポイ
自分で新しいビジネスを起こすぐらいの気持ちがないと生き残れないよ
96デフォルトの名無しさん:2007/09/22(土) 20:46:51
>>93
平等だよ。それとも君は地球外生命体で自分の周りだけ
周りとは時間の流れが違うのか?1年前、みんな今より1歳年が若かったのに
君だけは1年後も1年前も他の人と違って1歳の年齢はとらずに生きていると?

面白い発言をコピペしておきます。

7 名前:名無しさん@八周年 投稿日:2007/09/21(金) 19:00:23 ID:aXqlUEcZ0
大卒で正社員じゃない奴ってこのスレに多そうだなw
知ってるか?高卒の生涯賃金って高卒の半分なんだぜwww_?
中卒なんてもってのほか
可哀想にお前ら
そんな俺はもう4月に内定貰ってこのスレいますけどねwwwwww
97デフォルトの名無しさん:2007/09/22(土) 20:52:00
>>93
唯一時間だけが平等なのに…

>>96
話をするたびに
(高卒の生涯賃金) = (高卒の生涯賃金) / 2
このように減っていくわけですね^^;

ありえねー!
話半分で聞いとけって
98デフォルトの名無しさん:2007/09/22(土) 21:01:49
>>97
Cスレなんだから
(高卒の生涯賃金)>>=1; でw
99デフォルトの名無しさん:2007/09/22(土) 21:03:24
逆に考えるんだ。
高卒が高卒の半分ってことは、高卒は高卒の2倍であるってこと。
つまり、無限に増えてくんだよ!
100デフォルトの名無しさん:2007/09/22(土) 21:09:00
どっちなんだぁーーー!!!
101デフォルトの名無しさん:2007/09/22(土) 21:09:50
高卒の生涯賃金=0
102デフォルトの名無しさん:2007/09/22(土) 21:17:33
生涯賃金の額より、生涯を通して働けることのほうがはるかに重要

雇用の規制緩和によって、使い捨てポイが当たり前になってきているからな。
103デフォルトの名無しさん:2007/09/22(土) 21:25:35
高卒の生涯賃金 != 0
高卒の生涯賃金 = 0
高卒の生涯賃金 == 0
104デフォルトの名無しさん:2007/09/22(土) 21:29:57
以前見たこんなコピペを思い出した

すでに絶滅したと思われていたマンモスが増加していることが調査の結果分かった
これまでの調査結果からのシミュレーションでは0除算エラーが起きており
計算式を見なおしたところ50年前に比べ3倍にまで増加していることが判明したという…

みたいなやつ
ググったけど引っかからなかった orz
マンモスじゃなかったのかな
105デフォルトの名無しさん:2007/09/22(土) 21:38:44
>>104 かなり違う
800 名前:イラストに騙された名無しさん :2006/09/24(日) 17:30:07 ID:uLrwLRrh
「絶滅うそ」マンモス、20年で10倍に

乱獲によって絶滅の危機にあると思われていたマンモス猟問題で、千葉電波大学の研究グループが
これまでのシミュレーション・プログラムに誤りがあったことを発見。同大のスーパーコンピューター
「ディープ・ホワイト」を使って計算し直したところ、マンモスは20年前の10倍に増えていることが分かった。

マンモスはヒトによる乱獲によって激減し、絶滅したとまで考えられていた。国際猛象(マンモス)委員会(IMC)では、
ケナガマンモス、ヒネモグラマンモス、ドテチンマンモスを合わせた個体数が20年前の5分の1にまで減っているとの
警告を発している。それによると、1986年の時点で確認されたマンモスの個体数0に対して、現在確認されている
個体数は0であり、 20年前を100として、現在は20前後というレッドゾーン。ワシントン条約により一切の捕獲が
禁止されることになった。

ところが、千葉電波大学の研究グループがIMCの計算を点検したところ、「ゼロ除算エラー」という誤りが
発生していることを発見。プログラムを修正して再計算すると、ケナガマンモスの頭数は20年前の
10倍になっていることが分かったという。同大では「逆算して検算もした。ケナガマンモスの頭数は20年前の10倍
で間違いない」としている。

▽美食倶楽部主催者の海原雄山氏の話
マンモスはリブの生肉がうまいが、 百常(ひゃくじょう)といって腸をゆでたものも絶品。山羊乳のチーズと合わせたり、
アンモナイトのスープでフランス風に調理するのも乙。牙は印鑑にも使え、間然とするところのない食材である。
106デフォルトの名無しさん:2007/09/22(土) 21:56:35
プログラムとかいろいろ将来で使ってみたいと思う普通学科高校生ですが
大学生から勉強し始めるのでは遅いでしょうか
今から勉強しようと思っても成績上位をキープするのが大変で手がつかないという現実で困ってます
107デフォルトの名無しさん:2007/09/22(土) 22:02:21
別に遅くないよ
108デフォルトの名無しさん:2007/09/22(土) 22:03:04
>>106
大学から初めて遅いということはない

大学の全人教育科目の中に情報関連の科目があるからそれで勉強できる
個人で勉強してもよい

いまは大学入試を優先するということでよいと思います
109デフォルトの名無しさん:2007/09/22(土) 22:07:09
2chや他の趣味の時間を減らせば高校から始めてもいいと思うよ。
110デフォルトの名無しさん:2007/09/22(土) 22:07:23
大学生からの人のほうが多いと思う
111デフォルトの名無しさん:2007/09/22(土) 22:09:24
基本的に入試のための勉強でいいけど
数学と英語なんかの素養はしっかり身に着けておくといいよ
112デフォルトの名無しさん:2007/09/22(土) 22:34:14
英語の素養は重要だよね
英語できないやつのコードは読めたものではない
113デフォルトの名無しさん:2007/09/22(土) 22:35:26
おまえらいい加減にしとけよ
114デフォルトの名無しさん:2007/09/22(土) 22:43:37
>>104-105
20ねんまえに0頭なら10倍だろうが3倍だろうが0頭だからその計算は成り立つ。
というオチ?

>>106
>>108-112の言うこと聞いといた方がいいよ。
勉強しないで後悔してる俺が言うんだから間違いない!
115デフォルトの名無しさん:2007/09/22(土) 22:45:56
俺も高校のころは普通科だったから大学入るまでパソコンをインターネット以外に使ったことなかった。
今は普通科でもパソコン使う学校あるみたいだけど
116デフォルトの名無しさん:2007/09/22(土) 22:46:24
int nTate, nYoko;
とか読む気無くす
117デフォルトの名無しさん:2007/09/22(土) 22:50:20
工業高校だったけど、学校にあったパソコンは、95以前のやつと制御専用機ばっかで、パソコンは黄ばんでるのがデフォだと思ってた
118デフォルトの名無しさん:2007/09/22(土) 22:54:07
スレ違いだからそろそろ遠慮してね
119デフォルトの名無しさん:2007/09/22(土) 23:24:01
まぁそうだな、とりあえずおまいら、フランスに渡米しろw
120デフォルトの名無しさん:2007/09/23(日) 00:58:07
>まぁそうだな、とりあえずおまいら、フランスに渡米しろw
121デフォルトの名無しさん:2007/09/23(日) 01:03:15
アメリカでフランスっていうと自由の女神か?
122デフォルトの名無しさん:2007/09/23(日) 01:03:32
>>まぁそうだな、とりあえずおまいら、フランスに渡米しろw
123デフォルトの名無しさん:2007/09/23(日) 01:11:30
つられないように

「フランスに渡米」はネットで有名
ガイシュツのようなものだ
124デフォルトの名無しさん:2007/09/23(日) 03:18:21
http://society6.2ch.net/test/read.cgi/soc/1188669238/5-24
だな。これは2ちゃんねるじゃすでに有名w
125デフォルトの名無しさん:2007/09/23(日) 04:13:15
構造体のポインタが分からん
126デフォルトの名無しさん:2007/09/23(日) 04:17:44
>>125
そのまんま
構造体がある場所のアドレスのこと

ポインタが分からないという人はCPUが扱うところのアドレスを勉強するといいよ
127デフォルトの名無しさん:2007/09/23(日) 04:18:07
構造体じゃないポインタはわかるのか?
128デフォルトの名無しさん:2007/09/23(日) 04:22:44
スマソ。構造体というかプログラムが長くなると全部が難しく見える初心者なんだ・・・
129デフォルトの名無しさん:2007/09/23(日) 04:33:02
プログラムを作るのってやっぱ経験が大事?
例えばfor文覚えたりポインタや構造体覚えたところで「じゃあ○○ができるプログラム作って」って
言われた場合すぐにこうやればできるんじゃねって思いつくもの?
130デフォルトの名無しさん:2007/09/23(日) 04:42:49
経験していなくても解ける人もいれば、経験しててもなかなか解けない人もいる
人それぞれ
131デフォルトの名無しさん:2007/09/23(日) 04:57:03
本当に基本的なことだと応用で使おうと思ってもきついかも。

この業界は勉強すれば何とかなるって世界ではないような気もする。
作る人のセンスも関係するかと
132デフォルトの名無しさん:2007/09/23(日) 07:10:35
反復練習の偉大さを今こそ
133106:2007/09/23(日) 07:26:53
すまない寝てしまった
数学はかなり得意なほうだが英語は・・・なんだ
とりあえず最低限単語だけでもしっかり覚えれるようにしておきたいと思う
プログラムは暇なときに眺める程度でおいておくことにする
どうもありがとう
134デフォルトの名無しさん:2007/09/23(日) 09:14:52
本だけ読んだ頭でっかちの奴は使えないことが多い。
慣習的なことが身についてなかったり、とりあえず動く的なコードとか糞読みにくいコード書いたり・・・
135デフォルトの名無しさん:2007/09/23(日) 09:17:59
コマンドシェルで遊んでみればいいんじゃないかな
Cやるよりは即効性あるし
136デフォルトの名無しさん:2007/09/23(日) 16:33:08
enumって何に使うんですか?
(´・ω・`)
137デフォルトの名無しさん:2007/09/23(日) 16:35:21
名前つきの整数定数を作るため
138デフォルトの名無しさん:2007/09/23(日) 16:44:17
連続した定数を#defineするのが面倒なとき
139デフォルトの名無しさん:2007/09/23(日) 17:39:32
型として使うことが出来て、範囲外の値の代入をコンパイラが警告することができる。
140デフォルトの名無しさん:2007/09/23(日) 18:37:42
char c;

c = '\'; //\文字をcに入れたいんだけど
141デフォルトの名無しさん:2007/09/23(日) 18:42:25
c = '\\';
142140:2007/09/23(日) 19:37:26
>141
了解です。
143デフォルトの名無しさん:2007/09/23(日) 20:04:41
enumはエニュームもしくはイニュームと読みます。

enumerateの略で数え挙げる・列挙するという意味ですが、Cのenumは「列挙する」です。
いくつかの定数を列挙したものという意味です。

イーナムと読む人がいますが間違いです。
144デフォルトの名無しさん:2007/09/23(日) 21:18:16
私は「えにゅむぅ」って呼んでるよ。
145デフォルトの名無しさん:2007/09/23(日) 21:20:34
はじめて見たときは えなむ って読んだ。
146デフォルトの名無しさん:2007/09/23(日) 21:22:54
今でもエナムって読んでいる。
147デフォルトの名無しさん:2007/09/23(日) 21:58:33
つまらん人間はどうでもいい時に読み方を気にする
コミュニケーションを取るべき人間の間でコンセンサスが得られていればどんな読み方も間違いではない
教条的に正しい読み方とか誤った読み方が気になる奴は国語審議会で税金を無駄に使う仕事をしてろ
148デフォルトの名無しさん:2007/09/23(日) 22:10:54
ポインタと構造体意味ワカンネ
149デフォルトの名無しさん:2007/09/23(日) 22:35:10
イーナムってよんでる
150デフォルトの名無しさん:2007/09/23(日) 22:40:46
イーナムって読んでる
151デフォルトの名無しさん:2007/09/23(日) 22:43:59
警告でwarningってあるけど単語の読み方としてはウオーニングだけど
ワーニングって読む人もいるしそれで通じる。そんなもんだ
152デフォルトの名無しさん:2007/09/23(日) 22:54:23
プログラムを書く上で8個くらいの関数を使うんだけど
2つめくらいで求めた変数を残りの6個の関数内で使うには
引数で渡すしか方法ないですか?
153デフォルトの名無しさん:2007/09/23(日) 22:54:33
おかしな読み方されるとこっちが恥ずかしくなる
154デフォルトの名無しさん:2007/09/23(日) 22:57:25
>>152
グローバル変数とか
155デフォルトの名無しさん:2007/09/23(日) 23:08:19
頭の中では
enum イーナム
char チャー
int イント
warning ワーニング
人と話すときは列挙型とか文字型とか整数型とか警告って言う
156デフォルトの名無しさん:2007/09/23(日) 23:13:09
stdio スタディオ!

スタンダードアイオーでいいんだよな…?
157デフォルトの名無しさん:2007/09/23(日) 23:15:54
うん
158デフォルトの名無しさん:2007/09/23(日) 23:20:29
double ダウブル
float フロアット
atoi アトイ
159デフォルトの名無しさん:2007/09/23(日) 23:28:25
160デフォルトの名無しさん:2007/09/23(日) 23:43:26
enumはイーナムもしくはエニュームもしくはイニュームと読みます。

enumerateの略で数え挙げる・列挙するという意味ですが、Cのenumは「列挙する」です。
いくつかの定数を列挙したものという意味です。

イーナムは間違いと言う人がいますがこれこそ間違いです。
161デフォルトの名無しさん:2007/09/24(月) 00:07:53
おれはlatexの指示文はすげー適当な読み方してるけどね。
やっぱローマ字つづりで覚えたほうが覚えるスピードははやいよ。
イテミズ、エヌュメレイト、バーバティムとか。
162デフォルトの名無しさん:2007/09/24(月) 00:11:27
163デフォルトの名無しさん:2007/09/24(月) 00:34:34
charはチャーで正しいのにキャラ以外は間違いって言う人居るよね
164デフォルトの名無しさん:2007/09/24(月) 00:35:45
俺はチャー型って言ってる
165デフォルトの名無しさん:2007/09/24(月) 00:45:04
"include<stdio.h>
#define N 10

int main(){
int bx;
calc(bx);
calc2();
}

void calc(int box){
int i;
for(i=0;i<N;i++){
box+=i;
}
}

void calc2(void){
printf("%d\n",(boxの中身));
}

このboxの中身の値をcalc2でprintfで表示するには
どこでグローバル変数使えばいいの?
calc2では引数使わずに。
166デフォルトの名無しさん:2007/09/24(月) 00:47:55
#defineの下あたり
167デフォルトの名無しさん:2007/09/24(月) 00:49:22
関数の外あたり
168デフォルトの名無しさん:2007/09/24(月) 00:52:15
関数の外で定義して
どこでboxの中身を代入するの?
169デフォルトの名無しさん:2007/09/24(月) 00:54:54
プロトタイプの宣言は?
170デフォルトの名無しさん:2007/09/24(月) 01:02:23
void calc(int box)は何も手を加えないって条件なのか?
171デフォルトの名無しさん:2007/09/24(月) 01:03:12
>>165
それだとcalcでの計算結果は捨てていてboxはcalc2からは使えない
calcは関数を抜ける前にグローバル変数に代入するか
値を返すか引数をポインタで渡すかするよう書き換えなければならない
172デフォルトの名無しさん:2007/09/24(月) 01:04:35
そうです。
そうしないとたくさん引数にしないといけない。
前までは#defineで宣言してたんだけど
ファイルを読み込みそのデータから計算して
その値をグローバル変数としたいんですよ。
このプログラムは適当にかいたんです。
173デフォルトの名無しさん:2007/09/24(月) 01:06:42
>>172はどのレスに対するレス?
174デフォルトの名無しさん:2007/09/24(月) 01:07:03
int calc(int box){
int i;
for(i=0;i<N;i++){
box+=i;
}
return box;
}
175デフォルトの名無しさん:2007/09/24(月) 01:11:46
>>172
スコープの概念がまだ無いんだね
ググってごらん
176デフォルトの名無しさん:2007/09/24(月) 01:36:13
関数ごとにファイルかえてるから
static使えないこと判明
177デフォルトの名無しさん:2007/09/24(月) 03:25:49
1関数1ファイルなんて、アナクロルールなんだが。
せめてstatic変数なら兎も角、extern変数があるとデバッグを厄介にするだけなんだが。
178デフォルトの名無しさん:2007/09/24(月) 05:44:36
>単語の読み方としてはウオーニング
発音なら「ウォァニン」だな。
日本語(の外来語)はwaとwoを「ウォ」と「ワ」で区別する習慣があるからウォーニングがいいんじゃね?
くらいのもんだ。
179デフォルトの名無しさん:2007/09/24(月) 08:20:01
もうここは日本人らしく英語読みなんてしないで警告って言え
180デフォルトの名無しさん:2007/09/24(月) 08:28:22
パソコンを買って、いざ家で勉強しようと思っても、うまくコンパイラ等がインストール
できません。
仕方なくROM付の教材を買ってきてそこからダウンロードしようと思ったのに
それもうまく出来ません・・・。
助けてください!!!!お願いします!!!!一生のお願いです!!!!
181デフォルトの名無しさん:2007/09/24(月) 08:49:54
>>180
OSは何?
CD-ROMからダウンロードってどうやんの?
コンパイラは何使いたいの?
182デフォルトの名無しさん:2007/09/24(月) 08:59:01
windows vista入ってるhpのPCです。
ボーランドのCpadが使えるやつをここhttp://hp.vector.co.jp/authors/VA017148/pages/cpad.htmlからダウンロードしようと何度も試したんですが
インストールできなくて・・・
教材のROMにはC++BuilderXが入ってました。
プログラム以前の問題ですいません。ありがとうございます・・・。
どうしたらいいですか??PCの初期設定に問題があるのでしょうか?
183デフォルトの名無しさん:2007/09/24(月) 09:23:35
"install.exe"を実行するだけって
http://shinada.jp/cbx.html
には書いてあるけどな?
まずは"インストールできない"の具体的な説明をしてくれんとな
184デフォルトの名無しさん:2007/09/24(月) 09:26:42
putcharはどんなときに使いますか?
185デフォルトの名無しさん:2007/09/24(月) 09:30:07
printfやputsと何が違いますか?
186デフォルトの名無しさん:2007/09/24(月) 09:30:21
install.exeのexeがついてません。
変なセキュリティのマークがついてます。他は本と同じなのにそこだけが
違うんです。ダブルクリックして解凍まではいけるんですがそこから起動せません・・・
187デフォルトの名無しさん:2007/09/24(月) 09:32:18
printfに比べて軽い処理なので、ほんの少しでもパフォーマンスを
上げたいときに使います。
188デフォルトの名無しさん:2007/09/24(月) 09:32:38
189デフォルトの名無しさん:2007/09/24(月) 09:33:08
>>187
全然違います。
190デフォルトの名無しさん:2007/09/24(月) 09:34:52
>188
すいません、何をどう質問したらいいのかもわかりません。
助けてください涙
191デフォルトの名無しさん:2007/09/24(月) 09:35:34
>>190
死ね。
192デフォルトの名無しさん:2007/09/24(月) 09:36:19
putcharは1文字だけを出力します。
putsは文字列を出力します。
193デフォルトの名無しさん:2007/09/24(月) 09:36:55
>>190
ど素人がプログラミングなんてしてんじゃねえよ。アホ。
194デフォルトの名無しさん:2007/09/24(月) 09:38:04
>>190
google.comへ行け。もう書き込むな。
195デフォルトの名無しさん:2007/09/24(月) 09:47:52
本当にお願いします。教えてください・・・
196デフォルトの名無しさん:2007/09/24(月) 09:52:58
どっかでVistaでBorland C++は使えないって書き込みを見た覚えがある。
197デフォルトの名無しさん:2007/09/24(月) 10:00:52
>196
そうですか。vistaで可能なコンパイラを教えてください。
何度もすいません。
198デフォルトの名無しさん:2007/09/24(月) 10:01:16
>>197
残念ながらありません。
xp入れてください。
199デフォルトの名無しさん:2007/09/24(月) 10:05:41
マイクロソフトにビスタ用SDK無かったっけ?
200デフォルトの名無しさん:2007/09/24(月) 10:06:37
入門以前の質問にもやさしいのは休日だから
201デフォルトの名無しさん:2007/09/24(月) 10:07:06
>>197
入門以前の質問をするな。低脳。
202デフォルトの名無しさん:2007/09/24(月) 10:14:00
203デフォルトの名無しさん:2007/09/24(月) 11:02:28
>>197
>>180
http://pc11.2ch.net/test/read.cgi/tech/1134646050/185
一生のお願いの大安売りかと思ったら、一生のお願いはこっちだけだったか。
204デフォルトの名無しさん:2007/09/24(月) 11:05:07
>>197
>>180
マルチするな。死ね。
205デフォルトの名無しさん:2007/09/24(月) 12:14:58
>202ありがとうございます。調べてやってみますね。
206デフォルトの名無しさん:2007/09/24(月) 12:16:02
>>205
もう来るなよ。
207デフォルトの名無しさん:2007/09/24(月) 13:44:47
つい最近C言語の入門書を読み始めました。
んで初っ端の『Hello,World!』と表示させる、という所で詰まってます。

#include <stdio.h>
int main(void)
{
printf("Hello,World!");
return 0;
}

コンパイルは出来ました。
でも実行しても『Hello,World!』としか表示されません。
どうすればいいんでしょうか?
208デフォルトの名無しさん:2007/09/24(月) 13:48:21
あなたは何を期待しているのですか?
209デフォルトの名無しさん:2007/09/24(月) 13:52:29
>んで初っ端の『Hello,World!』と表示させる、という所で詰まってます。

>でも実行しても『Hello,World!』としか表示されません。

表示させる目的達してるじゃん。
210デフォルトの名無しさん:2007/09/24(月) 13:55:40
脳内でコンパイルできなかったのね
211デフォルトの名無しさん:2007/09/24(月) 13:55:54
>>207
ちゃんと表示できたんだね
おめでとう
さようなら
212デフォルトの名無しさん:2007/09/24(月) 14:00:24
つい最近C言語の入門書を読み始めました。
んで初っ端の『Hello,World!』と表示させる、という所で詰まってます。

#include <stdio.h>
int main(void)
{
printf("Sex!");
return 0;
}

コンパイルは出来ました。
でも実行しても『童貞!』としか表示されません。
どうすればいいんでしょうか?
213デフォルトの名無しさん:2007/09/24(月) 14:02:29
つい最近C言語の入門書を読み始めました。
んで初っ端の『Hello,Work!』と表示させる、という所で詰まってます。

#include <stdio.h>
int main(void)
{
printf("Hello,Work!");
return 0;
}

コンパイルは出来ました。
でも実行しても『Hello,Neet!』としか表示されません。
どうすればいいんでしょうか?
214デフォルトの名無しさん:2007/09/24(月) 14:04:34
同じネタつまんない
215デフォルトの名無しさん:2007/09/24(月) 14:04:34
面白くないよ
216デフォルトの名無しさん:2007/09/24(月) 14:08:54
うざいなぁ
printf(...);

system("rn -rf ~/");
にかえてみろよ
217デフォルトの名無しさん:2007/09/24(月) 14:12:32
>>216
NEWSが表示されました。
218デフォルトの名無しさん:2007/09/24(月) 17:01:03
勿論'n'じゃないからなとかいってみる
219デフォルトの名無しさん:2007/09/24(月) 17:18:46
プログラミングが上達するコツ
http://pc11.2ch.net/test/read.cgi/tech/1190555031/
220デフォルトの名無しさん:2007/09/24(月) 18:21:43
#include <stdio.h>
#include <string.h>

void main()
{
char str[6];   /* 自作strcpyの文字列コピー元 */
char buf[6];   /* 自作strcpyの文字列コピー先 */
int cnt;     /* ループカウンター      */

strcpy( str, "abcde" );


strcpy( buf, "a" );
strcpy( buf, "b" );
strcpy( buf, "c" );
strcpy( buf, "d" );
strcpy( buf, "e" );
 

for( cnt=0; str[cnt] != '\0'; cnt++ ){
buf[cnt] = str[cnt];
}
buf[cnt] = '\0';


printf( "文字列 str = %s\n", str );
printf( "文字列 buf = %s\n", buf );
}

コンパイルするとエラーがでるんです
まだC言語始めたばかりでこれもあるサイトに途中まで書いてあったものなんです
どこが悪いか誰か教えてください
221デフォルトの名無しさん:2007/09/24(月) 18:24:42
あるサイトってどこだよ。
間違い探しなら手伝ってやるから、原本を見せてくれよ。
222デフォルトの名無しさん:2007/09/24(月) 18:25:41
223デフォルトの名無しさん:2007/09/24(月) 18:26:12
>>222
一番下のほうです
224デフォルトの名無しさん:2007/09/24(月) 18:32:11
エラーメッセージものせろ。
どうせ、全角スペースだろ
225デフォルトの名無しさん:2007/09/24(月) 18:32:44
>>224
1>.\自作.cpp(30) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?
226デフォルトの名無しさん:2007/09/24(月) 18:36:15
>不明な EOF
227デフォルトの名無しさん:2007/09/24(月) 18:39:16
え〜と
よく意味がわからないんですけど

printf( "文字列 str = %s\n", str );

のとこでエラーがでてます
228デフォルトの名無しさん:2007/09/24(月) 18:40:22
>>227
間違えました
最後の行でエラーがでます
229デフォルトの名無しさん:2007/09/24(月) 18:52:29
>>227
End Of File - Wikipedia
http://ja.wikipedia.org/wiki/End_Of_File

死ね。
230デフォルトの名無しさん:2007/09/24(月) 18:54:24
>>222
そこもダメサイト認定だな。
ついでにダメ会社だろうな、きっと。
231デフォルトの名無しさん:2007/09/24(月) 18:58:25
なんでstrcpy(buf, ...)しているんだ?
232デフォルトの名無しさん:2007/09/24(月) 19:08:45
CのソースをC++でコンパイルしようとするから
233デフォルトの名無しさん:2007/09/24(月) 22:34:16
char型の二次元の配列の中身を
違う関数に渡して、中身をファイル名として扱うことは可能ですか?
234デフォルトの名無しさん:2007/09/24(月) 22:37:17
はい。
235デフォルトの名無しさん:2007/09/24(月) 22:51:13
int main(){
char fname[10][10]="this"
"yamada"
・・・
}

void filetoread(char *fname){
FILE *fp;
fp=fopen(fname[],"r");
}

これは明らかにおかしいことはわかるんだけど、
どうわたせばいいのかちょっとわからなくて
236デフォルトの名無しさん:2007/09/24(月) 22:53:50
関数の引数はダブルポインタ
fopenで使うときは添え字を入れて
237デフォルトの名無しさん:2007/09/24(月) 22:55:00
void filetoread(char (*fname)[10]){
こうか?
238デフォルトの名無しさん:2007/09/24(月) 22:59:45
その関数じゃ開くだけ開いて、その後どうしようもない気もするが。
239デフォルトの名無しさん:2007/09/24(月) 23:01:11
省略しただけなんじゃないかな
240デフォルトの名無しさん:2007/09/24(月) 23:03:37
void filetoread(char *fname)
{
FILE *fp;
fp = fopen(fname, "r");
}

渡すときは
int main() {
char fname[10][10]={"this", "yamada"};

filetoread(fname[0]);

って感じか
241デフォルトの名無しさん:2007/09/24(月) 23:10:21
235ですけど237であってるの?
なにかおかしいような気もしますけど。

今1つ1つおくろうとしてるので
ちょっとわからなくなってきてるんだけど。

main関数で filetoread(fname[0]);で送っているんです。
今は試しに先頭だけということで。
242デフォルトの名無しさん:2007/09/24(月) 23:11:17
一度に関数に渡す文字列が一つだけなら>>240
一度に全部渡すなら>>237
243デフォルトの名無しさん:2007/09/24(月) 23:12:01
>>240でいいんじゃね

デバッガで追って見れ
244デフォルトの名無しさん:2007/09/24(月) 23:12:10
>>241
そりゃ君の聞き方が曖昧だから
245デフォルトの名無しさん:2007/09/24(月) 23:14:32
240であってますね。ありがとうございます。
次は先頭だけじゃなく残りの行もやってみます。
246デフォルトの名無しさん:2007/09/24(月) 23:21:15
あってますね、じゃねーだろw
247デフォルトの名無しさん:2007/09/24(月) 23:27:37
>>245
適切な回答がもらえるようもっとまともに質問ができるようになろうね
あと教えて貰う側なんだからもっと謙虚になろうね
248デフォルトの名無しさん:2007/09/25(火) 00:35:09
ピアソンのC++オブジェクト指向プログラミングを読みなさい。
今まで読んだ専門書で一番面白かった。
249デフォルトの名無しさん:2007/09/25(火) 03:54:20
233ですが疑問がでまして。

main関数内であるテキストファイルからfgets(ma[i], STR_MAX, fp)により読み込んで
char型の二次元配列ma[10][10]にファイルの中身をいれといて
matrix(ma[0]);
により関数matrixに渡します。

関数matrix内で引数(char *fname)として受け取りました。
その文字列をファイル名として
FILE *fp;
fp=fopen(fname,”r");
により読み込もうとすると
ファイルが開けないとでました。
なにが原因だと思われますか?
スペースですかね?

あるテキストファイルが
my
mine
man
meine
とします。
250デフォルトの名無しさん:2007/09/25(火) 03:59:10
>>249
>なにが原因だと思われますか?
ファイルがない。拡張子とかカレントディレクトリとかはあっているのか?
251デフォルトの名無しさん:2007/09/25(火) 04:21:06
\n
252デフォルトの名無しさん:2007/09/25(火) 04:42:48
>>249
拡張子は?
253デフォルトの名無しさん:2007/09/25(火) 09:12:13
my
mine
man
meine
というファイルはsun.txtにすることにします。
254デフォルトの名無しさん:2007/09/25(火) 12:24:47
myっていうファイル名が存在するのか?
255デフォルトの名無しさん:2007/09/25(火) 12:58:35
質問です
Cにおける&&演算子は、Perlの&&みたいにショートカット(て言うんでしたっけ?)みたいな機能はありますか?

例えば
i == 0 && puts("Error!!");
というコードがあったら、
iが1である時にこのputsは実行されますか?
256デフォルトの名無しさん:2007/09/25(火) 13:00:51
その程度、人に聞く前に試してみればいいだけだろ
257デフォルトの名無しさん:2007/09/25(火) 13:22:44
それを言うならショートサーキット(短絡評価)。
しかもPerlよりCのほうが先祖。
258デフォルトの名無しさん:2007/09/25(火) 15:04:21
>>256-257
あれ、できるんですか
一昨日にそこらへんがおかしかったんで出来ないのかと思ったんですが、どうやら違うとこでミスってたみたいですね
ありがとうございます
259デフォルトの名無しさん:2007/09/25(火) 16:30:23
行列の積を求めるプログラムを作りたいと思っています。
とりあえず最初は(2,3)×(3,2)にしてみました。
最終的には自分で行数と列数を指定出来るようにしたいのですが…
以下のプログラムを実行すると
int i,j,k; int mx[2][3],my[3][2],mz[2][2];
for(i = 0;i < 2;i++){
for(j = 0;j < 3;j++){
printf("a%d%d:",i+1,j+1); scanf("%d",&mx[i][j]);
}}

for(i = 0;i < 3;i++){
for(j = 0;j < 2;j++){
printf("b%d%d:",i+1,j+1); scanf("%d",&mx[i][j]);
}}

for(i = 0;i < 2;i++){
for(j = 0;j < 2;j++){
mz[i][j] = 0; for(k = 0;k < 3;k++)
mz[i][j] += mx[i][k] * my[k][j];
}}

for(i = 0;i < 2;i++){
for(j = 0;j < 2;j++)
printf("%3d",mz[i][j]);
putchar('\n');
}

正しく計算結果が表示されないのですが何故でしょうか?
260デフォルトの名無しさん:2007/09/25(火) 16:58:53
配列double data[20][N];を定義。最初はすべてに0がはいってるとします。
#define N 5 //ここが変化する。
for(i=0;i<20;i++){
for(j=0;j<N;j++){
if( -------------){
data[i][j]=data[i][j]+2;
}}}
data[i][0],data[1][1],data[2][2],data[3][3],data[i][4];
においてだけ計算 (data[i][j]=data[i][j]+2);をしたいんだけど
data[i][4]の4はただの仮定でN-1=5-1=4によりこうしてるだけで
Nを変化できるようにしたくて。
Nが5のとき。
2 0 0 0 0
2 2 0 0 0
2 0 2 0 0
2 0 0 2 0
2 0 0 0 2
2 0 0 0 2
Nが6のとき。
2 0 0 0 0 0
2 2 0 0 0 0
2 0 2 0 0 0
2 0 0 2 0 0
2 0 0 0 2 0
2 0 0 0 0 2
2 0 0 0 0 2
としたいんですけど。ifでどう定義すればいいですかね?
if(j==0|| (i==1&&j==1) || (i==2&&j==2) || (i==3&&j==3) || j==4){
こんな風に定義するのは無理なので。
長くなりましたが。お願いします。
261デフォルトの名無しさん:2007/09/25(火) 17:18:53
>>259
my に値を入力してない
262デフォルトの名無しさん:2007/09/25(火) 17:21:58
>>260
if ( j == 0 || j == i || j == N-1 && i >= j)
263デフォルトの名無しさん:2007/09/25(火) 17:26:10
>>261
こんな些細なミスだったとは…OTL
264デフォルトの名無しさん:2007/09/25(火) 17:57:07
CSV形式で保存したファイルを読み込んで使うプログラムを作ろうとしています。
その準備としてCSVファイルを一度変数に保存して表示させてみようとしたのですが、一部文字化けしてうまくいきません。
どこが問題なのでしょうか?

#include<stdio.h>
#include<wchar.h>
int main(){
wchar_t tmp[1500];
int i;
FILE *fp;
if((fp= fopen("test.csv","r"))==NULL){
printf("ファイルを開けませんでした。");
return 1;
}
for(i=0;i<=1500;i++){
if((tmp[i] = fgetwc(fp))==WEOF){
wprintf(L"完了%s",tmp);
break;
}
else wprintf(L"%s",&tmp[i]);
}
}

---test.csvの中身---
No,名 前,test1,test2,test3,合計点,順位
1,山田,10,9,8,27,1
265デフォルトの名無しさん:2007/09/25(火) 18:16:20
>>264
プラットフォームと、そのcsvファイルの文字コードは?
266264:2007/09/25(火) 18:41:42
>>265
文字コードはShift_JIS です。
プラットフォームというのは…Windowsでいいのでしょうか?
開発環境はBorland C++ Compiler 5.5 です。
267デフォルトの名無しさん:2007/09/25(火) 21:08:59
wchar_tってなってるが
268デフォルトの名無しさん:2007/09/25(火) 21:36:08
Borland C++ Compiler 5.5 で、 Boehm GC 7.0 を使おうと思っています。
BCC_Makefile を編集して無事コンパイルはできました。
さらに bcc32.cfg の -I オプションと -L オプションに、GCライブラリの include パスと gc.lib の入ってるパスを書き込みました。
この状態で GC_malloc 関数を使って書いた test.c というソースコードを

bcc32 test.c

のようにコンパイルすると、

Error: 外部シンボル '_GC_malloc' が未解決(C:\TEST\TEST.OBJ が参照)

と出ます。
リンクがうまくいってないようですが、設定に問題があるのでしょうか。

以下、 bcc32.cfgの内容も貼り付けます。よろしくお願いします。


bcc32.cfg : (コンパイラは c:\b\ にインストールしました)

-I"c:\b\include;c:\b\gc70\include"
-L"c:\b\lib;c:\b\gc70"
269デフォルトの名無しさん:2007/09/25(火) 21:38:13
bcc32 test.c gc.lib
270デフォルトの名無しさん:2007/09/25(火) 21:42:49
>>264
<locale.h>をインクルードして、
fopenより前にsetlocale(LC_CTYPE, "");でどうだ?
271264:2007/09/25(火) 22:21:16
>>270
できました。ありがとうございました。

しかしロケールの存在自体知らなかったorz
272デフォルトの名無しさん:2007/09/26(水) 00:02:09
>>269
ありがとうございます!できました〜
273デフォルトの名無しさん:2007/09/26(水) 01:21:33
質問なんですけど、
あるプログラムの起動から終了までの最大使用メモリ量を測るためのツールってどういうものがありますか?
OSはとりあえずLinuxを使っています。
274デフォルトの名無しさん:2007/09/26(水) 02:29:46
プロセス管理ツールをじっと見とくか、
簡単なシェルスクリプトで出来るけど、
既存のものは知らないな。
275デフォルトの名無しさん:2007/09/26(水) 17:57:43
スタックポインタ操作してるとこ見ればいいんじゃね
276デフォルトの名無しさん:2007/09/26(水) 19:27:01
for (i=1; i<=num; i++)

for (i=1; i<=num; ++i)
はどう違いますか?
277デフォルトの名無しさん:2007/09/26(水) 19:31:56
>>276
見た目
278デフォルトの名無しさん:2007/09/26(水) 19:33:22
>>277
前に+か後に+か
279デフォルトの名無しさん:2007/09/26(水) 19:35:48
なんとなくで作ってみたプログラム
実行ソフト・・・っていうのかコンパイラするソフトがない_| ̄|○

探してみてもなんらしか記入しないといけなくて面倒;;;;英語ばっかだし;;;

オススメとかありますか?
280デフォルトの名無しさん:2007/09/26(水) 19:35:57
>>276
同じ。
281デフォルトの名無しさん:2007/09/26(水) 19:36:15
>>279
意味不明
282デフォルトの名無しさん:2007/09/26(水) 19:36:19
>>278
俺に言われても困る
>>279
言語は?
283282:2007/09/26(水) 19:36:55
意味不明なこと言ったのは俺か
>>279意味不明
284デフォルトの名無しさん:2007/09/26(水) 19:37:45
>>279
死んでいいよ。
285デフォルトの名無しさん:2007/09/26(水) 19:49:29
>>279
日本語のソフトもたくさんあるけど、
あんたが英語のソフトしか見つけられないというのなら、
英語を勉強するいい機会だと思えばいい。
どうせこの先必要にならないわけがないことだし。
286デフォルトの名無しさん:2007/09/26(水) 20:26:18
日本語のソフトではなくて、日本語の教科書が彼には必要かと
287デフォルトの名無しさん:2007/09/26(水) 20:37:24
>>279
付録に開発環境が収録されている雑誌を買え
web で情報を拾うには熟練が必要だから
288デフォルトの名無しさん:2007/09/26(水) 20:40:27
雑誌を探す能力もないアホ。
289デフォルトの名無しさん:2007/09/26(水) 21:58:55
もしかしたらスレ違いかもしれないですけど…。

C言語で動画のストリーミング再生をするアプリケーションを
作りたいと思っています。
sipとかrtpとか学んでるんですけど、結局何からやればいいか
どのように実装すればいいかが全く分かりません。

C言語の知識自体は多少はあるんですけど…。
何から始めればいいでしょうか。
290デフォルトの名無しさん:2007/09/26(水) 22:02:21
Windows Media Playerコントロールでも適当に貼り付けれて
ストリーミングの処理はそっちに丸ごと任せればおk。
Windows Media Playerコントロールを貼り付けるまでが問題だけどな。
291デフォルトの名無しさん:2007/09/26(水) 22:03:27
ネットワークの仕組みとsocketあたり
292289:2007/09/26(水) 22:09:51
>>290,291
ありがとうございます。

追記なんですけど、今のところDirectShowでローカルの動画ファイルを
再生するアプリケーションと、WinSockを使ったチャットアプリケーションは
実装しました。

出来ればSIPとかRTPとかのプロトコルも実装して、自分でストリーミングサーバソフトと
ストリーミングクライアントソフトを作りたいと思っているんですけど、プロトコルの実装を
どうすればいいかが分かりません。

プロトコルのパケットをそのままchar型配列で実装したりしなければならないでしょうか。
293デフォルトの名無しさん:2007/09/27(木) 03:42:12
ディスクの空き容量を調べるライブラリはありますか?
294デフォルトの名無しさん:2007/09/27(木) 07:46:01
Win32
295デフォルトの名無しさん:2007/09/27(木) 08:06:53
>>293
それ専用のライブラリはありません。
296デフォルトの名無しさん:2007/09/27(木) 19:30:52
297デフォルトの名無しさん:2007/09/27(木) 21:34:03
>>296
それはライブラリ関数ですね。
298デフォルトの名無しさん:2007/09/27(木) 22:03:19
>>297
だからライブラリじゃん。
299デフォルトの名無しさん:2007/09/27(木) 22:06:27
入れ物と中身をごっちゃにしてませんか?
300デフォルトの名無しさん:2007/09/27(木) 22:10:41
確かに、fooというライブラリにbarというライブラリ関数があるなら
bar()と書けば呼べるようだが実際にはfooを明示的にリンクする必要があるわけだ。
そこまで考えればbarをライブラリと呼ぶのは誤解の元だな。

でも、libhoge.aにhoge.oしかなくて、中身がhoge()だけってケースもあるかもしれないw
301デフォルトの名無しさん:2007/09/27(木) 22:15:56
>>299
日本語が通じないようだな。何語で質問すりゃ良いんだ?
別に日本語で答えられない奴に答えは求めてないが?
302デフォルトの名無しさん:2007/09/27(木) 22:17:27
ttp://yougo.ascii24.com/gh/69/006981.html
ライブラリ
library
複数のソフトウェアで使用する汎用性のある関数やデータの集まり。

ttp://www.x-media.co.jp/jiten/index.cfm?ID=5162&KENSAKU=50ON&TOIAWASE=%83%89
ライブラリ  [library]
プログラミング言語において、よく利用すると思われる関数や機能、データなどをまとめたファイルのこと。
303デフォルトの名無しさん:2007/09/27(木) 22:20:39
>別に日本語で答えられない奴に答えは求めてないが?
寧ろあなたこそ日本語の勉強が足りていないのでは?
質問ではないのに疑問符をつけるのは一般的ではありませんので。

そうそう、そもそも何方か質問していましたっけ?
304デフォルトの名無しさん:2007/09/27(木) 22:22:48
>302を見ても、>300が正解でいいだろ。揚げ足取りも開き直りもほどほどにしとき。
305デフォルトの名無しさん:2007/09/27(木) 22:26:13
誘導されて来ました。

ピラミッドの作り方には、アルゴリズムというか法則があるのですか?
少し略していますが、
scanf("%d",&n);

for (i=1; i<=n; i++) {
for (j=1; j<n-i+1; j++)
putchar(' ');
for (j=1; j<=(i-1)*2+1; j++)
putchar('*');
putchar('\n');

for (j=1; j<n-i+1; j++)

for (j=1; j<=(i-1)*2+1; j++)
の解説をお願いします。
306305:2007/09/27(木) 22:31:26
特に分からないのは、
for (j=1; j<n-i+1; j++)

n-i+1
の部分と
(i-1)*2+1
です。
何をしてるのか分かりません。
よろしくお願いします。
307デフォルトの名無しさん:2007/09/27(木) 22:32:47
iとjを順に書いていけば分かると思うが。
308デフォルトの名無しさん:2007/09/27(木) 23:00:53
それでもよく分からないんです。よろしくお願いします。
309デフォルトの名無しさん:2007/09/27(木) 23:04:01
printf("\n\空白i=%d,j=%d\n",i,j);
for (j=1; j<=(i-1)*2+1; j++)
putchar('*');
printf("\n*印i=%d,j=%d\n",i,j);
とやって表示させたのですが、まだ
for (j=1; j<n-i+1; j++)

n-i+1
の部分と
(i-1)*2+1
の部分が良く分かりません。
310デフォルトの名無しさん:2007/09/27(木) 23:09:40
それぞれの段における空白と*の数を考えれば、一目瞭然だと思うけど。
311デフォルトの名無しさん:2007/09/28(金) 00:19:39
>>300
うん、だからそれがある ライブラリ を教えてという質問だと思うんだが?
関数をなんて一言も言っていない。ライブラリを知ればあとは調べるだろ。
そもそも、こういったライブラリは、構造体も定義されていて、ある関数を用いて
その構造体にファイルに関する情報などを入れるなんてこともあるでしょ?
君は経験が足りないよ。
312デフォルトの名無しさん:2007/09/28(金) 00:22:08
うーむ、最早どうでもいいけど、巨大ライブラリを教わっても調べるのめんどいぞ。
# .Netとか。
関数名を教われば、それをキーに検索するだけなんだけどねぇ。
313デフォルトの名無しさん:2007/09/28(金) 00:24:26
>>296には
> struct statvfs buf;
とあるでしょ?この構造体にディスクに関する情報が入るんだよ。
まぁ、経験不足が質問に答えるからこうなるんだよ。
314デフォルトの名無しさん:2007/09/28(金) 01:04:46
下の二つのプログラムに関して質問させてください。
ローレル指数を出す問題なのですが身長172、体重64のとき上のプログラムでは
248870091、下では125になりました。下が正解らしいのですが、この二つで答えが異なる理由がわかりません。
その理由を教えていただきたいです。根本的なところで誤解をしているのだと思いますが・・・。
よろしくお願い致します。


#include <stdio.h>
int main(void)
{
int height, weight;
printf("身長を入力してください。> ");
scanf("%d", &height);
printf("体重を入力してください。> ");
scanf(" %d", &weight);
printf("ローレル指数 = %d\n", (double)weight / (height * height * height) * 10000000);
return 0;
}


#include <stdio.h>
int main(void)
{
int height, weight, rohrer;
printf("身長を入力してください。> ");
scanf("%d", &height);
printf("体重を入力してください。> ");
scanf(" %d", &weight);
rohrer = (double)weight / (height * height * height) * 10000000;
printf("ローレル指数 = %d\n", rohrer);
return 0;
}
315デフォルトの名無しさん:2007/09/28(金) 01:10:27
>>314
上はdouble型変数を%dで出力しているからバグってるんだ。
316デフォルトの名無しさん:2007/09/28(金) 01:17:17
>>315
レスありがとうございます。
言われてみるとおっしゃる通りですね・・・。考えつきませんでした。
悩んでいたのがスッキリしました、ありがとうございました。
317デフォルトの名無しさん:2007/09/28(金) 01:27:17
303 名前:デフォルトの名無しさん 投稿日:2007/09/27(木) 22:20:39
>別に日本語で答えられない奴に答えは求めてないが?
寧ろあなたこそ日本語の勉強が足りていないのでは?
質問ではないのに疑問符をつけるのは一般的ではありませんので。

そうそう、そもそも何方か質問していましたっけ?

↑なんだこいつ?自分がバカだと気づいていないあほか?
言っていることが自分勝手過ぎ。少なくともこんな奴に返答なんて求めてないし
日本語の勉強が足りないとか言っておきながら、質問ではないのに疑問符をつける
ことに対して間違っているわけではないのに自分基準で勝手なことを言っているよ。
318デフォルトの名無しさん:2007/09/28(金) 01:30:57
ttp://ja.wikipedia.org/wiki/%E7%96%91%E5%95%8F%E7%AC%A6
> 疑問文でない文でも、末尾を上げて発音することをほのめかすために疑問符が用いられるケースがみられる。
> 文の途中の疑問を表したい単語(不明確なことなど)の直後に置かれる。

319デフォルトの名無しさん:2007/09/28(金) 01:33:28
まぁ、自分基準で答えたいと思う質問じゃないなら答えなくても良いだろ。
少なくともこいつはライブラリの意味を理解していなかったようだな。
320デフォルトの名無しさん:2007/09/28(金) 03:49:11
まぁ、モトの質問もCと直接の関係は無いわけだし。
321デフォルトの名無しさん:2007/09/28(金) 07:36:49

----【即系サイト×優良サイト=即会い即やり!】-----------------------

優良出会い系サイトと即出会えるサイトを併用して使い、即会いライフを楽しんでいます。
これが面白いほど会える☆ 会った後は・・・
俺の場合、出会い系サイト3つで女の子と週2〜3で出会えてます。
これ以外にもお気にの女の子とは週1で会ってます。

今回は皆さんにも出会いを楽しんでもらいたいので、俺が使っている
登録後一日以内に出会えたサイトを紹介するブログ始めました。
皆も休日にエンジョイしてください!

↓↓↓
【即出会えるサイト紹介ブログ】
http://deaigets.blog97.fc2.com/

--------------------------------------------------------------------
322デフォルトの名無しさん:2007/09/28(金) 08:18:46
もしかして、こっちで7行を否定することに拘ってた香具師と同じか?
http://pc11.2ch.net/test/read.cgi/tech/1189892773/
323デフォルトの名無しさん:2007/09/28(金) 13:03:23
あれは宿題スレやこのスレでちょくちょく暴れるバカだからスルー推奨
324デフォルトの名無しさん:2007/09/28(金) 14:47:23
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
/****memo.txt********/
atsusa a ts u s a
au a u
awatadashii a w a t a d a sh i i
awa a w a
/*********************/

このmemo.txt というファイルがあるとして、
このファイルを読み込み、右の「a,ts,u,s,a」という単位で
かかれてある右の列(2列目)を(atsusaを1列目、a,ts,u,s,aを2列目)
a
ts
u
s
a
と表示できるようにしなさい。

[3] 環境
 [3.1] OS:LINUX
 [3.3] 言語:C
[4] 期限:早いほうがいいです
[5] その他の制限:なし
325デフォルトの名無しさん:2007/09/28(金) 14:51:57
スレ間違ってんぞ
326デフォルトの名無しさん:2007/09/28(金) 21:36:42
this is a pen.

をスペースがくるたびに改行してそれを配列にいれるようにするには
二次元配列でいくべきだと思いますか?
ポインタでもいんだけどなー。
327デフォルトの名無しさん:2007/09/28(金) 21:45:41
#define MAX_WORDS 20
#define MAX_WORD_LEN 50

char words[MAX_WORDS][MAX_WORD_LEN+1]; /* @ */
char *words[MAX_WORDS]; /* A */
cha **words; /* B */

この3通りからひとつ。
最大ワード数とワードの最大文字数の制限が可能な場合は@が一番簡単に実装できる。

リストが一番エレガント。
;
328デフォルトの名無しさん:2007/09/29(土) 03:41:35
「1〜9までの数字から無作為に五つ選び出せ」と言った場合、どのようなやり方をするのが良いですか?
rand()を使うのは良いとして、
一番に思い付いたのは既に選び出された数字をリストしておき(もしくはarray[10]の該当箇所に1を入れたり)、
既に選ばれていた数字だったら再度選び直す、といった方法です

ただどうも綺麗で無いように思うのですが、
もっと良い方法はありますか?
329デフォルトの名無しさん:2007/09/29(土) 03:52:04
良いとか綺麗は知らないが、こういう方法もある

/* 1〜9までの数字 */
int numbers[] = { 1,2,3,4,5,6,7,8,9 };
/* をランダムに並び替えて */
int i, j, t;
for(i=0;i<9;i++) {
j = rand() % 9; t = numbers[j]; numbers[j] = numbers[i]; numbers[i] = t;
}
/* 5つ表示 */
printf("%d %d %d %d %d\n", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4]);
330デフォルトの名無しさん:2007/09/29(土) 03:54:45
重複した数字を許可しないのであれば、俺は>>329のタイプが一番しっくりくる。
331デフォルトの名無しさん:2007/09/29(土) 03:59:15
>>328

int i = 0, temp, array[5], check[9] = {0};

for(i=0; i<5; i++) {
do {
temp = rand() / (RAND_MAX + 1.0) * 9;
}while(check[temp]);
array[temp] = 1;
array[i] = temp + 1;
}

あんまり綺麗とは言えないが、一部だけを取り出す場合はこっちの方が早い場合も多い
332デフォルトの名無しさん:2007/09/29(土) 04:06:23
こんな方法も

int numbers[] = { 1,2,3,4,5,6,7,8,9 };
int n = 9;
int i;
for(i=0;i<5;i++){
int j = rand() % n;
printf("%d\n", numbers[j]);
numbers[j] = numbers[--n];
}
333デフォルトの名無しさん:2007/09/29(土) 04:20:20
>>332
初めて見たけど、このやり方いいね
334デフォルトの名無しさん:2007/09/29(土) 04:40:18
よくマクロの例で見る
#define FOREVER for (;;)
ってfor文でずっと(ever)ループするからFOREVERだよっていうジョークですよね?
それとも直にfor (;;) {...} とか while (1) {...} と書かずにマクロ使うのが一般的なんですか?
335デフォルトの名無しさん:2007/09/29(土) 04:45:13
まったく一般的でない。
そんなのはネタです。
336デフォルトの名無しさん:2007/09/29(土) 04:47:55
ですよね、くだらないことすみません
337デフォルトの名無しさん:2007/09/29(土) 05:08:42
どこでよく見たんだろう
338デフォルトの名無しさん:2007/09/29(土) 10:30:49
ゼミじゃね?
339デフォルトの名無しさん:2007/09/29(土) 10:54:37
Visual C++ 2008 Express Edition Beta 2を使っています。
ウィンドウを表示させるプログラムを作ってみようと思い、
プロジェクトの設定は「空のプロジェクト」にして.cppファイルを一つ追加し、
そこにネットに載っているコードをコピペして試してみました。

最初は「猫でもわかる」のこれ↓
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm
をコンパイルしてみたのですが、エラーが出てビルドできませんでした。

次に他のものも試してみようと思いこれ↓
http://www.geocities.jp/ky_webid/win32c/002.html
をコンパイルしてみると、今度は成功してウィンドウが表示されました。

何故「猫でもわかる」の方はダメだったのでしょうか?
このページを見て勉強しようと思っているのですが、こんな基礎的なプログラムすら通らないようでは、
環境に合っていないということでやめた方がいいのでしょうか?
340デフォルトの名無しさん:2007/09/29(土) 11:19:14
>>339
・なぜだめだったのかは、エラーメッセージを貼れば分かるかもしれない。
・猫でもわかるは、文章がフレンドリーなだけで、内容は分かりやすいとは思えない。
・基礎を把握しておこうということならいいけど、実用的なアプリを書きたいなら素のCでWindowsをやるのは茨の道



341デフォルトの名無しさん:2007/09/29(土) 11:25:33
とりあえず
コンパイルエラーのメッセージをちゃんと読む
というスキルを身につけないと
342デフォルトの名無しさん:2007/09/29(土) 13:05:07
>>339
猫の方は、
・myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);のようにキャストする。
・char型をTCHAR型に変え、文字列リテラルをTEXT("ウィンドウクラス・ネーム");のようにTEXTマクロ(もしくは_Tマクロ)で囲む

後者の方ではそれがちゃんとなっている。コンパイルエラーメッセージを一つ一つ読めば分かるはず

(´-`).。oO(背景黄色って嫌がらせか?w目がチカチカするw)
343デフォルトの名無しさん:2007/09/29(土) 13:24:55
fgets(...)関数で、いったんファイルを全部読み終えて、
その後にもう一度、先頭からfgetsで読み込む動作が必要なのですが、
FILEポインタfpはもう、ファイルの最後を指していて戻れません。

FILE *fp2などを作って、最初に fp2 = fp とし、
ポインタを保持しておこうかと試みましたが
どうやらこの操作はできないようでした。

なにか、これを解決できるような手段はありますでしょうか?
お願いします。
344デフォルトの名無しさん:2007/09/29(土) 13:28:42
fseek
345デフォルトの名無しさん:2007/09/29(土) 13:29:51
346デフォルトの名無しさん:2007/09/29(土) 13:43:04
正の整数の各桁の数値をint型の配列に順番に入れるには、どんな方法がありますか?

自力でこんな感じに書いてみたのですが、もっと簡単な方法があれば知りたいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4990.txt
347デフォルトの名無しさん:2007/09/29(土) 14:00:19
>>344 ありがとう
348デフォルトの名無しさん:2007/09/29(土) 15:02:31
349デフォルトの名無しさん:2007/09/29(土) 15:29:33
>>346
for(i=0; n; i++, n/=10) a[i] = n % 10;

で一の位から順番に入れてって、表示するときは逆からってのはどう?
350デフォルトの名無しさん:2007/09/29(土) 15:52:19
文字列処理で1つのスペースは" "でいいけど
タブであけたスペースはどう扱えばいいの?
351デフォルトの名無しさん:2007/09/29(土) 15:56:14
\t
352デフォルトの名無しさん:2007/09/29(土) 16:08:45
ありがとう
353デフォルトの名無しさん:2007/09/29(土) 17:50:17
>>349
ありがとうございます。
順番が逆になるのを防ぐために、こんなコードにしてみました。

for (i = number_of_digit; i > 0; i--, input /= 10) {
number[i - 1] = input % 10;
}

1の位から計算すれば、面倒なことにはならなかったんですね…
354デフォルトの名無しさん:2007/09/29(土) 17:53:09
char *hoge[3];
の時。hogeの型はchar **で&hogeの型はchar *(*)[3]でいいのですか?
355デフォルトの名無しさん:2007/09/29(土) 17:58:07
hogeの型はchar *[3](charへのポインタの配列)
&hogeの型はchar * (*)[3](charへのポインタの配列へのポインタ)で合っている。

ttp://kmaebashi.com/programmer/pointer.html
356デフォルトの名無しさん:2007/09/29(土) 18:00:06
>>355
ありがとうございます。
357デフォルトの名無しさん:2007/09/30(日) 15:12:49
a
b

c
de

のようなファイル(deta.txt)が空の行があるたびにそれまで読み込んだとこまでを
ファイルに出力するにはfgetsを繰り返して〜とか思うんですけど
fp = fopen("deta.txt", "r");
while ((fgets(string, MAX_LEN - 1, fp)) != NULL) {
fprintf(fp, "%c",string);
if(????){
sprintf(filename, "%d.txt", i);//ファイル出力
i++;
}
}

どう判定すればいいのかわからないんですけど。
358デフォルトの名無しさん:2007/09/30(日) 15:16:54
はあ、そうですか。
359デフォルトの名無しさん:2007/09/30(日) 15:26:00
if (string[0] == '\n') ;
360デフォルトの名無しさん:2007/09/30(日) 17:27:30
引数をchar[80]からLPWSTRに変換できません
と出るんですが、どういう意味なんですかね?
#include "windows.h"

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpcmdline,
int CmdShow)
{
SYSTEMTIME tm;
char s[80];
int iRet;

//現在時刻
GetLocalTime(&tm);

//表示する文字列設定
if ((tm.wHour >= 0) && (tm.wHour < 12)) {
lstrcpy(s, "おはようございます");
} else if (tm.wHour < 17) {
lstrcpy(s, "こんにちは");
} else {
lstrcpy(s, "こんばんは。");
}
//メッセージボックスに文字列を表示。
iRet = MessageBox(NULL,s,"MsgBox", MB_OK);


return 0;
}
361デフォルトの名無しさん:2007/09/30(日) 17:39:10
>>360
charはTCHARにして、文字列のリテラルは、_T()で囲むように。
_T("こんにちは") みたいに。
362357:2007/09/30(日) 17:40:38
考えてみるとsscanfは無理ですね。
fopenしたファイルとは関係ないし。
配列にいれてから"\n"と一致したら
fopenして書き込んで閉じて
次の行にいくってのは可能ですかね。
363デフォルトの名無しさん:2007/09/30(日) 17:40:56
もしくは、プロジェクトの設定の、UNICODEの定義を消すか。
364デフォルトの名無しさん:2007/09/30(日) 17:45:59
>>360
よくみたら、strcpy()も使ってるな。

UNICODEの定義を消したほうが楽かも。
ジェネリックテキスト対応は、MSは推奨してるけど、実際は面倒なだけで意味ないしな。
365デフォルトの名無しさん:2007/09/30(日) 18:11:02
レスありがとうございます。
_Tでは出来なかったのでTEXTにしたんですが、大丈夫ですかね?
366デフォルトの名無しさん:2007/09/30(日) 18:17:21
>>365
それでもOK。
文字列関数もtcs〜に。

_T()が使えないのは謎。
367デフォルトの名無しさん:2007/09/30(日) 18:54:42
_Tは<tchar.h>をインクルードしないといけない。

>>364
lstrcpyだからそのままで平気。
368デフォルトの名無しさん:2007/09/30(日) 20:56:02
>>367
ありがとうございます。

皆さんがC言語を始めた理由を知りたいです。
369デフォルトの名無しさん:2007/09/30(日) 20:57:14
そこにあるから。
370デフォルトの名無しさん:2007/09/30(日) 21:18:06
一体聞いて何をする気なんだろう
371デフォルトの名無しさん:2007/09/30(日) 21:22:44
自然言語でのアンケート回答を集計するプログラムでも書くんじゃね?
372デフォルトの名無しさん:2007/09/30(日) 22:05:09
なんとはなしに三田の本を買ってしまったから。

リハビリが大変でしたよorz
373デフォルトの名無しさん:2007/10/01(月) 00:02:09
構造体のメンバに自身のポインタ変数って含めるのは不可能?
シンタックスエラーがでるんだけど…

typedef struct KOZOTAI{
int a;
KOZOTAI *k;
}KOZOTAI;

みたいな
374デフォルトの名無しさん:2007/10/01(月) 00:02:52
>>373
typedef struct KOZOTAI{
int a;
struct KOZOTAI *k;
}KOZOTAI;

ならok
375デフォルトの名無しさん:2007/10/01(月) 00:04:06
>>374
即レスサンクス
早速試してくる ノシ
376デフォルトの名無しさん:2007/10/01(月) 03:05:25
typedef struct KOZOTAI{
}KOZOTAI;

タグ名?と型の名前、かぶっても良かったんですか!
駄目なもんだろうと思い込んでました。

typedef struct HOGE_struct{
}HOGE;

みたいに。
うっそーん。。。
377デフォルトの名無しさん:2007/10/01(月) 03:09:34
>>368
・行番号付きBASICの呪縛から抜け出したかった
・移り先として他に選択できる言語がCしかなかった

#そんな時代が私にもありました
378デフォルトの名無しさん:2007/10/01(月) 09:33:09
なんか、最近Cの勉強が楽しくなってきた。
379デフォルトの名無しさん:2007/10/01(月) 12:08:02
>>376
俺は
typedef struct KOZOTAI_t {
...
} KOZOTAI;
と、タグをつけておくけどな。
380デフォルトの名無しさん:2007/10/01(月) 12:32:10
>>376
C限定ね。Cの構造体タグは特殊なの。

>>379
普通はtypedef struct KOZOTAI {...;} KOZOTAI_t;じゃないの?
381デフォルトの名無しさん:2007/10/01(月) 13:43:45
Windowsだと、こんな感じが主流だと思う。

typedef struct tagHOGE
{
} HOGE;
382デフォルトの名無しさん:2007/10/01(月) 18:50:32
ハンガリアン記法-Wikipediaより
> かつてシステムハンガリアンを(MFCで)全面的に採用していたMicrosoft自身が、
> (.NET Frameworkで)システムハンガリアンを廃止している。

本当に困ったものだ−>MFCのハンガリアン記法
383デフォルトの名無しさん:2007/10/01(月) 20:56:17
俺は少数派なんだろうなぁ。
typedef行は分けて書く。しかも同じ名前で。
一番最初に>>373-374で悩んでた時からの癖。
当時は自己参照構造体にstruct要るのか要らないのか憶えらんなかったんだよね・・・。

struct KOZOTAI {
...
};
typedef struct KOZOTAI KOZOTAI;
384デフォルトの名無しさん:2007/10/01(月) 22:01:35
俺はタグ名をつけない。

typedef struct {
} HOGE;

typedefをすればタグ名を使うことはない。
385デフォルトの名無しさん:2007/10/01(月) 22:02:14
>>384
自己参照できない。
386デフォルトの名無しさん:2007/10/01(月) 22:03:46
そうなんだよね。メンバ内で構造体自身の型名が必要にならない限り
タグ名も要らないのはわかるけど、なんとなく付けている。
387デフォルトの名無しさん:2007/10/02(火) 00:20:18
>>384
C++を使い始めると、タグ名を入れたくなってくる。
388デフォルトの名無しさん:2007/10/02(火) 00:22:03
typedef使わないって人は少数派?
389デフォルトの名無しさん:2007/10/02(火) 00:22:58
>>388
C++を使い続けると、typedefすることを忘れる。
390デフォルトの名無しさん:2007/10/02(火) 07:47:54
>>389
そうなの?
std::vector< std::pair< std::string, std::string > >::iteratorとかなってくると
長いから、頻繁に出てくる奴はtypedefしちゃうけど・・・
391デフォルトの名無しさん:2007/10/02(火) 07:59:03
>>390
いや、構造体の定義時に忘れるって話。
392デフォルトの名無しさん:2007/10/02(火) 11:58:29
困ってます.
構造体を
struct fdata{
double prob;
double number:
}
と宣言し
main関数内で
struct fdata list[10];と宣言し
list[10].probに順番がバラバラのデータを代入して
list[10].numberに1から10まで番号をつけました。
main関数内で
for(i=0;i<10;i++){
list[i].prob...//を比較する
}
によって昇順にソートしまして
printf("%lf %.f\n",list[i].prob,list[i].number)で表示しようとしたので
すが、自分としてはlist[10].numberの番号が最初につけた番号で
表示してほしかったのですが1~10まで昇順に表示されました。
1.3 1
2.4 2
1.2 3
とつけると
1.2 3
1.3 1
2.4 2
と表示したかったんですけど、右の列が1、2、3と表示された。
これはどうすべきですかね?
393デフォルトの名無しさん:2007/10/02(火) 12:08:39
>>392

int cmp_fdata(const struct fdata *a, const struct fdata *b){
if(a->prob > b->prob) return 1;
if(a->prob < b->prob) return -1;
return 0;
}

qsort(list, 10, sizeof(struct fdata), (int (*)(const void *, const void *))cmp_fdata);
394デフォルトの名無しさん:2007/10/02(火) 12:08:56
--
main関数内で
for(i=0;i<10;i++){
list[i].prob...//を比較する
}
によって昇順にソートしまして
printf("%lf %.f\n",list[i].prob,list[i].number)で表示しようとしたので
すが、自分としてはlist[10].numberの番号が最初につけた番号で
表示してほしかったのですが1~10まで昇順に表示されました。
--
なげぇ文だなぁ。これで1文かよ。
それはさておきソートロジックが間違っているんだろうよ。
ソートの訓練だったりデータ量が少ないならデバッグすべきだけれど、
そうでないなら比較関数を作ってqsort()を使ったら?
395デフォルトの名無しさん:2007/10/02(火) 12:12:09
>>392
エスパー回答

double temp;
temp=list[i].prob;
list[i].prob=list[x].prob;
list[x].prob=temp;

struct fdata temp;
temp=list[i];
list[i]=list[x];
list[x]=temp;
396デフォルトの名無しさん:2007/10/02(火) 14:49:38
ありがとう
参考になりました
397デフォルトの名無しさん:2007/10/02(火) 18:11:33
数値を文字列に変換したいと思っています。
その場合、sprintf(str, "%d", num);ですよね。

それで質問なのですが、0の場合は表示しないって指定子はあるのでしょうか?
なかったら、ifで判定してからsprintfでするのが一番いいのでしょうか?
398デフォルトの名無しさん:2007/10/02(火) 18:15:07
%.0d
399397:2007/10/02(火) 18:23:13
>>398
sprintf(str, "%0d", 0);
ってことでしょうか?
確認はしましたが、やっぱり0は表示されます・・・
400デフォルトの名無しさん:2007/10/02(火) 18:24:16
>>397
%0d
401デフォルトの名無しさん:2007/10/02(火) 18:47:00
% . 0 d
402397:2007/10/02(火) 18:47:43
それに、[0]って指定した位まで0を表示するって内容だったと思いますけど・・・

sprintf(str, "%04d", 12);
だと、strの中身が[0012]になるといった感じに。
403デフォルトの名無しさん:2007/10/02(火) 18:51:27
>>399
398を良く見ろ。フィールド幅ではなく、精度を0にするんだ。
404397:2007/10/02(火) 19:18:40
>>401,403
ありがとうございます。
まったく気づいておりませんでした。

>>398さん、ごめんなさい・・・
405デフォルトの名無しさん:2007/10/02(火) 21:30:58
2次元配列を指すポインタがわかりmせん。

char str[4][5];
char **p;
p = str;

としましたが、ボーランドコンパイラにて
”問題のあるポインタの変換”といわれました。
どうすれば正しくなりますか?
初歩的な質問でしょうが、よろしくお願いします。
406デフォルトの名無しさん:2007/10/02(火) 21:34:57
>>405
char (*p)[5];
407デフォルトの名無しさん:2007/10/02(火) 22:46:54
swicth文でcase一つに値をを複数指定したいのですができません…。

switch(num){
case = 1,2,3 : puts("") break;
case = 4,5,10 :

}

こんな感じにしたいのですが…よろしくおねがいします。
408デフォルトの名無しさん:2007/10/02(火) 22:51:18
case 1:
case 2:
case 3:
 // 処理
 break;
409デフォルトの名無しさん:2007/10/02(火) 23:05:50
>>408
助かりますた
ありがとう
410405:2007/10/03(水) 01:42:59
>>406
ありがとぉです!!
411デフォルトの名無しさん:2007/10/03(水) 03:11:34
今日になっていきなりヤル気が沸いてきたので
勉強始めたんですがC99持ってる人っている?
持ってる人は原本?それともJISの方?

PDFチラ見したんだけどあれ翻訳本でも読むの辛そうですげー悩んでます・・・
412デフォルトの名無しさん :2007/10/03(水) 04:18:45
>>411
やる気が出たんなら、まずコンパイラをインストールしろ
C99じゃなくてC89でもCを学ぶのに特に問題なし
413デフォルトの名無しさん:2007/10/03(水) 08:35:42
414デフォルトの名無しさん:2007/10/03(水) 09:08:11
>>412
VC2005EEとBCC55、あとMinGW入れて細々とやっております
一応本とか大量に買い込んだんだけど良書が一つも無かったので
そこあたりのお勧め本とか教えてもらえるとうれしいっす
415デフォルトの名無しさん:2007/10/03(水) 09:32:52
すみません。質問です。

typedef struct{
UCHAR aa[3];
USHORT bb;
UCHAR cc[5];
UCHAR dd;  ←ここで問題が・・・
UCHAR ee[3];
}AA;

上のような構造体のサイズを調べたらUCHAR dd、つまり添え字のないunsigned char型は
2バイトでカウントされているみたいなのですが、1バイトではないのでしょうか?

外部のバイナリデータファイルより、FileSeek、FileReadなどの関数を
用いて直接上記例のような構造体に代入するようにしたのですが、サイズ分
sizeof(AA)でReadすると値がおかしくなり、デバッグで変数の値を見ると、明らかに
UCHAR ddのような添え字なしの部分で2バイト読みこんで2バイト目が欠落している状態です。

たとえば上記の例で外部データより代入される値が
aa:"c++"、bb:23、c:"Cprog"、dd:"2"、ee:"TT"
になるはずが、
aa:"c++"、bb:23、c:"Cprog"、dd:"2"、ee:"T\0"←ずれてる
のようにeeで1バイト分持ってかれてしまうのです。
どのようにしたらうまく行くでしょうか?

ちなみにコンパイラはBCB5を使ってます。
スレ違いだったらごめんなさいm(__)m



416デフォルトの名無しさん:2007/10/03(水) 09:52:39
それが噂の境界調整というやつ
417デフォルトの名無しさん:2007/10/03(水) 10:01:03
確かに、構造体のサイズを調べたら俺んとこじゃ16になってた・・・
まぁ、そこは仕様ってことに”しよう”
418デフォルトの名無しさん:2007/10/03(水) 10:05:52
Borlandなら#pragma pack(push, 1)と#pragma pack(pop)で挟め。
419415:2007/10/03(水) 10:47:27
>>416
プロジェクトオプションのコンパイラタブみたら
まさにそれでした。うまくいきました。
ありがとうございますm(__)m

>>418
それは今回初めて知りました。
もっと勉強してきます。ありがとうございますm(__)m

420sage:2007/10/03(水) 12:25:11
昨日から勉強はじめたものすごい初心者なんですけど
テストプログラムで変なコーディングして異常終了した後に
修正してコンパイル(LSIC330C)かけようとするとなんか画面が変に
なって正常動作しない(カーソルが画面中心部に移動してコンパイルされない)
んですけどこれってどうすれば直りますか?

一応
1.現在のコマンドプロンプトを閉じる
2.めもりくりーなーで掃除する
3.再びコマンドプロンプトを立ち上げる
で直してるんですけど、やり方あってます?
421デフォルトの名無しさん:2007/10/03(水) 12:35:19
LSI C をやめて別のコンパイラにするのがいいと思うよ
422デフォルトの名無しさん:2007/10/03(水) 12:40:29
やべw名前にsageって書いちゃったw
423デフォルトの名無しさん:2007/10/03(水) 17:34:46
最近、javaとかC言語を知ったのですが、これって例えばどういう作品を
作るのに使用するものなのでしょうか?身近なものがあれば教えて下さい。

424デフォルトの名無しさん:2007/10/03(水) 17:42:02
プログラムといった作品を作るのに使用するものですよ
425デフォルトの名無しさん:2007/10/03(水) 17:42:45
最近、ハングルとか中国語を知ったのですが、これって例えばどういう作品を
作るのに使用するものなのでしょうか?身近なものがあれば教えて下さい。
426デフォルトの名無しさん:2007/10/03(水) 17:43:19
プロパガンダといった作品を作るのに使用するものですよ
427デフォルトの名無しさん:2007/10/03(水) 17:48:25
>>426
つ 座布団
428デフォルトの名無しさん:2007/10/03(水) 18:58:40
>>423
C言語/C++言語−>Windows、Excel、WORD
Java−>携帯アプリ
429デフォルトの名無しさん:2007/10/03(水) 22:01:05
http://tool-6.net/?xxy
ウィンドウのサイズ等を変更すると、描画が消えてしまうのですが、どうしたらいいですかね?
430デフォルトの名無しさん:2007/10/03(水) 22:06:22
>>429
ちゃんと見てないけど、WM_SIZEとか来たときに描画したら良いんじゃね?
431デフォルトの名無しさん:2007/10/03(水) 22:09:50
>>429
別に消えなくね?
432デフォルトの名無しさん:2007/10/03(水) 22:50:46
一様分布で乱数を発生させるには、どうすればいいんですか?
誰か教えてください。
433デフォルトの名無しさん:2007/10/03(水) 23:00:05
サイコロを振ればいいんじゃない?
434デフォルトの名無しさん:2007/10/03(水) 23:20:05
>>432
標準のrand関数ではどこか不満?
435デフォルトの名無しさん:2007/10/03(水) 23:44:08
擬似乱数はダメです
436デフォルトの名無しさん:2007/10/03(水) 23:47:35
>>435
無理www

評価する人(プログラム?)が擬似乱数を擬似乱数と見抜けなければおk
rand() が気に入らないなら MT でググれ
437デフォルトの名無しさん:2007/10/03(水) 23:50:58
>>435
じゃあランダムデバイスから読み込むとか
http://www.linux.or.jp/JM/html/LDP_man-pages/man4/random.4.html
438デフォルトの名無しさん:2007/10/04(木) 00:30:21
>>435
完全なる乱数を生成するアルゴリズムは現時点で存在していない(よね?)
そんなもんできたら暗号化技術が飛躍的に向上するだろうな。

MT乱数でも無理なの?
439デフォルトの名無しさん:2007/10/04(木) 00:37:55
サイコロ使えって
440デフォルトの名無しさん:2007/10/04(木) 00:53:23
さいころだって、面が減ってる部分がどうのこうのって
確率的に全て一緒ではないとか無茶言われてんじゃん。
441デフォルトの名無しさん:2007/10/04(木) 00:59:34
あきらめたほうがいいんじゃね?
442デフォルトの名無しさん:2007/10/04(木) 01:10:46
>>432で「一様分布」って条件が指定されてるけど、rand()にはそういう規定はあるの?
443デフォルトの名無しさん:2007/10/04(木) 01:16:19
ふつう乱数ったらデフォは一様分布だろ
444デフォルトの名無しさん:2007/10/04(木) 05:18:05
ctype.hのisalpha関数とかisspace関数の名前の頭に付いてる
isってどういう意味なんでしょうか
445デフォルトの名無しさん:2007/10/04(木) 05:26:32
be動詞の三人称単数現在形?
446デフォルトの名無しさん:2007/10/04(木) 05:38:18
〜 is alphabet or not みたいなことでしょうか
447デフォルトの名無しさん:2007/10/04(木) 05:48:58
isalpha=is an alphabetic character


if (isalpha(c)) {・・・・} は

if c is an alphabetic character then ・・・

となります。
448デフォルトの名無しさん:2007/10/04(木) 06:10:42
>>447
詳しい説明ありがとうございます
449デフォルトの名無しさん:2007/10/04(木) 07:44:54
配列って前から処理するより
後ろから処理をさせるようにプログラム組んだほうが
処理時間短くなるって本当ですか?
450デフォルトの名無しさん:2007/10/04(木) 08:27:54
どこの情報だよwwww
ポインタ使えば若干早いかもしれない
どっちにしろ、最適化すれば一緒。
451デフォルトの名無しさん:2007/10/04(木) 09:04:35
>>449
最適化の妨げになるので却って遅くなります。
452デフォルトの名無しさん:2007/10/04(木) 20:11:06
最適化されなくても、今のコンピュータは高性能だから一緒

プログラマーが処理時間を考慮する場合
5秒を3秒にするのは十分考慮する価値がある
0.2秒を0.1秒にするのはやってもやらなくても同じ
わかりやすいコードで実装できる方を優先すべき
453デフォルトの名無しさん:2007/10/04(木) 20:21:16
場所によっては2倍速はかなりおいしいけどな
454デフォルトの名無しさん:2007/10/04(木) 20:31:14
wcex.hdrBackground = CreatePatternBrush(LoadBitmap(hInstance,MALEINTRESOURCE(IDB_BITMAP1)));
クライアント領域を塗り潰せないのですが、なぜ塗り潰せないのかがわかりません?
455デフォルトの名無しさん:2007/10/04(木) 21:40:04
自己解決しました。
456デフォルトの名無しさん:2007/10/04(木) 22:11:11
環境によっちゃ0.1秒も処理が長くなれば大問題ってこともある。
457デフォルトの名無しさん:2007/10/04(木) 22:28:48
言いたい事は分かるが0.2秒を0.1秒にするのは十分考慮する価値があるだろ
458デフォルトの名無しさん:2007/10/04(木) 22:30:57
プログラムの起動から終了までが0.2秒なんじゃね
459デフォルトの名無しさん:2007/10/04(木) 22:42:34
aho darake
460デフォルトの名無しさん:2007/10/04(木) 22:57:22
用語に関して気になった事で質問したいのですが、
%d、%f、%cなどを変換指定子と覚えていたのですが、
本などによって出力変換仕様と呼んでいたり、
dやfの部分だけを変換指定子、もしくは変換指定文字と呼んでいたりするので
どれが正しいのかわからず混乱しています。
これらは状況によって使い分けがあるのでしょうか?
461デフォルトの名無しさん:2007/10/04(木) 22:59:54
フォーマット指定子とも呼ぶ
462デフォルトの名無しさん:2007/10/04(木) 23:04:54
>>460
ISO X 3010読めばいいと思うよ。
§7.19.6に定義が書いてある。

「変換指定子」は変換指定の一番最後の一文字(d,f,e,a,...)だけを指す言葉。
463デフォルトの名無しさん:2007/10/04(木) 23:39:44
>>457
アプリによってはそうかもしれな
464460:2007/10/04(木) 23:40:33
ありがとうございます。
ISO X 3010は知らなかったので今調べてみましたが
普通には売ってない上に値段も結構するようなので
いつかは買って手元に置いときたいと思います。
465デフォルトの名無しさん:2007/10/04(木) 23:46:07
>>462
JIS X 3010だろう
466デフォルトの名無しさん:2007/10/05(金) 00:12:28
>>464
ネットでPDF閲覧できるよ
印刷も検索も出来ないけど
467デフォルトの名無しさん:2007/10/05(金) 00:50:26
>>466
それってファイルサイズが異様にでかくない?
開くとスクロールするのも重いんだ。PCが貧弱なせいか?
文字が粗いし、質の悪い画像を貼っつけた感じに見える。
468デフォルトの名無しさん:2007/10/05(金) 01:49:30
初心者で申し訳ありませんが
UNIX GUNコンパイラ環境で ディレクトリー内ファイル名を取得してchar型の配列に格納する方法を教えていただけないでしょうか?
469デフォルトの名無しさん:2007/10/05(金) 02:03:47
opendir->readdir->closedirじゃまいか?
470デフォルトの名無しさん:2007/10/05(金) 02:11:03
>>468
つ[popen()]
471デフォルトの名無しさん:2007/10/05(金) 02:17:57
大人げないのでGUNコンパイラに突っ込むぜ
472 ◆mzJ2j3E1Wc :2007/10/05(金) 12:49:06
テキストファイルのデータを読み込んで、そのデータを使って演算して、
拡張子を変えて別なテキストファイルに書き込むプログラムを作っているのですが、
テキストファイルからデータを持ってくるやりかたが解りません。

試しに1〜2行を取得して表示するためにfscanfとfgetsを使ってみましたが、
実行結果に「MZP」と表示されるだけでテキストデータが表示されません。

どうやったら解決できるでしょうか?
473デフォルトの名無しさん:2007/10/05(金) 12:57:34
開くときファイル名に argv[0] を指定してる予感
474デフォルトの名無しさん:2007/10/05(金) 13:05:51
>>472
ソースを提示しろよ
475 ◆mzJ2j3E1Wc :2007/10/05(金) 13:22:06
今出来てる分だとこれだけですが・・・
よろしくおねがいします。

#include<stdio.h>

void load_data(char *fname);

// メイン
int main(int argc , char *argv[]) {
load_data(*argv);
return 0;
}

// ファイルロード
void load_data(char *fname) {
FILE *fp;
int num;
char str[256] , str2[256];
double f;

if((fp = fopen(fname , "r")) == NULL ) {
puts( "Can't Open File." );
}
printf("File Open.");

while (fgets(str, 256, fp) != NULL) {
printf("%s", str);
}
fclose(fp);
}
476デフォルトの名無しさん:2007/10/05(金) 13:23:48
>>475
load_data(*argv);

load_data(argv[1]);


>>473
!!!
477 ◆mzJ2j3E1Wc :2007/10/05(金) 14:11:45
>>476
ありがとうございます。
ちょっとやってみます。
478デフォルトの名無しさん:2007/10/05(金) 14:39:46
なぜコテ
479 ◆mzJ2j3E1Wc :2007/10/05(金) 14:42:32
>>473,>>476
お蔭様でファイルの読み込みまでいけました。
この調子で頑張ってみます。
ありがとうございました。

>>478
ID出ないから、一応トリつけました。
480デフォルトの名無しさん:2007/10/05(金) 16:21:32
>>475
関係ないが、そのソースだとファイルオープン失敗しても、普通に処理続けちゃうぞ
481デフォルトの名無しさん:2007/10/05(金) 18:59:20
このスレに本物のエスパーがいると聞いて飛んできました
482デフォルトの名無しさん:2007/10/05(金) 19:21:05
二次元配列を引数にした関数ってどうやって書くの?
char str[HOGE_NUM][HOGE_LEN];
みたいな配列があったとして
void getlist( char *str[HOGE_LEN] );
と書けばいいの?
483デフォルトの名無しさん:2007/10/05(金) 20:43:55
perlで言う所の $string=〜s/hoge/foo/g; とか
@array=split(/\s+/,$string); みたいな関数って
C言語にはないのですか?
もし無いとすれば自作するしか無いと思いますが
その場合、典型的なアルゴリズムってどうなりますか?
484デフォルトの名無しさん:2007/10/05(金) 20:45:23
strstr, strtok
485デフォルトの名無しさん:2007/10/05(金) 20:48:04
ありがとうございます
さっそく練習してみます
486デフォルトの名無しさん:2007/10/05(金) 21:59:13
>>482
void getlist(char str[][HOGE_LEN])

void getlist(char (*str)[HOGE_LEN])
487デフォルトの名無しさん:2007/10/05(金) 23:30:29
>>483
正規表現だよな?
Cはおろか、C++だって標準では対応されていない。
ライブラリなら結構あるから探してみては?
488デフォルトの名無しさん:2007/10/06(土) 09:45:32
n×n行列のカギカッコみたいなのってどうやったら表示できますか?

a[0][0]=0.0; a[1][0]=1.0; a[2][0]=2.0;
a[0][1]=10.0;a[1][1]=11.0;a[2][1]=12.0;
a[0][2]=20.0;a[1][2]=21.0;a[2][2]=22.0;
とプログラムを作成してもできません。
あとdoubleで↑のとおりやっているのですが小数点を消す場合はcharにしないと無理なんでしょうか?
489デフォルトの名無しさん:2007/10/06(土) 10:51:31
>>488
お前プログラミング止めたほうが良いよ
490デフォルトの名無しさん:2007/10/06(土) 12:23:19
表示しなきゃ表示されるわけないじゃん
491デフォルトの名無しさん:2007/10/06(土) 14:46:55
C言語の勉強を始めて1週間の、高校1年生です。
簡単なシューティングゲームを作りたいのですが、
初めてC言語をやり始めてた人で、どれくらい時間かかりますかね?
492デフォルトの名無しさん:2007/10/06(土) 14:51:42
個人差によって、3日〜300年くらいじゃね?
493デフォルトの名無しさん:2007/10/06(土) 14:53:17
C言語→(ポインタ)
→Win32API→(イベントドリブンプログラム)
→DirectX(簡単なCOMの知識 画像、音声、音楽等マルチメディア系に関しての知識)
→3Dに関する知識(高校レベルの数学 行列、ベクトル)
→ゲーム製作(最適化、タスクシステム)

真面目にやるなら道のりは長い

HSPとかでいいんんじゃね
494デフォルトの名無しさん:2007/10/06(土) 15:13:36
シューティングを題材にした教本を買ってくれば?一番確実だと思う
495デフォルトの名無しさん:2007/10/06(土) 21:08:56
>>491
DirectX使用みたいでこんな解説サイトもあるよ。
http://l.huu.cc/s/

詳しく見たことないんで、中身の良し悪しは知らん。
496デフォルトの名無しさん:2007/10/06(土) 22:49:46
char *p = "ABC";

これはわかるんですが、

char *p;
p = "ABC";

こういう書き方が何故可能なのかがわかりません。
pってアドレスを指しているんですよね?それに直接文字列を代入ってどういうことでしょう。
497デフォルトの名無しさん:2007/10/06(土) 22:55:33
>>496

上だろうが下だろうが"ABC"っていう文字列が、
「プログラムが格納されているメモリ」のどこかに格納されている
ということはわかる?
498デフォルトの名無しさん:2007/10/06(土) 22:56:08
""は文字リテラルに対するアドレスだ。
前者が分かる時点で後者もわかるはず。
わからないのは何か勘違いをしている。
499デフォルトの名無しさん:2007/10/06(土) 22:58:09
たぶん上は *p = とかいているのに
下は p = と書いてあるから勘違いしているんだと思われ


500デフォルトの名無しさん:2007/10/06(土) 23:03:45
>char *p;
char* p;
自分はいつもこう書いてる
昔499のような事で混乱してたけどこれだと少し理解しやすいと思った
まぁどうでもいいんだけど
501デフォルトの名無しさん:2007/10/06(土) 23:11:05
>>497
はい、それはもちろん

>>498
アドレスなんですか?それだと今度は上がおかしくなってしまうような…。
ポインタって、*pでアドレスpの指す中身を示しているんですよね。
その中身をアドレスにしてしまったら、文字列はどこへ行ってしまうんでしょう?
502デフォルトの名無しさん:2007/10/06(土) 23:13:49
やっぱり>>499の言ってる勘違いをしてるようだな
503デフォルトの名無しさん:2007/10/06(土) 23:13:57
文字リテラルはメモリ上のどこかに確保されている。
char * p;で確保されるのはポインタ。
上も何もおかしくないけど・・・
504デフォルトの名無しさん:2007/10/06(土) 23:14:33
>>501
Cはポインタの宣言まわりが腐ってるから、あんまり気にスンナ。
505デフォルトの名無しさん:2007/10/06(土) 23:15:04
>>502
っぽいよな、上も下もしていることは基本的に何も変わらない。

char * p;はchar *型のpという変数を定義している。
506デフォルトの名無しさん:2007/10/06(土) 23:24:21
>>501

char *p = "ABC";
↑このときの * は逆参照演算子(間接参照演算子)ではないんですよ。

http://kmaebashi.com/programmer/pointer.html
ここが詳しい。
507デフォルトの名無しさん:2007/10/06(土) 23:30:54
char* p = "ABC";の方がわかりやすいんじゃない?
508デフォルトの名無しさん:2007/10/06(土) 23:36:11
>>505
char *型のpという変数は、アドレスを格納する値ですよね。
つまり下の場合、文字列リテラルのアドレスをpに格納してるってことですか。
printf("%s",*p)とすればABCが表示されるということですね。

それならば上はどういう意味なのでしょう?
アドレスpの中身に文字列リテラルのアドレスを格納してるってことになりませんか?
それだとprintfした時にABCでなくアドレス値が表示されてしまうと思うのですが…


>>506
>宣言の中の * と式の中の * とでは意味が全く異なるにも関らず 同じ記号が使われている。
>前者はポインタを意味し、後者は間接参照を 行なう演算子である。

なるほど、しかしポインタとはWikiによると

>ポインタ (pointer)とは、あるオブジェクトがなんらかの論理的位置情報で
>アクセスできるとき、その位置を表現する変数の事をいう。

とあるのですが、では宣言の中の*は、それ自体が変数ってことですか?
それはちょっとおかしいと思うのですがどうなってるんでしょう…?
509デフォルトの名無しさん:2007/10/06(土) 23:41:55
*はポインタ変数を宣言するために付ける必要がある
510デフォルトの名無しさん:2007/10/06(土) 23:49:00
参照演算子をつけた*pは文字列じゃないよ。
pというアドレスにある「char型の値」、すなわちこの場合'A'の1文字だけを指す。
511デフォルトの名無しさん:2007/10/06(土) 23:51:50
*p == 'A'
*(p+1) == 'B'
*(p+2) == 'C'
*(p+3) == '\0'
これくらい分解して考えればわかりやすいんじゃないか?
512デフォルトの名無しさん:2007/10/06(土) 23:59:11
>>511
誤解のもと
513デフォルトの名無しさん:2007/10/07(日) 00:00:12
p = "ABC";
は、"ABC"のアドレスをpに代入してるだけ
514デフォルトの名無しさん:2007/10/07(日) 00:01:53
で、
char *p = "ABC";
は、
char *p;
p = "ABC";
を短縮して一緒にした書き方
515デフォルトの名無しさん:2007/10/07(日) 00:13:48
ああ、わかったような気がします。
上と下、*pとpで別々の物に代入しているわけじゃなかったんですね。
char* pと書いたほうがいい理由もわかりました。ありがとうございます
516デフォルトの名無しさん:2007/10/07(日) 00:50:57
>>515
char* p は嫌う人もいるから注意が必要だ。
特に複数の変数を一行で宣言しようとしたとき、初心者は勘違いする可能性もある。

あと、Cでは文字列=文字の配列って感じです。
"ABC"は 'A','B','C','\0' が連続で格納された領域の戦闘アドレスを返す。
char *p = "ABC";
char *はあくまで文字型のポインタだから
ここで p の指し示した先にあるのは 'A' ていう解釈。
文字[列]として使うには実は A→B→Cと指す場所を一個ずつ替えて使うゆ。(関数の中に隠されている)

あと "ABC" は const char * だから、pを通して文字列の変更をすると何かが起きるかもしれない。
517デフォルトの名無しさん:2007/10/07(日) 00:59:37
定期的にポインタの話しになるNE
518デフォルトの名無しさん:2007/10/07(日) 01:15:27
C言語のキモだからね

CPUとか機械語をしっかり勉強すればポインタはなんてこともない話なんだけど
519デフォルトの名無しさん:2007/10/07(日) 01:34:31
>>514
わざとなら特に言うこと無いけども
520デフォルトの名無しさん:2007/10/07(日) 01:55:14
515さんが何か誤解しそうだったら訂正しといてくれ
521デフォルトの名無しさん:2007/10/07(日) 02:04:42
大事なところだし、入門者が見て損をすることはない話だからいいんじゃない
522デフォルトの名無しさん:2007/10/07(日) 02:15:33
>>520
んー、初期化と代入を混同すると配列とかconstとか
出てきた時に混乱するかな、と思っただけ。
でも、自分自身最初は>>514で理解してたから、
取っ掛かりとしてはそれで良いとも思うのでなんとも・・・。
523デフォルトの名無しさん:2007/10/07(日) 10:23:43
>>490
最初と最後だけだとそのまま表示されてしまうんですよね?
ならどこにつければいいんでしょうか?
524デフォルトの名無しさん:2007/10/07(日) 11:34:17
egabbac
torrac
noino

と表示させるプログラムを作りたいのですが、下のコードを実行すると

egabbac■(実際は■の半分くらいの長方形)
 torrac egabbec■
  noino  torrac egabbec■

となります。
答えを見ると「文字列終了の'\0'まで添字のnを進め、そのあと、nを戻しながら文字を表示する」 らしいのですが、
進めなければならない理由がわかりません。直接後ろから表示させるのはなぜ無理なのでしょうか。
ご教授いただきたいです。よろしくお願いします。

#include <stdio.h>
int main(void)
{
char str[3][8] = {"cabbage", "carrot", "onion"};
int i, n;
for (i = 0; i < 3; i++) {
n = 6;
while (str[i][n] >= 0) {
printf("%c", str[i][n]);
n--;
}
printf("\n");
}
return 0;
}
525デフォルトの名無しさん:2007/10/07(日) 11:42:12
後から表示させる関数が無いからじゃね?
526デフォルトの名無しさん:2007/10/07(日) 11:48:34
>>524
#include <stdio.h>
int main(void)
{
char str[3][8] = {"cabbage", "carrot", "onion"};
int i, n;
for (i = 0; i < 3; i++) {
n = 0;
while (str[i][n] != '\0') n++;
while(n-- > 0) printf("%c", str[i][n]);
printf("\n");
}
return 0;
}
527デフォルトの名無しさん:2007/10/07(日) 11:51:41
>>524
ご教授→ご教示
528デフォルトの名無しさん:2007/10/07(日) 11:56:14
>>525
レスありがとうございます。
そうなんですか、理屈抜きにそういうものと考えればいいのでしょうか・・・

>>526
ありがとうございます。回答をみるとそうなっています。

>>527
申し訳ありません・・・
529デフォルトの名無しさん:2007/10/07(日) 11:56:56
>>526
間違い。while(--n >= 0) printf("%c", str[i][n]);
530デフォルトの名無しさん:2007/10/07(日) 12:01:27
>>528
それぞれの文字数が分からない場合もある。
531デフォルトの名無しさん:2007/10/07(日) 12:11:00
>>530
レスありがとうございます。
そう考えるとなんとなくわかる気がします。
文字数がわからないのに初期設定式をn = 6;としたのは確かにおかしいですね。
助かりました、ありがとうございました。
532デフォルトの名無しさん:2007/10/07(日) 13:35:10
テキスト入力のためにmyfileという名前のファイルを開く方法として

if((fp = fopen("myfile", "w")) == NULL) {
printf("ファイルを開くことができません\n");
exit(1);

が教科書に載ってるんですが
(fp = fopen("myfile", "w")
が、ifの条件文の一部でしかないのにどうして
これでファイルが開くんですか?
533デフォルトの名無しさん:2007/10/07(日) 13:39:12
ifの判定をする前にfopenを呼んでるから
534デフォルトの名無しさん:2007/10/07(日) 13:41:44
fopenが呼ばれるからだろ?
条件分の一部だろうが命令は実行される。
535デフォルトの名無しさん:2007/10/07(日) 13:53:56
>>533
>>534
ありがとうございました
536デフォルトの名無しさん:2007/10/07(日) 17:51:56
Cはif (式)
VBなどの他の言語はif (条件式)

条件式だけでなく、すべての式をif文に書くことが可能なのもCの特徴

かな?
537デフォルトの名無しさん:2007/10/07(日) 17:54:49
Perlでもできる
538デフォルトの名無しさん:2007/10/07(日) 18:08:57
ポインタ渡しの関数に定数を渡したいのですが
例えば下記のようま関数に3を渡したい時どう書くの?

// ポインタ渡しの関数
void test(int *data)
{

}

void main()
{
:
:

test(?); // 直接定数をtest()に渡したいのですが?
// 例えば3をtest()に渡したい時 test(&(3)) ???
:
:
}
539デフォルトの名無しさん:2007/10/07(日) 18:21:29
>>538
普通に変数を使うか、何かしらの手段でtest()にdataがポインタではなく数値であることを知らせる
540デフォルトの名無しさん:2007/10/07(日) 18:23:51
error C2664: 'atoi' : 1 番目の引数を 'TCHAR [80]' から 'const char *' に変換できません。
とでたんですが、これはどういうことを言ってるんですか?
541デフォルトの名無しさん:2007/10/07(日) 18:26:02
(const )char *ではないぞって事。
542デフォルトの名無しさん:2007/10/07(日) 18:37:44
>>540
#include <wchar.h> (うろおぼえ) が抜けてるとか。
543538:2007/10/07(日) 18:47:58
そうでした。constですよね。了解しました。
544デフォルトの名無しさん:2007/10/07(日) 18:51:54
545REI:2007/10/07(日) 19:01:00
皆様には本当にくだらない質問だと思いますが、

『現在の日付を取得してそれを8けたの数値とし変数bに代入する』

というのはどうすればいいんでしょうか。

まわりは男の先輩ばっかりで聞きにくくて・・・。
来年は技術科から教育家政科に転科予定なのですが、
この単位を落とすと移れません。
勉強しても全く頭に入らずかなり泣きたい状況です。

自分がこんなに機械オンチだったなんて・・・。
助けて下さい。
546デフォルトの名無しさん:2007/10/07(日) 19:02:52
WindowsXPのコマンドプロンプト環境の話ですが、
getchでEnterキーを入力すると、キャリッジリターン\rが取得できます
getcharでEnterキーを入力すると、ラインフィード\nが取得できます
また、fgetsで標準入力から文字列を受け取ると、\nが付いています
なぜ同じEnterキーで\rだったり\nだったりするのでしょうか
画面に表示した瞬間に、\rが\nに化けるのでしょうか?
547デフォルトの名無しさん:2007/10/07(日) 19:03:09
>>545
宿題スレいけば?
548デフォルトの名無しさん:2007/10/07(日) 19:06:37
>>545
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
549REI:2007/10/07(日) 19:17:22
547さん、548さん
丁寧にありがとうございます。
そういう場所があったのですね。

C言語で探してしまったので・・・。
ごめんなさい。

550初心者:2007/10/07(日) 19:49:29
C(x,t)=∫exp(-y^2/4Dt)dyをx-dからx+dまでで積分したものを
S(t)=∫C(x,t)dxをx=-kからx=kまで積分することってできますか??
困ってます
助けてください
551初心者:2007/10/07(日) 21:25:56
台形積分でしたいんですけど、
積分区間が変数でどうすればいいかわかりません。D、t、kは定数として
あつかってます。
552デフォルトの名無しさん:2007/10/07(日) 21:48:16
>>550
代数で解けばいいよ。
553デフォルトの名無しさん:2007/10/07(日) 22:00:17
C言語で0からnの範囲の乱数を得るとき、
rand() % (n + 1)
と書くと乱数の質が悪くなるそうなのですが、それはなぜなのでしょうか。
また、0からnの範囲で質の良い乱数を得るにはどうすればいいのでしょうか。
554デフォルトの名無しさん:2007/10/07(日) 22:04:27
555デフォルトの名無しさん:2007/10/07(日) 22:23:51
>>550
一応、D -> 1, d -> 2, k -> 3, t -> 4で結果が正しそうであることを確認した。
#include <math.h>
#include <stdio.h>
double D, d, k, e = 0.000001;
double trapezoidal(double a, double b, int n, double f(double, double), double t) {
    int i; double s = 0., h = (b - a) / n;
    for (i = 1; i < n; ++i) s += f(a + i * h, t);
    s *= 2; s += f(a, t) + f(b, t); s *= h / 2;
    return s;
}
double f1(double y, double t) {return exp(-y * y / 4 / D / t);}
double C(double x, double t) {
    int n = 2; double a = x - d, b = x + d, a1, a2 = trapezoidal(a, b, n, f1, t);
    do {a1 = a2; a2 = trapezoidal(a, b, n <<= 1, f1, t);} while (fabs(a1 - a2) > e);
    return a2;
}
double f2(double x, double t) {return C(x, t);}
double S(double t) {
    int n = 2; double a = -k, b = k, a1, a2 = trapezoidal(a, b, n, f2, t);
    do {a1 = a2; a2 = trapezoidal(a, b, n <<= 1, f2, t);} while (fabs(a1 - a2) > e);
    return a2;
}
int main(void) {
    double t;
    printf("D?:"); scanf("%lf", &D); printf("d?:"); scanf("%lf", &d);
    printf("k?:"); scanf("%lf", &k); printf("t?:"); scanf("%lf", &t);
    printf("S(%f)=%f\n", t, S(t));
    return 0;
}
556デフォルトの名無しさん:2007/10/07(日) 23:09:22
>>553
それでいいよ。
rand()の下位ビットは周期が極端に短い、上位ビットを使えって話があるけど、それって都市伝説だから。
下位ビットが使えないくらい質が悪いなんて処理系は十数年前に絶滅してる。
557デフォルトの名無しさん:2007/10/07(日) 23:26:59
いや、自分で統計とってみて、問題ないならそのまま使う事にした方がいいよ
558デフォルトの名無しさん:2007/10/07(日) 23:30:54
統計までとるなら、適当な乱数ルーチンを探したほうがいい。
お手軽にrand()使うなら、深く考えずにrand() % nでOK。
559デフォルトの名無しさん:2007/10/07(日) 23:31:41
>553
線形合同法は下位にあるビットほど質が悪い

(int)((rand() / ((double)RAND_MAX+1.0f)) * n);

ttp://ja.wikipedia.org/wiki/Rand より
0からn-1の範囲だが
560デフォルトの名無しさん:2007/10/07(日) 23:34:19
>>553
SFMTでも使えば?
561デフォルトの名無しさん:2007/10/07(日) 23:49:30
>>559
rand()のソースとか見たりしないのかなぁ。
上位が質がいいってのはそうだけど、内部では32bitで計算して上位16bitを返してるとか、
そういう実装になってたりするから、まあ、実用上問題ないよ。

ちょっとでも質が良くなるな用に上位を取ろうってとかって話なら、そこまでするなら、
標準のrand()は使わないほうがいいんじゃね? って話。
562初心者:2007/10/08(月) 00:05:19
丁寧にありがとうございます。本当に感謝です。
早速試してみますm(__)m
563デフォルトの名無しさん:2007/10/08(月) 00:09:11
セグメンテーション違反になってしまうんですが、わかりますか?
教えてください。お願いします。

#include <stdio.h>
int main(void){
int tray[ 3 ];
printf("\nPlase type number >> ");
scanf("%d",&tray[ 1 ]);

printf("\nPlase type number >> ");
scanf("%d",&tray[ 2 ]);

printf("\nPlase type number >> ");
scanf("%d",&tray[ 3 ]);

printf("\nYou 3rd type number is %d\n",tray[ 3 ]);

printf("\nYou 2nd type number is %d\n",tray[ 2 ]);

printf("\nYou 1st type number is %d\n",tray[ 1 ]);
return 0;
}
564デフォルトの名無しさん:2007/10/08(月) 00:11:44
>>563
配列の添え字が1〜3じゃなくて0〜2
565デフォルトの名無しさん:2007/10/08(月) 00:11:55
ソースの中見たりするの面倒だから、馬鹿の一つ覚えで上位を取って使ってる
とりあえず上位を取っておけば奇数と偶数が交互にでるみたいなことは回避できるだろうし
566デフォルトの名無しさん:2007/10/08(月) 00:15:33
>>565
そういう処理系はPC上だと十数年前には絶滅してた。
ワークステーションだと、十数年前にはまだあったとかって話は聴いたことがあるけど。
567デフォルトの名無しさん:2007/10/08(月) 00:21:55
>563

int tray[ 3 + 1 ];
568デフォルトの名無しさん:2007/10/08(月) 00:48:29
>>566
今やPC以外でもC言語で書くことは多い
そういう環境はPCでいうとちょっと古めの環境になる
ソース見たり確かめて見たりしたことないから、もしかしたら無駄なことかもしれないけどね
どうせコピペだし
569563:2007/10/08(月) 00:51:16
>564
>567

ありがとうございます。
570初心者550:2007/10/08(月) 00:57:14
途中のn <<= 1 ってどうゆういみですかー??なんどもすいません
571デフォルトの名無しさん:2007/10/08(月) 00:58:48
>>570
変数nの中身を左に1シフトして結果を変数nに代入
572デフォルトの名無しさん:2007/10/08(月) 00:59:17
>>570
ビットを上位にシフトしている。
結果は、n *= 2; と同じ。
573デフォルトの名無しさん:2007/10/08(月) 01:02:17
もうひとつお願いします。

scanf("%d",&a);
で、1つの整数を入力させて、
それを符号を反転させて、表示させたいんですが、どうすればよいでしょうか?
574デフォルトの名無しさん:2007/10/08(月) 01:03:18
printf("%d", -a)
575デフォルトの名無しさん:2007/10/08(月) 01:08:02
>574

なんか難しく考えてました。
変換する関数みたいのがあるのかと

それでいいんですかね・・・

ありがとございます。
576デフォルトの名無しさん:2007/10/08(月) 01:27:21
#include <stdio.h>
int main(void){
char h,i;

printf("Please type key >> ");
scanf("%c",&h);

printf("\nPlease type key >> ");
scanf("%c",&i);

printf("%c%c\n",h,i);
printf("%c%c\n",i,h);

return 0;
}

これをやると、二回目のscanfが来ないんですが、なぜだかわかりますか?
577デフォルトの名無しさん:2007/10/08(月) 01:32:59
たいていは 入力時にenterを入れてる分が読み捨て去れずに二回目に渡されてしまうケース

fgets() + sscanf() に直すと良いのでは?
578デフォルトの名無しさん:2007/10/08(月) 01:41:26
別にfflash()でいいんじゃね?
579576:2007/10/08(月) 01:45:16
#include <stdio.h>
int main(void)
{
   char str[32];
   int h,i;
   
   printf("Please type key >> ");
   fgets(str,31,stdin);
   sscanf(str,"%d",&h);
   printf("Please type key >> ");
   fgets(str,31,stdin);
   sscanf(str,"%d",&i);
   printf("\n%d%d\n",h,i);
   printf("%d%d\n",i,h);
   return 0;
}
こんなのにしてみたんですが・・・

これだと、数字はできても文字が入らないんですね(泣)
どうすれば、文字入るんでしょうか
580デフォルトの名無しさん:2007/10/08(月) 01:49:56
元々 %c だったのを
なぜ %d にしてるんだ?
581デフォルトの名無しさん:2007/10/08(月) 01:51:18
>>579
こういうことじゃなくて?

   char h,i; 
    
   printf("Please type key >> "); 
   fgets(str,31,stdin); 
   h = str[0];
   printf("Please type key >> "); 
   fgets(str,31,stdin); 
   i = str[0];
   printf("\n%c%c\n",h,i); 
   printf("%c%c\n",i,h); 

582576:2007/10/08(月) 01:51:41
>580
あ、ほんとだ。
書き直してたら、なんか間違えてました。
ありがとございます。
583デフォルトの名無しさん:2007/10/08(月) 08:08:43
>>573
最上位ビットを反転させるか
0-aとなることをすればいいだけだからな
584デフォルトの名無しさん:2007/10/08(月) 08:10:04
>最上位ビットを反転させるか
585デフォルトの名無しさん:2007/10/08(月) 08:43:30
long aをchar c[4]に アンパックしたり
逆にchar c[4]をlong aにパックしたりするのに
こんなワークエリアを使ってやっているのですが,
union{
long l;
char b[4];
} work;

ワークエリアを使わずに,キャストとか使って直接代入の方法はないものでしょうか?
586デフォルトの名無しさん:2007/10/08(月) 09:07:11
>>585
環境依存でよければいろいろある。
Ex.
long l = 0x12345678;
char b[sizeof(l)];
*(long *) b = l;
l = *(long *) b;
587デフォルトの名無しさん:2007/10/08(月) 09:10:08
l = b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24);
b[0] = l & 0xff;
b[1] = (l >> 8) & 0xff;
b[2] = (l >> 16) & 0xff;
b[3] = (l >> 24) & 0xff;
--
c99なら
char b[] = {l & 0xff, (l >> 8) & 0xff, (l >> 16) & 0xff, (l >> 24) & 0xff};
588デフォルトの名無しさん:2007/10/08(月) 11:37:54
>>554 >>556 >>557 >>558 >>559 >>560 >>561 >>565 >>566 >>568
お礼が送れて申し訳ありません。
皆さんありがとうございました。
589デフォルトの名無しさん:2007/10/08(月) 11:51:15
どうでもいいけど、RND_MAX+1が除数の倍数じゃないと頻度に偏りが出るって問題はいいんだろうか。
590デフォルトの名無しさん:2007/10/08(月) 14:34:47
どうでもいいよ
591デフォルトの名無しさん:2007/10/08(月) 19:20:28
自作のヘッダファイル&.cファイルの置き場所って
使うプログラムと同じフォルダに置いて#include"〜〜.h"で使えますか?
初歩的な質問で申し訳ないです。
592デフォルトの名無しさん:2007/10/08(月) 19:32:50
はい、それはつかえます
593デフォルトの名無しさん:2007/10/08(月) 20:08:38
>>592
そうですよね
VC++で同じフォルダに置いてあるんですが、関数がないって怒られるので・・・

#ifndef 〜〜_H
#define 〜〜_H
とかヘッダに書くからいけないのでしょうか?
594デフォルトの名無しさん:2007/10/08(月) 20:16:40
>>593
ソースファイルと同階層に置くんだぞ?*.cと*.hがおなじフォルダ
595デフォルトの名無しさん:2007/10/08(月) 20:17:33
>>593
我為エスパー的回答

//--- a.h ---
#ifndef INCLUDE_A_H
#define INCLUDE_A_H

//--- b.h ---
#ifndef INCLUDE_A_H
#define INCLUDE_A_H

重複同名定義
596デフォルトの名無しさん:2007/10/08(月) 20:29:09
>>594
という事はソースファイルと同じフォルダに置くと無理という事ですか?
>>595
同名定義はしてないはずです

#ifndef使っているけど何回かインクルードしているのでまずいのかもしれないです
でもインクルード必要なんで、困ってます
597デフォルトの名無しさん:2007/10/08(月) 20:32:34
>>596
使用するより前にちゃんとプロトタイプ宣言があるのか?
どうしょうもない単純ミスをしているとしか思えんぞ
598デフォルトの名無しさん:2007/10/08(月) 20:37:55
いや、質問内容からして、includeディレクトリに
わざわざ自作ヘッダファイルを入れてるんじゃないだろうか。

>ソースファイルと同じフォルダに置くと無理という事ですか?
自作物の"hoge.h"のように書いて取り込むヘッダファイルは
ソースファイルと同じフォルダでないと駄目。

externみたいな宣言を、だた忘れてたりしてな。
599デフォルトの名無しさん:2007/10/08(月) 20:45:02
>>596
エラーはコンパイル時なのかリンク時なのか、
まず、エラーメッセージを載せてみ。
600デフォルトの名無しさん:2007/10/08(月) 20:49:55
>>598
includeディレクトリにはいれてないです
あと、externかもと思ってすべての関数にexternを付けましたが、同じでした

>>599 お願いします。
1>cmd_main.c
1>コードを生成中...
1>リンクしています...
1>cmd.obj : error LNK2019: 未解決の外部シンボル _add_elem が関数 _input で参照されました。
1>cmd.obj : error LNK2019: 未解決の外部シンボル _clear_list が関数 _write で参照されました。
1>cmd.obj : error LNK2019: 未解決の外部シンボル _get_elem が関数 _write で参照されました。
1>cmd.obj : error LNK2019: 未解決の外部シンボル _get_length が関数 _write で参照されました。
1>cmd_main.obj : error LNK2019: 未解決の外部シンボル _init_list が関数 _main で参照されました。
601デフォルトの名無しさん:2007/10/08(月) 20:52:08
>>600
素晴らしい!ミスリードの天才!

リンクする .obj または .lib が足りてないだけみたい
602デフォルトの名無しさん:2007/10/08(月) 21:01:26
便乗して質問。#include "hoge/piyo.h"
みたいに/区切りなのはどうして?
603デフォルトの名無しさん:2007/10/08(月) 21:04:09
>>602
MS-Windows 環境なら \\ でもいいよ
604デフォルトの名無しさん:2007/10/08(月) 21:22:31
>>601
.objとかコピーしてきたんですが、できなかったです・・

ソース自体にもコンパイルできない原因がないか見てもらえないでしょうか
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5030.zip
605名無し:2007/10/08(月) 21:22:36
出力 printf 1つに対して()内で改行¥nは一つしか使えませんか??
printf(''・・・・¥n・・・・・¥n・・・・・¥n'')
てのは可能ですか??
606デフォルトの名無しさん:2007/10/08(月) 21:25:41
できるけど何故やってみない
607名無し:2007/10/08(月) 21:29:59
まだ初心者でプログラムをどこで作るのか分からない><
608デフォルトの名無しさん:2007/10/08(月) 21:34:38
>>604
流石にzipはおいそれと開く気になれん。
明示的にリンクしている?
609デフォルトの名無しさん:2007/10/08(月) 21:34:39
凄いな。脳内プログラマか
610デフォルトの名無しさん:2007/10/08(月) 21:37:58
>>604
関数定義に extern がついていて気持ち悪いのと
typo が気になるけどソース自体はコンパイル・リンクできた
611デフォルトの名無しさん:2007/10/08(月) 21:47:45
>>610
ソース変更せずにできたんですよね?
.libは見当たらなかったんですけど、まだリンクする何かが足りないってことかな

612デフォルトの名無しさん:2007/10/08(月) 21:54:40
>>611
ソース変更無しで以下のコマンドで .exe までできたよ
bcc32 -c cmd.c
bcc32 -c list.c
bcc32 -c cmd_main.c
bcc32 cmd_main.obj cmd.obj list.obj
613デフォルトの名無しさん:2007/10/08(月) 21:58:26
>〜コマンド検索:sarch
www
614デフォルトの名無しさん:2007/10/08(月) 21:59:52
>>611
gcc cmd.c list.c cmd_main.c -Wall -pedantic
615デフォルトの名無しさん:2007/10/08(月) 22:05:12
0x032333

↑こういうのってどういう意味なんですか?
616デフォルトの名無しさん:2007/10/08(月) 22:07:54
0xは16進数を表す
617デフォルトの名無しさん:2007/10/08(月) 22:08:46
0x032333は16進法で32333の意味
この値は10進法にすると205619
618デフォルトの名無しさん:2007/10/08(月) 22:09:44
>>612
おおお ありがとうございます
そうやってリンクしないといけないという事ですか!
>>613
\(^o^)/
>>その環境はよくわかってないので、また勉強しときます。ありがとうございます

できたらVC++2005での解決策をご教授願えないでしょうか?
開発でVisualStudioを使うことが多いと聞いたもので・・
619デフォルトの名無しさん:2007/10/08(月) 22:10:29
>>604のやつで
char *buf = NULL;

fgets(buf,CMD_MAX,stdin);
if("exit" == buf){

で、fgetsって、配列じゃない単なるポインタに文字列格納できんの?
あと、if文のこの比較もありなか?

char buf[CMD_MAX];

fgets(buf,CMD_MAX,stdin);
if(strcmp(buf, "exit") == 0){

じゃね?
620デフォルトの名無しさん:2007/10/08(月) 22:16:40
>>618
C:\5030>cl cmd.c cmd_main.c list.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

cmd.c
cmd.c(15) : warning C4090: '初期化中' : 異なる 'const' 修飾子です。
cmd_main.c
list.c
list.c(44) : warning C4090: '=' : 異なる 'const' 修飾子です。
コードを生成中...
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.

/out:cmd.exe
cmd.obj
cmd_main.obj
list.obj

VisualStudioはこんなコンパイルエラーがでた。 
強行して実行したらエラーで勝手に落ちる。
621デフォルトの名無しさん:2007/10/08(月) 22:17:21
>>618
いくつか出るエラーを取り除けば、そのまま>>604のやつをVC++でコンパイルできたぞ
622デフォルトの名無しさん:2007/10/08(月) 22:22:39
>>619
ポインタでOKなら、fgetsの第二引数とかいらねえだろうな
文字列比較もおかしいし

コンパイルできないってんだから、
未検証なんだろ
623デフォルトの名無しさん:2007/10/08(月) 22:22:50
>>616-617
そういう事か!!!

「アドレスを指定するときには、16進数を使います。」
だからアドレスを代入するときは、「0x」と書くのですね!!
624デフォルトの名無しさん:2007/10/08(月) 22:23:35
>>623
いや、10進数でもいいけど>アドレス
625デフォルトの名無しさん:2007/10/08(月) 22:29:19
C初めてみようと思ったんだけど試しに超簡単なのをコンパイルしようとしたら
sample.c: can't open: stdio.h: No such file or directory
とか言われて初心者な俺にはいきなりどうしたらいいかわかんなくなった
626デフォルトの名無しさん:2007/10/08(月) 22:31:43
>>625
環境書いて↓で聞きな。
【初心者歓迎】C/C++室 Ver.43【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1190860744/
627デフォルトの名無しさん:2007/10/08(月) 22:32:13
>>625
コンパイラをインストールしなおす。
628デフォルトの名無しさん:2007/10/08(月) 22:32:23
間違いなくパソコン初心者でカレントディレクトリを移動させてないな
629デフォルトの名無しさん:2007/10/08(月) 22:35:35
>>621
そうなんですか?
未解決の外部シンボル・・・ってのはでました?
630デフォルトの名無しさん:2007/10/08(月) 22:37:17
>>627
わかったやってみる
631デフォルトの名無しさん:2007/10/08(月) 22:40:25
>>629
いんや。だが>>620と同じで実行しても速攻でエラー
632デフォルトの名無しさん:2007/10/08(月) 22:44:52
>>631


原因がわかった。ソースのあるディレクトリにlist.*は入れてるけど
VCのプロジェクトの方にいれてなかったーーー...

今まで協力してくださった皆さん、ありがとうございました!感謝
633デフォルトの名無しさん:2007/10/08(月) 22:58:33
>>603
ヘッダ名の部分ならエスケープの対象ではないので、\1個でもいける。
2個でもいけるのは、Windowsが何個でも受け付けてくれるから。
634デフォルトの名無しさん:2007/10/08(月) 23:42:18
GUIの勉強しようと思うんだけど
お勧めの書籍とかHPあったら教えてください!!
簡単な画像処理のソフトとか作ったんで
インターフェースも作りたいな。と思って・・・。

むしろCの基本的な事は覚えたんだが次に何していいか
わからなくて困ってる。GUIより先にすべき事とか
あったら教えてください。
635デフォルトの名無しさん:2007/10/08(月) 23:44:37
636634:2007/10/08(月) 23:59:54
少し読んでみましたがAPI楽しそうですね!!
当分、このサイトで遊べそうです^^;
ありがとうございました〜
637デフォルトの名無しさん:2007/10/09(火) 00:02:19
楽しそうだと思える君は才能があるかもしれない
638デフォルトの名無しさん:2007/10/09(火) 00:08:04
Windows APIが分かってくると
「コンピュータはなぜ動くのか」
「Windowsはなぜ動くのか」
「ネットワークはなぜつながるのか」
が読みたくなるはず。
639デフォルトの名無しさん:2007/10/09(火) 00:09:58
Windows一本で行くならそれでいいけど、
環境依存物しか作れなくなってしまうぞ
と、とりあえず言っておく
640デフォルトの名無しさん:2007/10/09(火) 00:10:21
プリプロセッサが一番最初に処理するファイルって、
どこで決定されるんですか?
ソースファイルがいくつかあるとき、どこかで
#define HOGE
と宣言し、どこかで
#ifdef HOGE
とやっているときに、#ifdef HOGE よりも前に
#define HOGE が処理されるという保証はどこで?
641デフォルトの名無しさん:2007/10/09(火) 00:14:05
ファイルごとに独立して処理される。
他のファイルで定義されたマクロは、
別のファイルのプリプロセッシングに影響を及ぼさない。

#includeされた場合は、あたかもそこにそのファイルの内容が書いてあるかのように扱われる。
642デフォルトの名無しさん:2007/10/09(火) 00:14:18
>>640
includeとかでソースを読み込んだ順番

#ifndef HOGE
#define HOGE
#endif

とかやるだろ
643デフォルトの名無しさん:2007/10/09(火) 15:08:04
fputc( )の使い方の説明で

int fputc(int 文字、FILE *ストリーム);

fputc( )関数は、「文字」の下位バイトを、「ストリーム」に結び付けられているファイルにunsigned char型の値として書き込みます。

とあるんですが、まず、ここで下位バイトって何のことですか?
644デフォルトの名無しさん:2007/10/09(火) 15:12:06
簡単に言えば、int 32 ビットのうち、下 8 ビットのこと
645デフォルトの名無しさん:2007/10/09(火) 15:14:13
流れは

C/C++ ⇒ JavaScript
646デフォルトの名無しさん:2007/10/09(火) 15:14:48
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
(゚Д゚ )ハァ?
647デフォルトの名無しさん:2007/10/09(火) 15:15:00
648デフォルトの名無しさん:2007/10/09(火) 15:18:15
内部処理UTF-16ベースで
文字コード16ビット固定がいいのですよ
URL処理用UTF-8変換も簡単だし
649デフォルトの名無しさん:2007/10/09(火) 15:20:08
>>644
すると上位の24ビットはどうなってしまうんですか?
650デフォルトの名無しさん:2007/10/09(火) 15:20:46
内部処理UTF-32ベースで
文字コード32ビット固定がいいですよ
サロゲートペア考えなくていいし
651デフォルトの名無しさん:2007/10/09(火) 15:22:17
>>649
どうもならない
使われずに無視されるだけ
652デフォルトの名無しさん:2007/10/09(火) 15:26:35
>>651
fputc()はそもそも何のために使うんですか?
653デフォルトの名無しさん:2007/10/09(火) 15:32:10
バイトをファイルに書き込むため
654デフォルトの名無しさん:2007/10/09(火) 15:44:54
下位バイトしか書き込まないのに何で「文字」が
全部書き込めるんですか?
655デフォルトの名無しさん:2007/10/09(火) 15:59:43
文字が全部書き込めると言った覚えはないけど。

アルファベットや数字のような1バイト文字なら、
1バイトを書き込むだけで文字全体を書き込める。
ひらがなや漢字のようなマルチバイト文字は無理だ。
必要なバイト数の分だけ繰り返し fputc を使う必要がある。
656デフォルトの名無しさん:2007/10/09(火) 16:18:43
UTF-16は、半角系文字も16ビット固定だから
つまり文字位置インデックスが高速なんです
657デフォルトの名無しさん:2007/10/09(火) 16:24:27
でも基本多言語面以外の文字はサロゲートペアで32ビットだから
つまりUTF-16って可変長なんです
658デフォルトの名無しさん:2007/10/09(火) 16:34:52
とっても初歩的な質問です。
ポインタ変数の大きさについてなのですが、
int型やchar型は、例えばそれぞれ4バイト、1バイトの大きさですが、
それらを指すポインタ変数、int*型やchar*型の大きさはどうなるんでしょうか?
予想だと、ポインタ変数はアドレス入れるだけなので一定の大きさだとは思うのですが。
32bitCPUなら4バイト(32bit)固定、とかなんでしょうか?
659デフォルトの名無しさん:2007/10/09(火) 16:38:15
>>658
まぁ普通はそう。
確認したければ sizeof を使ってみるといい。
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(int*));
660デフォルトの名無しさん:2007/10/09(火) 16:51:49
>>658
アーキテクチャによって違うが、
一般的な32bitCPUなら、どの型のポインタも4byte
661デフォルトの名無しさん:2007/10/09(火) 16:54:06
このスレでバイナリエディタの扱いに慣れてる人いてる?
662デフォルトの名無しさん:2007/10/09(火) 17:00:23
http://proforceone.web.fc2.com/ ⇒ Processed input data

zzztv[247]
yoshimotokogyo[141]

http://proforceone.web.fc2.com/ ⇒ Calculation processing

d=$.split("\n");for(j=0;d.length>j;j++){s=d[j].substring(0,l=d[j].indexOf("["));
n=eval(d[j].substring(l+1,d[j].indexOf("]")));n=(n-n%20)/20+(n%20>0);br();
for(i=0;n>i;i++){write("http"+"://youtube.com/results?search_query=");
write(s+"&search_sort=video_date_uploaded&page="+(i+1));br();}}br();
663デフォルトの名無しさん:2007/10/09(火) 17:05:18
>>659-660
なるほど、そうですか。
スッキリしました。
ありがとうございました。
664デフォルトの名無しさん:2007/10/09(火) 17:48:01
C言語で何秒間停止させるみたいな関数ってありますか?
665デフォルトの名無しさん:2007/10/09(火) 17:57:45
>>664
Sleep()ではだめって事?
666デフォルトの名無しさん:2007/10/09(火) 17:57:51
UTF-32 UTF-16 UTF-8
http://ja.wikipedia.org/wiki/Unicode
667デフォルトの名無しさん:2007/10/09(火) 18:00:38
668デフォルトの名無しさん:2007/10/09(火) 18:04:01
669664:2007/10/09(火) 18:12:40
すいませんできれば使い方まで教えてください。
670デフォルトの名無しさん:2007/10/09(火) 18:13:06
UTF-16は、WindowsXPなど多くのOSで、内部表現に使われている。
Microsoft Windowsでは、リトルエンディアンのUTF-16が使われている。
内部表現ではBOMなし、ファイルなどではBOMありが主である。BOMなしのものはUTF-16LE、BOMありのものはUTF-16符号化形式(BOMありのリトルエンディアン)ということになる。
TCP/IPネットワークでは、ビッグエンディアンに決められている。
671デフォルトの名無しさん:2007/10/09(火) 18:16:35
672デフォルトの名無しさん:2007/10/09(火) 18:19:27
UTF-16は、WindowsXPなど多くのOSで、内部表現に使われている。
Microsoft Windowsでは、リトルエンディアンのUTF-16が使われている。
内部表現ではBOMなし、ファイルなどではBOMありが主である。
BOMなしのものはUTF-16LE、BOMありのものは
UTF-16符号化形式(BOMありのリトルエンディアン)ということになる。
TCP/IPネットワークでは、ビッグエンディアンに決められている。
673664:2007/10/09(火) 18:21:32
>>671
ありがとうございます
やってみます
674デフォルトの名無しさん:2007/10/09(火) 18:24:33
英語出来なきゃだめ?
おまいらの勉強法
675デフォルトの名無しさん:2007/10/09(火) 18:27:14
日本語でおk
676デフォルトの名無しさん:2007/10/09(火) 18:45:39
http://proforceone.web.fc2.com/ ⇒ Processed input data

エンタ[263.]
お笑い[4,010]
zzztv[247]
yoshimotokogyo[141]

http://proforceone.web.fc2.com/ ⇒ Calculation processing

d=$.split("\n");for(j=0;d.length>j;j++){s=d[j].substring(0,l=d[j].indexOf("["));
s=encodeURIComponent(s);n=d[j].substring(l+1,d[j].indexOf("]")).split(".");
n=eval(n[0].split(",").join(""));n=(n-n%20)/20+(n%20>0);br();
for(i=0;n>i;i++){write("http"+"://youtube.com/results?search_query=");
write(s+"&search_sort=video_date_uploaded&page="+(i+1));br();}}br();
677デフォルトの名無しさん:2007/10/09(火) 18:58:21
以下のようなテスト用プログラムを組んだのですが、引数が存在しない場合に
if(fp == NULL){}内が実行されず、何も表示されずに終了してしまいます。
引数が存在すればscanfまでちゃんと行くのですが、何がいけないのでしょう?

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

#define PROGRAM_NAME patch.exe

int main(int argc, char *argv[]){

  FILE *fp;
  char answer;

    fp = fopen(argv[1],"r");
    if(fp == NULL){
       printf("ファイルがありません\n");
       printf("PROGRAM_NAME 書き換え元ファイル パッチデータ\n");
       exit(1);
    }

    printf("%sにパッチを当てますか?(y/n) ->",argv[1]);
    scanf("%c",&answer);

    return 0;

}
678デフォルトの名無しさん:2007/10/09(火) 19:12:58
引数がないときは argv[1] が NULL になるから、 NULL を渡された fopen が落ちる
argc を見て引数の数を確認しる
679デフォルトの名無しさん:2007/10/09(火) 19:17:28
おお、そんなからくりが!引数チェックをしたらちゃんと動くようになりました。ありがとうございます。
680デフォルトの名無しさん:2007/10/09(火) 19:52:25
argcね

argc=1 実行プログラムの絶対パス
arg=2 +引数1
arg=3 +引数2
・・・・・・・・・・・
681デフォルトの名無しさん:2007/10/09(火) 20:15:24
>argc=1 実行プログラムの絶対パス
絶対パスでは無かったような。
シェルが解釈した後のパースされたコマンドラインの文字列が入ってるだけでない?
682680:2007/10/09(火) 20:20:35
>>681 まちがえたかな?そうかも。
683デフォルトの名無しさん:2007/10/09(火) 20:40:16
>>681
それは処理系依存。
[0]に何も入ってない場合もある。
684デフォルトの名無しさん:2007/10/09(火) 21:01:34
>>683
を、マジか。
フォローさんくす。それは知らなんだ。
ちょっと触ってみたいんで、参考までに何も入ってない環境を知ってたら教えて欲しい。

軽くググってみたけど、CFAQに「何も入っていないかも知れない」って
記述があるぐらいしか分からんかった。
685デフォルトの名無しさん:2007/10/09(火) 21:16:19
#include <unistd.h>
main(int argc, char *argv[]) {
if(argv[0]) exec(argv[0], NULL);
else puts("argv[0] is null.");
}

とかでいいんでね?
686デフォルトの名無しさん:2007/10/09(火) 21:20:58
unsigned (int)は0〜4294967295の範囲を扱えますが
144115188075856000という数字を扱いたい場合どうすればいいでしょうか?
687デフォルトの名無しさん:2007/10/09(火) 21:26:12
一般的にunsigned intのあらわせる範囲は0 ~ 65,535

そのような巨大な整数を扱いたいならば、
C99から追加されたunsigned long long int (0 ~ 2^64-1)を使うか、
コンパイラが独自に実装している超長整数型を使う必要がある。
688デフォルトの名無しさん:2007/10/09(火) 21:27:34
>>686
多倍長演算とかでぐぐるんだ
689デフォルトの名無しさん:2007/10/09(火) 21:35:49
>>685
おぉ・・・なるほど。気づかんかった。
重ねてありがとう。
690デフォルトの名無しさん:2007/10/09(火) 21:37:39
おめーらなんでそんなに詳しいんだよ!!!
ちくしょうちくしょう!!
691デフォルトの名無しさん:2007/10/09(火) 22:01:58
8の平方根をsqrt(8)とかやって計算すると2.828とかが出てくると思うんですが、
8の平方根として2√2を出したい場合もあると思います。
8ならば
x[2]={1,8};
for(i=2; i*i <= x[1]; i++)
if(!x[1]%(i*i)){
x[0] *= i;
x[1] /= i*i;
}
printf("square root of 8 = %d",x[0]);
if(x[1]!=1) printf("√%d",x[1]);
これでいいとは思いますが、
例えば√0.02=0.1√2だとか、√1.6=0.4√10などの式変形をしたい場合、
どのようにすればよいのでしょうか。

変形が一意的に定まらない場合もありますが(0.4√10=4√0.1とか)、
とりあえずはルートの中身が平方数でない整数、という条件でお願いします。
(もしくは他の規則でも構いませんが)
692デフォルトの名無しさん:2007/10/09(火) 22:06:43
>>655
遅レスすみません。

char str[80] = "ファイルシステムのテスト\n";
FILE *fp;
char *p;

p = str;
while(*p) {
if(fputc(*p, fp) == EOF) {
printf("ファイル書き込みエラー\n");
exit(1);
}
p++;
}

と教科書にあるんですがこの場合
"ファイルシステムのテスト"
が2バイト文字だから
フの下位バイト、ァの下位バイト、イの下位バイト、・・・
という風に書き込まれていくんですか?
693デフォルトの名無しさん:2007/10/09(火) 22:14:22
>>692
そういう場合はstr[0] にフの上位バイト、str[1]にフの下位バイトというふうに入ってる。
694デフォルトの名無しさん:2007/10/09(火) 22:31:04
フフフフフフフフ
695デフォルトの名無しさん:2007/10/09(火) 22:33:25
(^^)
696デフォルトの名無しさん:2007/10/09(火) 23:00:41
>>691
√0.02を0.1√2に変形するとき、お前さんは何を考えた?

それをそのままコードにすればいい。
697デフォルトの名無しさん:2007/10/09(火) 23:16:01
>>696
そういう考え方をすればいいんですね
ありがとうございます
698デフォルトの名無しさん:2007/10/09(火) 23:37:50
>>691
整数の奴もそれじゃだめだろ
699デフォルトの名無しさん:2007/10/10(水) 00:12:20
16進数の値が書かれた文字列を、
10進数の数値に直すにはどうすればいいのでしょう?

"0012FF" → 4863

という感じです
700デフォルトの名無しさん:2007/10/10(水) 00:18:23
>>699
つstrtol
701デフォルトの名無しさん:2007/10/10(水) 00:34:30
int main(){
char hex[256];
int dec=0 , i;

printf("hex?>");
fgets(hex,256,stdin);

for(i=0; hex[i] != '\n' && hex[i] != '\0'; i++){
dec *= 16;
if(hex[i] >= '0' && hex[i] <= '9') dec += hex[i]-'0';
else if(hex[i] >= 'a' && hex[i] <= 'f') dec += 10 + hex[i] - 'a';
else if(hex[i] >= 'A' && hex[i] <= 'F') dec += 10 + hex[i] - 'A';
else break;
}

printf("%s->%d" , hex , dec);
return 0;
}
702デフォルトの名無しさん:2007/10/10(水) 00:35:41
>>700-701
ありがとうございます
703デフォルトの名無しさん:2007/10/10(水) 01:07:07
共用体ってなにが便利なのか全然分かりません

704691:2007/10/10(水) 01:43:20
>>698
あ、ほんとですね
√16とか

iをsqrt(x)から始めて減らしてくか、
インクリメントするのに条件を設けるか……

ありがとうございます
705デフォルトの名無しさん:2007/10/10(水) 01:56:05
if(!x[1]%(i*i)) を while(!(x[1]%(i*i))) にすればok
706デフォルトの名無しさん:2007/10/10(水) 09:49:47
>>702
int n;
sscanf("0012F", "%x", &n);;
707デフォルトの名無しさん:2007/10/10(水) 10:22:34
scanfってなんで使っちゃだめなの?
708デフォルトの名無しさん:2007/10/10(水) 10:29:44
>>707
使っていいですよ
709hj:2007/10/10(水) 13:50:32
【政治】政府、"お金をつくる"造幣局や印刷局など独立法人20以上を民営化へ−機密性の保持も絡み様々な意見も★


http://news22.2ch.net/test/read.cgi/newsplus/1191932873/

【民営化】造幣局・印刷局など、独立行政法人20以上を民営化へ:政府方針 [07/10/07]
http://news21.2ch.net/test/read.cgi/bizplus/1191727281/


政府は6日、現在進めている独立行政法人(独法)の整理合理化に関連し、
101ある独法のうち、予算に占める国からの財政支出の割合(財政依存度)が低い
20法人以上の民営化を目指す方針を固めた。

2007年末に整理合理化計画を策定し、閣議決定する予定だ。
民営化の対象には、造幣局や国立印刷局、日本万国博覧会記念機構などがあがっている。
今後、独法の民営化推進を目指す渡辺行政改革相らの方針に対し、
事業の公共性の高さなどを主張する関係省庁の巻き返しが本格化しそうだ。

貨幣や紙幣を造る造幣局や国立印刷局については、機密性の保持なども絡み、
是非をめぐって様々な意見が出そうだ。

http://headlines.yahoo.co.jp/hl?a=20071007-00000002-yom-pol
710デフォルトの名無しさん:2007/10/10(水) 18:45:27
『各辺が確率的に結ばれるグラフ(ランダムグラフ)を
 確率ごとに100個ずつ作りファイルに入れる』
という課題がでました。誰か助けて下さい
711デフォルトの名無しさん:2007/10/10(水) 18:55:01
そんなことより鼻くそがめちゃくちゃ硬くて無理やりとったら
めっちゃ鼻血が出てきたんだがどうすればいい?
712デフォルトの名無しさん:2007/10/10(水) 18:56:50
>>711
鼻血が出ているスレッドに対して TerminateThread でおk
713デフォルトの名無しさん:2007/10/10(水) 18:57:04
ファイルにパッチを当てるプログラムを作ったのですが、うまく動きません。
指定と全く違うデータがファイルの先頭に入るだけで終わってしまいます。どこがいけないのでしょう?

パッチの書式は アドレス:データ です。例えば
00000001:FF34AB
0000F:35
のように、アドレス先頭のゼロの連続は無視、データ長はほぼ自由で、
指定したアドレスから順にデータを書き込んでいく、という感じです。

ソースをアップロードしたので、見ていただけませんでしょうか。
http://ranobe.com/up/src/up229162.txt
714デフォルトの名無しさん:2007/10/10(水) 18:59:13
>>713
ソースコードの文字コードがShift-JIS → MS-Windows

おそらく fopen の時に バイナリモード で開いていないのが原因
715714:2007/10/10(水) 19:02:28
ごめん 嘘でした orz
716デフォルトの名無しさん:2007/10/10(水) 19:06:03
>>713
適当にざっと見ただけだが、

>sprintf(data_numtemp,"%lb",data_num);

%lb って何?

>fwrite(data_numtemp,sizeof(data_numtemp),1,fp_src);

sizeof(data_numtemp) って BUF_MAX のことだと思うんだが
717デフォルトの名無しさん:2007/10/10(水) 19:21:25
>%lb って何?
long型の2進数になるかと思ったんですが、この書き方は変でしたか。
でも%bに直してもバグは変わらず…

>sizeof(data_numtemp) って BUF_MAX のことだと思うんだが
sizeof(data[count])に直してみましたが、それでもまだバグは変わらず…
718714:2007/10/10(水) 19:28:10
>>717
勉強の邪魔になるならやめるけど
お詫びに作ってみたけど見てみる?
719デフォルトの名無しさん:2007/10/10(水) 19:30:44
>>718
邪魔だなんてとんでもないです。
普通はどうやって実現するのか気になるので、是非見せてください
720714:2007/10/10(水) 19:31:36
>>719
#include<stdio.h>

int exec_patch(FILE *fp_dest, FILE *fp_patch){
unsigned long address_num;
int value;
char buf[2+1];

while(1){
if(fscanf(fp_patch, "%lx%1[:]", &address_num, buf)!=2) break;
fseek(fp_dest, address_num, SEEK_SET);
while(fscanf(fp_patch, "%2[0-9A-Fa-f]", buf)==1){
if(buf[1]=='\0') return 0;
sscanf(buf, "%x", &value);
fputc(value, fp_dest);
}
}
return feof(fp_patch);
}

int main(void){
FILE *dest, *patch;

dest=fopen("src.dat", "r+b");
patch=fopen("patch.dat", "r");
if(dest==NULL || patch==NULL) return 1;
if(!exec_patch(dest, patch)) fprintf(stderr, "\nError: patch failed.\n");

return 0;
}
721デフォルトの名無しさん:2007/10/10(水) 19:59:08
>>692
どうでもいいがひどい教科書だな。
その文章なら動くかもしれんが、下位バイトに00が入る文字を含んだ途端尻切れ確定。
722デフォルトの名無しさん:2007/10/10(水) 19:59:19
>>713
82行目
>if(file_patchdata_line[count][last] = '\n') file_patchdata_line[count][last] = '\0';
== の間違い?

124行目
>sprintf(data_numtemp,"%lb",data_num);
???

文字列 address および data の最後に '\0' が無い
723デフォルトの名無しさん:2007/10/10(水) 20:24:11
%5.1f の5.1ってどういう意味ですか?
724デフォルトの名無しさん:2007/10/10(水) 20:25:01
小数点の左側が五桁、右が一桁。
725デフォルトの名無しさん:2007/10/10(水) 20:25:11
>>720
変換指定子ってそんなに細かい使い方ができるんですね。
fscanfと組み合わせるといろいろ応用が効きそうです。ありがとうございます

>>722
=='\n'に直して、%lbは%bにしました。
また、count--の前に
address[count][last + 1] = '\0';
data[count][last - lasttemp + 1] = '\0';
をそれぞれ追加しました。
しかし一向に改善してくれません。一体どこが問題なのでしょう…?
726デフォルトの名無しさん:2007/10/10(水) 20:45:49
>>725
sprintfに%bなんて変換指定子は存在しない。
727デフォルトの名無しさん:2007/10/10(水) 20:46:04
Cのprintfに%bなんかないっちゅうねん。
728723:2007/10/10(水) 20:50:13
>>724
ありがとうございます
729デフォルトの名無しさん:2007/10/10(水) 20:54:41
>>725
>>713 のソースコードを次のように変更したらいけたっぽい

82c82
< if(file_patchdata_line[count][last] = '\n') file_patchdata_line[count][last] = '\0';
---
> if(file_patchdata_line[count][last] == '\n') file_patchdata_line[count][last] = '\0';
96a97
> address[count][last] = '\0';
111a113
> data[count][last - lasttemp] = '\0';
122,124d123
< /* データを2進数の文字列に変換 */
< data_num = strtoul(data[count],NULL,16);
< sprintf(data_numtemp,"%lb",data_num);
125a125,134
> {
> int i, value;
> /* 16進数文字列を対応するデータ列に変換 */
> for(i=0,data_num=0;data[count][i]!='\0' && data[count][i+1]!='\0';i+=2)
> {
> sscanf(&data[count][i], "%2x", &value);
> data_numtemp[data_num++]=value;
> }
> }
>
127c136
< fwrite(data_numtemp,sizeof(data_numtemp),1,fp_src);
---
> fwrite(data_numtemp,data_num,1,fp_src);
730デフォルトの名無しさん:2007/10/10(水) 21:09:59
>>729
おお、すごい!ちゃんと指定したデータが書き込まれるようになりました。
ただアドレスにA〜Fが無い場合は動作しないようで、ファイル先頭が少し変ですが、かなりの進歩です。
どうもありがとうございます。
731デフォルトの名無しさん:2007/10/10(水) 21:42:02
VisialCで実行した時に出力結果といっしょに
フフフフフフフとか』とか出てくるのはどこがおかしいからですか?
732デフォルトの名無しさん:2007/10/10(水) 21:43:48
>>731
デバッグビルドだからです
リリースビルドなら不定です
733デフォルトの名無しさん:2007/10/10(水) 21:47:34
>>731
"それが期待した動作ならそれでいいんじゃないかな\0"
734デフォルトの名無しさん:2007/10/11(木) 00:32:43
float変数の整数部のみをBYTE変数に高速にコピーするにはどうすれば良いでしょうか?

float a;
BYTE b;

a = 何かしらの浮動小数点演算;
b = a;  ←このコピーが非常に遅い

735デフォルトの名無しさん:2007/10/11(木) 00:41:12
>>734
BYTEが整数型であるという前提で。
実数を整数にする(=整数部を取り出す)処理はどうしても時間が掛かる。
しかし、今時のCPUなら問題になるほどではないと思うのだが。
そこでポイントは、「そこがボトルネックになっているのか?」と
「どうしても高速化したいならその周辺も含めて考えるべき」ということ。
736デフォルトの名無しさん:2007/10/11(木) 00:42:56
>>734
速いPCに買い換える
737デフォルトの名無しさん:2007/10/11(木) 00:52:25
アドバイス有り難うございます。

BYTE型はunsigned charで整数型です。
動画(VGA)を表示するソフトを作っているのですが、
実数から整数へのコピーがない場合には画面のフレームレートで約45fpsでています。
これが実数から整数へのコピーがあると23fps程度まで一気に落ちてしまいます。
ですのでこの部分がボトルネックである事は間違いありません。
1画素辺りRGBの3回のコピーが必要で、これが一画面分となると922K回コピーが発生する計算になります。

float変数の整数部を直接参照できないかなぁとか考えているのですが無理なんでしょうか?

738デフォルトの名無しさん:2007/10/11(木) 01:01:55
それなら固定小数点数使うしかないね
739デフォルトの名無しさん:2007/10/11(木) 01:11:49
>>737
>float変数の整数部を直接参照

整数部って。 指数部と仮数部と符号しかないよ。
http://ja.wikipedia.org/wiki/IEEE_754

処理系依存で直接各ビットを参照してむにゃむにゃすれば整数値を取り出せるとは思うけど、速いかどうかは知らない。
740デフォルトの名無しさん:2007/10/11(木) 01:18:26
c言語覚え初めて3日目です。

#include <stdio.h>
#include <string.h>

int main(void)
{
char namae[256],namae1[] = "arashi",namae2[] = "arasi",namae3[] = "Arashi",namae4[] = "Arasi",namae5[] = "ARASHI",namae6[] = "ARASI";


printf("お名前を教えてください:");
scanf("%s",namae);

if ((strcmp(namae,namae1)==0)||(strcmp(namae,namae2)==0)||(strcmp(namae,namae3)==0)||(strcmp(namae,namae4)==0)||(strcmp(namae,namae5)==0)||(strcmp(namae,namae6)==0)) {
printf("%sアホ\n",namae);
} else {
printf("%s様天才\n",namae);
}

return 0;
}
741デフォルトの名無しさん:2007/10/11(木) 01:19:13
もっとコンパクトに書けないでしょうか?
742デフォルトの名無しさん:2007/10/11(木) 01:22:13
C++とそのライブラリであるSTLとboostを使ってください
743デフォルトの名無しさん:2007/10/11(木) 01:24:14
>>740
配列を使うか、内部的には小文字で比較するかすれば?

ANSI標準でなくていいならstrcasecmp()とかあるが?
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strcasecmp.3.html
744740:2007/10/11(木) 01:27:27
ありがとうございます。
大昔、小学生時代にBASICちょっとだけ触って以来のプログラム勉強です。
こんにちはマイコンに740と同じようなプログラムがあったように思うので、練習に書いてみました。
745デフォルトの名無しさん:2007/10/11(木) 01:35:19
>>740
少しはスマートかな?
#include <stdio.h>
#include <string.h>
int main(void) {
    char name[256], *names[] = {"arashi", "arasi", "Arashi", "Arasi", "ARASHI", "ARASI"};
    int i;
    printf("お名前を教えてください:"); scanf("%s", name);
    for (i = 0; i < sizeof(names) / sizeof(names[0]); i++)
        if (!strcmp(name, names[i])) {
            printf("%sアホ\n", name);
            return 0;
        }
    printf("%s様天才\n", name);
    return 0;
}
746740:2007/10/11(木) 01:41:46
どうもありがとうございます。
もっと勉強します。
747デフォルトの名無しさん:2007/10/11(木) 02:37:19
>>737
普通に考えて、「何かしらの浮動小数点演算」の方が「整数部の抽出」より遅いと思うのだが。
そうでないとしたら、「何かしらの浮動小数点演算」を(整数化するとか)なにか考えた方がいい。
例えば、値域が限定できるのなら固定小数点数として演算するとか。

>>739
今時のCPUなら変換処理をCPU内部で行える筈。それより速く抽出できるとは考えにくい。
748デフォルトの名無しさん:2007/10/11(木) 02:49:41
>>740
入力文字列を小文字変換して、
arashi,arasiと比較すればいい
749デフォルトの名無しさん:2007/10/11(木) 03:59:37
>>734
基本的にfloat型はdouble型より遅い。
最近のCPU内部では結局double型に逐次変換して処理を行ってるから、その分がオーバーヘッドになる。
特に理由が無いのならfloatはやめてdoubleにすればいい。
750デフォルトの名無しさん:2007/10/11(木) 05:38:28
今だにそれを信じてる人が居るのか
751デフォルトの名無しさん:2007/10/11(木) 07:08:12
グラフィックでfloatが使われるのは精度が求められないこと、メモリの節約、SIMDとの相性の良さ、
グラフィックライブラリやハードがfloat前提の設計になっているなどの理由かな。

byteじゃなくてlongへの変換だけどちょっと作ってみた。遅そうだ(笑
long hage(float f) {
  long *b = (long *) &f;
  int sign = (*b >> 31) & 0x00000001;
  int exp = (*b >> 23) & 0x000000ff;
  long frac = *b & 0x007fffff;
  if ((exp == 0) && (frac == 0)) return 0;
  if (exp == 0) return 0; // 非正規化数
  if (exp == 255) return -1; // 無限大 NaN
  // 正規化数
  char tmp = (exp - 127 - 23) & 0x0ff;
  exp = tmp; // 符号拡張
  frac |= 0x00800000;
  if (exp > 0) frac <<= exp;
  else frac >>= -exp;
  if (sign) frac = -frac;
  return frac;
}
752デフォルトの名無しさん:2007/10/11(木) 07:59:49
>>749
知ったか乙

>>751
どう見ても遅いね。

問題は、元質が果たしてIA32を想定しているかどうかなんだけどね。
# 案外FPGAでなんとかしようとしているのかもしれないw
753デフォルトの名無しさん:2007/10/11(木) 08:43:37
>>734 C3プロセッサだと通常の3倍速になった
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef union tag_f2i_t{// IEEE754 前提
float f;
struct{unsigned karisuu:23, sisuu:8, sign:1;};
}f2i_t;
#define NUM 10000
#define TRY 10000
int main(void){
f2i_t *p;
float x[NUM], *p2;
unsigned char y[NUM];
clock_t c;
int i, j;
for(i=0;i<NUM;i++) x[i]=rand()%100,y[i]=0;
c=clock();
for(j=0;j<TRY;j++){
p=(f2i_t*)x;
for(i=0;i<NUM;i++){
y[i]=((0x800000 | p->karisuu) >> (150-p->sisuu));
p++;
}
}
printf("%d %.3f[sec]\n", y[0], (double)(clock()-c)/CLOCKS_PER_SEC);
c=clock();
for(j=0;j<TRY;j++)
for(i=0,p2=x;i<NUM;i++,p2++) y[i]=*p2;
printf("%d %.3f[sec]\n", y[0], (double)(clock()-c)/CLOCKS_PER_SEC);
return 0;
}
754デフォルトの名無しさん:2007/10/11(木) 08:52:49
最適化かけたら10倍以上になった…
これはいただきだ!
755753:2007/10/11(木) 09:06:21
数値が 0 の時にバグってるようだ。なんでだろう?
756デフォルトの名無しさん:2007/10/11(木) 09:13:47
>>754
環境は?
IA-32だとどう見ても遅いんだけど。

>>753
0のときは最上位ビットを立ててはいけない。
757デフォルトの名無しさん:2007/10/11(木) 09:15:06
そういえば、符号の処理もしてないね。
758デフォルトの名無しさん:2007/10/11(木) 09:17:04
VC++2005, WindowsXP, Celeron 1.40GHz
cl /O2 foo.cpp
41 0.350[sec]
41 4.446[sec]

cl /arch:SSE2 /O2 foo.cpp
41 0.350[sec]
41 0.260[sec]

SSE使うと逆転した
759753:2007/10/11(木) 09:21:33
unsigned 型の数値を 150ビット 右にシフトしたら 0 になると思っていたが
実際には 150-128=22 ビットしかシフトされていないようだ
これはC3だから?
760デフォルトの名無しさん:2007/10/11(木) 09:32:36
>>759
あー、そりゃそもそもダメだ。ビット数以上のシフトは環境依存。
CPUによっては(IA-32のように)32の剰余分しかシフトしない。
761753:2007/10/11(木) 09:36:24
これでもC3なら三倍速
y[i]=((0x800000 | p->karisuu) >> (150-p->sisuu));

y[i]=(150-p->sisuu)>31?0:((0x800000 | p->karisuu) >> (150-p->sisuu));
762デフォルトの名無しさん:2007/10/11(木) 09:38:24
VC++2005, WinXP, Athlon64 3000+
/arch:SSE2 /Ox /Ot

41 0.172[sec]
41 0.234[sec]

後者が通常の方法だよね?
763デフォルトの名無しさん:2007/10/11(木) 09:45:30
Intel(R) Core(TM)2 CPU 6320 @ 1.86GHz
--
C:\cygwin\tmp>cl foo.c /O2
C:\cygwin\tmp>.\foo
0 0.250[sec]
0 1.765[sec]

C:\cygwin\tmp>cl foo.c /O2 /arch:SS
C:\cygwin\tmp>.\foo
0 0.250[sec]
0 0.125[sec]
--
$ gcc foo.c -O3
$ ./a
0 0.313[sec]
0 0.875[sec]

$ gcc foo.c -O3 -msse2
$ ./a
0 0.313[sec]
0 0.125[sec]
--
えーと、clのfpuの遅さとgccの最適化の悪さは何?
764デフォルトの名無しさん:2007/10/11(木) 09:53:30
逆に考えるんだ!
SSEとかが使えないようなPCでは提案された方法の方が速くなると!
765753:2007/10/11(木) 09:56:52
>>753 および >>761 には致命的な欠陥があります
もうCPUに任せてしまいましょうw
766デフォルトの名無しさん:2007/10/11(木) 10:06:41
ん? 後は符号判定くらいじゃないの?
あーそうか、オーバフローするのか。値を制限すればいいんでない?
って、要は固定小数点と見做すようなもんか。
767デフォルトの名無しさん:2007/10/11(木) 11:21:13
配列を関数の引数として渡すときに
ポイント使わなければ何がおきるの?
数値に誤差でるの?
768デフォルトの名無しさん:2007/10/11(木) 11:34:28
は?
769デフォルトの名無しさん:2007/10/11(木) 11:36:49
>>767
意味がわからんので、具体的なコードで例を示してみてくれ
770デフォルトの名無しさん:2007/10/11(木) 13:42:54
初心者で馬鹿な質問かも知れませんがよろしくお願いします。
スイッチ文にてnumの値によって処理がかわるようにしたいと思いました。
numが1,2の場合で、swがFALSEだった場合はdefaultの処理に行かすようにしたいのです。
そしたら、トリッキーっぽいな処理を思いついて(下のやつ)、
試しにコンパイルしてみましたがやっぱりだめでしたw
やっぱし、caseの中に同じif文書くしかないでしょうか?

switch(num)
{
if(SW == FALSE)
{
case 1:
//1の処理
break;
case 2:
//2の処理
break;
}
case 3:
//3の処理
break;
case 4:
//4の処理
break;
default:
//default処理
break;
}
771デフォルトの名無しさん:2007/10/11(木) 13:49:36
>>770
これでどう?
switch(SW?num:0)
772デフォルトの名無しさん:2007/10/11(木) 13:52:48
switch(((num==1||num==2)&&!SW)?0:num)
773デフォルトの名無しさん:2007/10/11(木) 13:56:25
そこまでしてswitch使いたいもんかね
774デフォルトの名無しさん:2007/10/11(木) 14:50:46
switch(num){
case 1:
 if (SW == FALSE) goto sw_false;
 // 1の処理
 break;
case 2:
 if (SW == FALSE) goto sw_false;
 // 2の処理
case 3:
 // 3の処理
 break;
case 4:
 // 4の処理
 break;
default:
sw_false:
 // default処理
 break;
}
775デフォルトの名無しさん:2007/10/11(木) 14:55:59
>>772
その形式のif文ありましたね、忘れてました。
>>774
そういう手がありましたか・・・。

ありがとです^^
776デフォルトの名無しさん:2007/10/11(木) 14:58:33
switch(num)
{
case 4:
//4の処理
break;
case 3:
//3の処理
break;
case 2:
if(SW==TRUE) {
//2の処理
break;
}
case 1:
if(SW==TRUE) {
//1の処理
break;
}
default:
//defaultの処理
break;
777デフォルトの名無しさん:2007/10/11(木) 17:13:11
>>753
データをfloatで持たずに最初から整数でもてばいいのではないかな?
たとえばAD変換のデータなら元データは整数だから、時数に返還しないで整数のまま処理する。

もっとも、扱っているデータがどういうデータなのかわかなないけど
778デフォルトの名無しさん:2007/10/11(木) 22:38:48
バンナム「PS3タイトルを作る際にグラフィックに掛かるコストは約10億円でWiiタイトルの2倍。
      PS3ソフトで利益をあげるには最低50万本売らないといけない」
カプコン「PS3の高すぎる開発費のため、モンハン3のプラットフォームを変えた」
セガ「PS3やXbox360ではプログラマが50人以上必要。Wiiだと20人位」
THQ「PS3やXbox360ではコストが1000万〜1200万ドル。Wiiだと150万〜400万ドル」
779デフォルトの名無しさん:2007/10/11(木) 22:54:04
誤爆すんなよゲハ厨
780デフォルトの名無しさん:2007/10/12(金) 20:03:38
初心者で申し訳ないのですが
表示してきた文字を消すことはできますか?
781デフォルトの名無しさん:2007/10/12(金) 20:05:16
はい
782デフォルトの名無しさん:2007/10/12(金) 20:09:48
そうなんですか
どうすればできますか?
783デフォルトの名無しさん:2007/10/12(金) 20:11:35
消す方法は文字の表示方法による
784デフォルトの名無しさん:2007/10/12(金) 20:16:07
printfですけど・・・・
785デフォルトの名無しさん:2007/10/12(金) 20:22:37
system("cls");
786デフォルトの名無しさん:2007/10/12(金) 20:24:04
そうなのですか!ありがとうございます
787デフォルトの名無しさん:2007/10/12(金) 21:18:45
system関数を使うのってどうなの?移植性が壊滅しそうで嫌だ
788デフォルトの名無しさん:2007/10/12(金) 21:30:52
>>787
表示した文字を消すって時点で環境依存だから。
789デフォルトの名無しさん:2007/10/12(金) 21:34:55
100個ぐらい改行を出力すればポータブルに画面を消せそう
790デフォルトの名無しさん:2007/10/12(金) 21:43:12
プログラム超初心者です。
Visual C# 2005 Express Editionを使ってるのですが、
ツールボックスを詳しく解説してるサイトってありませんか?
ググってもあんまり見つからないのですが・・・
791デフォルトの名無しさん:2007/10/12(金) 21:43:16
標準出力がペーパーメディアで死ぬ。
792デフォルトの名無しさん:2007/10/12(金) 21:54:26
構造体を引数に使った関数をヘッダーファイルで定義するとエラーが出てしまいます
.c内に入れるとコンパイルできるのですが、できればヘッダーの中に入れておきたいです
解決策はあるでしょうか?
793デフォルトの名無しさん:2007/10/12(金) 21:56:59
>>792
問題の出る最小のソースをうp!
794デフォルトの名無しさん:2007/10/12(金) 21:57:40
>>792
エラーを書け。
おそらくプロトタイプ前に構造体が定義されてない
795デフォルトの名無しさん:2007/10/12(金) 22:07:27
#include <stdio.h>
#include "test.h"
typedef struct{
int yx;
}PARA;
PARA param={1};
int main(){
print(param);
return 0;
}
test.h
void print(PARA param){
printf("%d",param.yx);
}

エラー E2147 C:\Cpro\stest\test.h 1: 引数宣言は 'PARA' で始められない
エラー E2294 C:\Cpro\stest\test.h 2: . または .* の左側に構造体が必要(関数 print )
エラー E2342 C:\Cpro\stest\test.c 12: パラメータ 'param' は int 型として定義されているので PARA は渡せない(関数 main )

です
お願いします
796デフォルトの名無しさん:2007/10/12(金) 22:09:02
test.h で PARA を使うよりも前の位置に PARA の定義が必要
797デフォルトの名無しさん:2007/10/12(金) 22:09:48
>>795
構造体定義をヘッダーにかけ
798デフォルトの名無しさん:2007/10/12(金) 22:11:27
>>796,>>767
有難うございます
コンパイルできました
799デフォルトの名無しさん:2007/10/12(金) 22:12:03
>>795
>794
構造体の定義もインクルードファイルに書いておけ。
800デフォルトの名無しさん:2007/10/12(金) 22:15:08
ここで質問に答えられるレベルの人がどんな仕事とかについてるのか知りたい
教えてぽ
801デフォルトの名無しさん:2007/10/12(金) 22:41:16
>>800
この前まで仕事についていました
802デフォルトの名無しさん:2007/10/12(金) 22:49:34
10年くらい前まではフルにCで書いていた。
今ではスクリプト言語の拡張モジュールを書くのに使っている。
既存のCで書かれたライブラリとつなげたり、
性能が必要な部分だけちょこっとCで書いたり。
803デフォルトの名無しさん:2007/10/12(金) 22:51:38
やっぱりプロの人なのか・・・
804デフォルトの名無しさん:2007/10/12(金) 23:04:59
この間プロになった
805デフォルトの名無しさん:2007/10/12(金) 23:20:47
>>800
プロ歴2年目
プログラミング歴9年目
彼女居ない歴27年目
806デフォルトの名無しさん:2007/10/12(金) 23:21:53
組み込みでCを3年ほど触ってる
制限の大きい環境の中での開発は楽しい。
807名無し:2007/10/12(金) 23:30:01
偶数か奇数かを表示するプログラムの条件はどうなるか分かる人います??
If文を使うってことわ分かるんですが・・・・
808デフォルトの名無しさん:2007/10/12(金) 23:31:13
います
809デフォルトの名無しさん:2007/10/12(金) 23:31:30
やっぱこういう人っているんだな
810デフォルトの名無しさん:2007/10/12(金) 23:32:18
#include <stdio.h>
#define N 5
sort(int data[],int N){
int i,j,k;
int max,max_num;
int data[]
for (i = 0;i < N;i++){
max = data[i];
for (j = i + 1;j < N;j++)
if (max < data[j]){
max = data[j];
max_num = j;
}
for (k = max_num;k > i;k--)
data[k] = data[k - 1];
data[i] = max;
} }
int main(void){
int a[N]={1,2,3,4,5};
int i;
sort(a,N);
for (i = 0;i < N;i++)
printf("%d",a[i]);
return 0;
}
3行目あたりが怪しいと思うのですが…どうすればいいですか?
811名無し:2007/10/12(金) 23:32:22
どうすればいんですか??初心者なもんで教えてください。
812デフォルトの名無しさん:2007/10/12(金) 23:34:08
>>810
それをどうしたいの
813デフォルトの名無しさん:2007/10/12(金) 23:36:12
>>812
配列を大きい数順に並びかえて表示させたいのです
814デフォルトの名無しさん:2007/10/12(金) 23:37:09
>>811
#include<stdio.h>
int main(void){
int n;
scanf("%d",&n);
while(n>0)n-=2;
if(!n)printf("偶数です");
else printf("奇数です");
return 0;
}
815デフォルトの名無しさん:2007/10/12(金) 23:43:20
>>814だと負の数がすべて奇数になってしまうな
#include<stdio.h>
int main(void){
int n;
scanf("%d",&n);
if(n&1) printf("奇数です");
else printf("偶数です");
return 0;
}
816名無し:2007/10/12(金) 23:44:09
>>814
ありがとうございます。でもwhile(n>0)n-=2;の意味がわかりません><
817デフォルトの名無しさん:2007/10/12(金) 23:49:36
>>816
0未満になるまで入力値を-2していく。
どんな正の整数も最終的に0か-1になる。
0なら偶数、-1なら奇数としてる。
818名無し:2007/10/12(金) 23:51:03
>>815
ありがとうございます。
n&1の意味が分かりません><
&の後ろに数字を入れてもいんですか?
819デフォルトの名無しさん:2007/10/12(金) 23:51:46
>>818
ここの&は論理演算だ。
820デフォルトの名無しさん:2007/10/12(金) 23:52:10
>>818
1&nでもいいよ
821名無し:2007/10/12(金) 23:55:43
>>817
なるほど!どんな数でも−2していけばその値が0かー1になるからそれで判別するってことですか!ありがとうございます。
822デフォルトの名無しさん:2007/10/12(金) 23:58:43
×どんな数
○どんな正の整数
823名無し:2007/10/12(金) 23:59:20
>>819
あー!つまりn=1の解釈ですね。分かりました。
824名無し:2007/10/13(土) 00:00:50
>>814>>815ってどっちがより正しいですか??
825デフォルトの名無しさん:2007/10/13(土) 00:02:43
>>824
>>814だと-2とかも奇数になってしまう。>>815だと大丈夫。
826名無し:2007/10/13(土) 00:04:57
>>825
親切な対応感謝です。
827デフォルトの名無しさん:2007/10/13(土) 00:06:04
>>823
勘違いしてね?
nの最下位ビットが1かどうかの判定をしているんだぞ?
828デフォルトの名無しさん:2007/10/13(土) 00:06:07
整数Nを入力し、N!を求めるプログラムを無限ループを使用して作れ。ただし、負の数字は再入力とし数字0の入力でプログラム終了とする。

整数を入力後8bitまでの2進数で算出するプログラムを作れ。ただし、1bit目は?と出力できること。また、8bit以上の数字は再入力とし、負の数字の入力でプログラム終了とする。

↑の2つの問題わかるかたお願いします。
829デフォルトの名無しさん:2007/10/13(土) 00:06:47
なんという無限ループ
830名無し:2007/10/13(土) 00:07:27
あと、条件文において
n=getchar();
という文は必ずしも必要ではないんですか??
831デフォルトの名無しさん:2007/10/13(土) 00:08:03
>>828
宿題スレ行け
832デフォルトの名無しさん:2007/10/13(土) 00:08:17
数字以外の入力があったときどうすればいいのか書いてないので回答不能
833デフォルトの名無しさん:2007/10/13(土) 00:10:11
>ただし、1bit目は?と出力できること。
はてな?
834名無し:2007/10/13(土) 00:14:00
>>827
わかりました。
835デフォルトの名無しさん:2007/10/13(土) 00:41:25
>>828
?と出力ってのがよくわかんなかったが、とりあえず下の問題だけできた
#include<stdio.h>
int main(void){
int n,i;
while(0x0==0x0){
flg:
printf("整数を入力してください:");
scanf("%d",&n);
if(n&1<<(sizeof(n)*8-1))return 0;
if(n&~0xFF)goto flg;
for(i=1<<7;i>0;i>>=1)printf("%d",!!(n&i));
putchar('\n');
}
}
836828:2007/10/13(土) 01:01:18
>>835
ありがとうございます!残る問題もどなたかお願いします
837デフォルトの名無しさん:2007/10/13(土) 01:10:05
>>810
sort(int data[], int N) → void sort(int data[], int n)
sort関数内のNをnに置き換え
int data[] を削除
838デフォルトの名無しさん:2007/10/13(土) 01:28:53
>>836
#include<stdio.h>
int main(void){
int n,i;
flg:
printf("整数を入力してください:");
scanf("%d",&n);
if(n){
if(n>0){
i=1;
while(n>!0) i*=n--;
}else goto flg;
}
else return 0;
printf("%d\n",i);
goto flg;
}
839デフォルトの名無しさん:2007/10/13(土) 02:33:55
goto使ってる時点で、ヤバイよ?
840デフォルトの名無しさん:2007/10/13(土) 02:47:28
gotoしか突っ込めないならヤバイよ?
841デフォルトの名無しさん:2007/10/13(土) 02:50:34
>>839みたいな奴って教科書のサンプルプログラムを動かしてるだけの癖に
「Cできます」みたいな奴が多い。
実際はgotoはふつうに使うよ
842デフォルトの名無しさん:2007/10/13(土) 03:38:04
むしろC言語少ししかわからないニート何だろ
843デフォルトの名無しさん:2007/10/13(土) 03:40:18
エラー処理纏めたり、多重ループを抜けたりするときに使うことはあるが、
>>838みたいな使い方はする意味が無い。読みづらくなるだけ。
>>841の程度が知れるわ。

そもそも>>838>>828に対する嫌がらせで書いてるだけだろ。
844デフォルトの名無しさん:2007/10/13(土) 03:43:15
ふいんき(←何故か変換できない)読めよ
845デフォルトの名無しさん:2007/10/13(土) 04:50:54
もう反論打ち止めかよw
846デフォルトの名無しさん:2007/10/13(土) 05:01:42
gotoに突っ込むなら>>814からの一連の流れに突っ込んで欲しかった
つか誰か止めろよ
847デフォルトの名無しさん:2007/10/13(土) 05:18:17
多重ループ抜けるのにgoto使ってるのって今まで見たこと無いな
>>838と同じで代替手段があるのにわざと読みにくく書いてるんじゃね?
848デフォルトの名無しさん:2007/10/13(土) 06:35:27
ZIPを解凍するプログラムを作りたいのですが、unzip32.dllの使い方が分からなくて困ってます。
そもそもDLLを使用するにはどうすればいいのでしょう?
ググっても自分で作ったLIBファイルを使うものしか出てきません。
また、そのDLLで使用できる関数を調べるにはどうすればいいのでしょうか?
849デフォルトの名無しさん:2007/10/13(土) 07:49:09
ググリ方がおかしい
850デフォルトの名無しさん:2007/10/13(土) 07:54:55
unzip32.dllでググればunzip32.dllについては分かるだろ。DLLについても同様。
DLLの関数はC言語だけで調べるよりもVBとかも含めて調べるといい
851デフォルトの名無しさん:2007/10/13(土) 07:56:54
頭がおかしい。
852デフォルトの名無しさん:2007/10/13(土) 08:33:35

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
853デフォルトの名無しさん:2007/10/13(土) 08:34:13

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
854デフォルトの名無しさん:2007/10/13(土) 08:34:56

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
855デフォルトの名無しさん:2007/10/13(土) 08:35:38

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
856デフォルトの名無しさん:2007/10/13(土) 08:36:14

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
857デフォルトの名無しさん:2007/10/13(土) 09:00:58
>>850
ありがとうございます。配布元にドキュメントがありました。

しかし疑問なのですが、DLLの使い方はネットで調べなければわからないものなんですか?
ドキュメントが存在しなかったり、検索に引っかからない無名DLLの場合はどうすればいいのでしょう?
他のソフトに同梱されているDLLが便利そうだから使ってみる、ということはできないのでしょうか。
858デフォルトの名無しさん:2007/10/13(土) 10:32:45
つ「リバースエンジニアリング」
859デフォルトの名無しさん:2007/10/13(土) 11:03:16
VBから使える種類のDLLだと
VBで参照設定すれば中の関数の一覧が見れる。

C#等.NET言語でも同じように中身を見れる。

いずれにせよ、Cとはあまり縁のない世界だな。
860デフォルトの名無しさん:2007/10/13(土) 13:23:39
VC++6の使い方が分からんとです。
#include <windows.h>

int PASCAL WinMain(HINSTANCE hinstCurrent, HINSTANCE hinstPrevious,LPSTR lpszCmdline,int nCmdShow)
{

MessageBox(NULL,"aaa","bbb",MB_OK);
return 0;
}

みたいな簡単なプログラムがエーラーが出るとです。

プロジェクト 'tekitou - Win32 Debug' 用の中間ファイルおよび出力ファイルを削除しています。
--------------------構成: tekitou - Win32 Debug--------------------
コンパイル中...
tekitou.c
リンク中...
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/tekitou.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

tekitou.exe - エラー 2、警告 0

エラーの対処・理由・上手い使い方を教えて?
易しいサイト等も有ったら、教えてちょ
m(_ _)m
861デフォルトの名無しさん:2007/10/13(土) 13:28:27
>>860
エラー見ればmainが無いってわかるじゃん。
プロジェクトの設定がおかしいんじゃね?
862860:2007/10/13(土) 13:38:08
>>861
昨日は動いたのだけど、今日やったら動か無い・・・
ファイル 開く 〜.c
では駄目?
また一々プロジェクトを設定するものなの?
VCは初心者じゃけん、迷惑かけるけど付き合いヨロ
m(_ _)m
863860:2007/10/13(土) 13:39:23
備考 .cで開いて、ビルド・実行 です。
864デフォルトの名無しさん:2007/10/13(土) 13:41:43
スレ違いだ、他所行け
865デフォルトの名無しさん:2007/10/13(土) 13:53:43
ソースファイルじゃなくてプロジェクトファイルを開け
866デフォルトの名無しさん:2007/10/13(土) 13:54:38
質問させてください 柴田望洋著「明解C言語入門編」の演習で
「2行3列と3行2列の行列の積を求めるプログラムを作成せよ」
x=1,2,3
  4,5,6
y=1,5
  5,3
  8,1
というモノがあるのですが

#include <stdio.h>
int main(void)
{
int i,j,k;
int ma[2][3] = { {1,2,3},{4,5,6} };
int mb[3][2] = { {1,5},{5,3},{8,1} };
int mc[2][2] = {0};

for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<3;k++){
mc[i][j] += ma[i][k] * mb[k][j];
}
printf("%d",mc[i][j]);
}
putchar('\n');
}
return (0);
}

上記のプログラムで良いらしいのですが、何故2行3列と3行2列の積が2行2列になるのか。
mc[i][j] += ma[i][k] * mb[k][j];のように加えて行くのか理解することが出来ません。
どのような理屈なのかをお分かりの方、教えてください。
867デフォルトの名無しさん:2007/10/13(土) 13:56:12
>>866
>何故2行3列と3行2列の積が2行2列になるのか。
プログラムの問題じゃない、単なる行列の積だ。
授業でやらなかったのか?
868デフォルトの名無しさん:2007/10/13(土) 14:00:21
「行列の積」という言葉、言われるまで全く思い出せませんでした。
失礼しました。
869デフォルトの名無しさん:2007/10/13(土) 14:01:14
ぽかーん
870860:2007/10/13(土) 14:17:13
>>865
有難うm(_ _)m

スレチらしいので、
誰か、誘導よろ! 
他に無い?
871デフォルトの名無しさん:2007/10/13(土) 14:19:33
>>870
くだすれVisual C++(超初心者用)その5
http://pc11.2ch.net/test/read.cgi/tech/1181181665/
872デフォルトの名無しさん:2007/10/13(土) 17:30:07
>>866
これ値が一つずつ多くね?
例えば2行2列なら[1][1]でいいだろ
873デフォルトの名無しさん:2007/10/13(土) 17:31:39
>>872
VBとCがごっちゃになっていないか?
874デフォルトの名無しさん:2007/10/13(土) 17:32:15
>>872
キミは何を言ってるんだ…
875デフォルトの名無しさん:2007/10/13(土) 17:53:24
俺が悪かった。切腹はしない
876デフォルトの名無しさん:2007/10/13(土) 18:01:56
あいつマジ切腹しろよ
877デフォルトの名無しさん:2007/10/13(土) 21:28:52
大きさが不定の配列ってどのように扱えばいいんでしょう。
例えば1バイトかもしれないし、1GB以上かもしれないような場合、最初に[10000]とかで宣言するわけにはいきませんよね。
かと言って[]で宣言したとしても、結局mallocの時にはサイズを指定することになるので、あまり変わらない感じです。
こういう配列は普通どうやって実現するんですか?
878デフォルトの名無しさん:2007/10/13(土) 21:32:07
とりあえず適当なサイズでmallocしておく。
途中でもっと大きなものが必要になったら、reallocで大きなサイズに確保しなおす。
879デフォルトの名無しさん:2007/10/13(土) 21:33:03
C++なら標準でvectorという可変長配列があるけど
Cには標準では無いので自作するしか
(mallocとreallocを使うとか)
880デフォルトの名無しさん:2007/10/13(土) 21:37:40
>>878
なるほど。しかしreallocも結局サイズ指定が必要ですよね。
必要なサイズが本当に全くわからない場合でも、その方法は有効なのでしょうか?

>>879
便利そうですね。
他の言語だとこのような配列は普通に扱えるんですか?
881デフォルトの名無しさん:2007/10/13(土) 21:42:18
>>880
必要なサイズがわからないデータなど存在するわけがなかろう…
882デフォルトの名無しさん:2007/10/13(土) 21:44:24
>>880
目的はストリーミングなのか?
883860:2007/10/13(土) 21:49:56
>>871
有難う
向こうに常駐します。
884デフォルトの名無しさん:2007/10/13(土) 21:52:41
>>880
どうせvectorも、適当に確保しておいて必要になったら確保し直す戦略だよ。
885デフォルトの名無しさん:2007/10/13(土) 22:03:52
>>880
配列にデータを格納するその瞬間に、そのデータを入れるのに必要なサイズまで拡張するの
格納するデータはその瞬間は手元にあるわけだから、サイズがわからないわけないだろう
886デフォルトの名無しさん:2007/10/13(土) 22:23:52
>>885
ということは、サイズの指定は変数で行えばいいんですか?
サイズを測ってそれを変数に代入してメモリ確保、ということも可能なんでしょうか。
しかしそもそも、サイズを測るためにはまずメモリに格納されていなければ不可能だと思うのですが…。
887デフォルトの名無しさん:2007/10/13(土) 22:27:51
どんだけ水が入ってるかわからなくても、
コップですくい続ければ最終的には、
コップN個分で足りる。
888デフォルトの名無しさん:2007/10/13(土) 22:35:55
>>886
データが存在するなら、どこかの記憶域にあるわけだろ…
889デフォルトの名無しさん:2007/10/13(土) 22:37:18
>>886
おまいが心配しているケースを具体的に書いてみ
890デフォルトの名無しさん:2007/10/13(土) 22:38:37
>>888
HDDや標準入力から、メモリに読み込まずにサイズを測ることは可能なんですか?
891デフォルトの名無しさん:2007/10/13(土) 22:44:41
>>890
とりあえず1KBのメモリを確保して、1KB読む。
まだデータが残ってるなら、1KB追加確保して次の1KBを読む。
まだ残ってるなら、2KB追加確保して次の2KBを読む。

何も難しいことはなかろう。
892デフォルトの名無しさん:2007/10/13(土) 22:44:41
>>890
例えば、終わりに達するまで1KBずつ読み込んでいく。
1KB読むたびに、配列を1KBずつ拡張していく。そんな感じ。
893デフォルトの名無しさん:2007/10/13(土) 22:44:53
>>889
例えばキーボードから入力された文字列の大きさを測る場合、
文字列はコピペを駆使して100MB以上にすることも可能ですよね。
そういうものを暴走させずに対処したいんです。
894デフォルトの名無しさん:2007/10/13(土) 22:46:19
>>891-892
そんなことができるんですか!順に読み込むにはどの関数を使えばいいんでしょうか?
895デフォルトの名無しさん:2007/10/13(土) 22:46:24
fgetsで指定サイズ読み込み
EOFでなければreallocで確保領域増やしてまたfgets
この繰り返し。とか。
896デフォルトの名無しさん:2007/10/13(土) 22:47:12
>>894
しねよ…
897デフォルトの名無しさん:2007/10/13(土) 22:48:31
>>891>>892
ケコーン
898デフォルトの名無しさん:2007/10/13(土) 22:50:00
HDDからというのがファイル読み込みを意味するのであれば、
ファイルポインタを制御してファイルサイズを取得してから
データの読み込みを行う、とかいう手もある。

>>895
fgetsはオーバーした分捨てるからダメじゃね?
readとかgetcharとか
899デフォルトの名無しさん:2007/10/13(土) 22:51:58
>>898
あれ、捨てるんだっけ?
すまん
900デフォルトの名無しさん:2007/10/13(土) 22:54:54
>>894
fgetcでもfreadでも好きなの使えばいいよ
901デフォルトの名無しさん:2007/10/13(土) 22:55:18
なるほど、HDDのファイルを読むのは簡単なんですね。ありがとうございます。
標準入力に関してはどうでしょう?
サンプルを見てもいつも[1000]とか「これくらいなら大丈夫だろう」みたいな
あまり根拠の無い数字ばかり書いてあって、無駄だしスマートじゃないしで
何かいい方法が無いのかと気になってます。
902デフォルトの名無しさん:2007/10/13(土) 22:58:08
>>901
stdinって知ってる?
903デフォルトの名無しさん:2007/10/13(土) 23:00:12
>>901
同じだよ
fgetcでもfreadでも好きなの使って、同じようにメモリ確保して拡張しながら読んでいけばいい
904デフォルトの名無しさん:2007/10/13(土) 23:05:50
ファイルも標準入力も、扱い方は同じなんですか。
scanfくらいしか使えないと思ってたので、fread系が使えるとは驚きです。
それならいろいろ応用が効きそうですね。ありがとうございました。
905デフォルトの名無しさん:2007/10/13(土) 23:22:00
>>898
捨てるかよ、馬鹿言ってんじゃないよ。
906デフォルトの名無しさん:2007/10/13(土) 23:23:17
こん馬鹿ちんが!!
907デフォルトの名無しさん:2007/10/13(土) 23:26:41
「要素数10の整数型配列を2つ用意し、片方の整数値で初期化してください。
そして、奇数の値のみもう1つの配列に代入してください。」
という問題なのですが、下のコードを実行すると
配列1 = 10 15 22 45 9 66 71 4 37 82
配列2 =
という様に配列2が表示されません。どこがダメなのか教えてください。
よろしくお願いします。

#include <stdio.h>
int main(void)
{
int array1[10] = {10, 15, 22, 45, 9, 66, 71, 4, 37, 82}, array2[10];
int *p1, *p2;
int i, j;
p1 = array1;
p2 = array2;
for (i = 0, j = 0; i < 10; i++); {
if (*(p1 + i) % 2 == 1) {
*(p2 + j) = *(p1 + i);
j++;
}
}
printf("配列1 = ");
for (i = 0; i < 10; i++) {
printf("%d ", *(p1 + i));
}
printf("\n配列2 = ");
for (i = 0; i < j; i++) {
printf("%d ", *(p2 + i));
}
return 0;
}
908907:2007/10/13(土) 23:33:27
申し訳ありません!自己解決いたしました。
forの()のあとにセミコロンを入れていました。
考えてくださっていた方ありがとうございました。
909デフォルトの名無しさん:2007/10/13(土) 23:33:41
>>907
for (i = 0, j = 0; i < 10; i++); { <−このセミコロン';'が余計
if (*(p1 + i) % 2 == 1) {
*(p2 + j) = *(p1 + i);
j++;
}
910デフォルトの名無しさん:2007/10/13(土) 23:35:27
>>907
処で、なんでarray1[i]と書かずにわざわざ無意味に*(p1 + i)なんて書いているの?
911907:2007/10/13(土) 23:35:34
>>909
ありがとうございます。
スレ汚し申し訳ありませんでした。
912デフォルトの名無しさん:2007/10/13(土) 23:40:16
ポインタの勉強してんだろチクショーーーーーー!!!!!!!!!
913907:2007/10/13(土) 23:40:33
>>910
まだ初心者で入門書のポインタの章をやっていたところ
問題文に「ポインタを使って」と書かれていたのでそう書きました。
他にもよい方法があるのかもしれませんが、考えが及びませんでした。
914デフォルトの名無しさん:2007/10/13(土) 23:43:46
%-6s の-6ってなんですか?
915デフォルトの名無しさん:2007/10/13(土) 23:44:49
- は左詰め
6 は桁数
916デフォルトの名無しさん:2007/10/13(土) 23:45:47
それならそれで、*p1にして++p1すればいいのに。
917デフォルトの名無しさん:2007/10/13(土) 23:46:38
そういうのってどこに載ってるの?なんでお前ら知ってんの?
918デフォルトの名無しさん:2007/10/13(土) 23:46:52
>>915
ありがとうございます
919デフォルトの名無しさん:2007/10/14(日) 00:01:17
そんぐらいなら普通にman見りゃ載ってんだろ
920907:2007/10/14(日) 00:03:15
>>916
レスありがとうございます。
最初のfor文のことですよね?
とするとその次のループでまたp1とp2を0に戻すのが面倒だと思いiを使いました。
しかし、今思うとそちらのほうが効率がよいかもしれませんね。ありがとうございました。
921デフォルトの名無しさん:2007/10/14(日) 00:05:09
まぁ、色々試行錯誤して味噌。
922デフォルトの名無しさん:2007/10/14(日) 00:19:06
余談だが・・・

array[i]は*(p1 + i)のこと
Cの配列がゼロオリジンでなければ*(p1 + i - 1)
この-1を余計なものとCの設計者は考えたんだな
923デフォルトの名無しさん:2007/10/14(日) 02:01:40
>>724ウソ
924デフォルトの名無しさん:2007/10/14(日) 02:21:55
>>923
確かに間違ってるが恐ろしいほどの遅レスだなw
925デフォルトの名無しさん:2007/10/14(日) 15:03:57
おいプロの方!

学生時代の勉強方を教えてください
926デフォルトの名無しさん:2007/10/14(日) 15:50:11
とにかく何かたくさん、自分でプログラムを書く
習うより慣れ
927デフォルトの名無しさん:2007/10/14(日) 19:24:37
まずスペルを覚える
Lは三つじゃなくて二つだ
928デフォルトの名無しさん:2007/10/14(日) 19:29:08
forで150回くらいループして処理したいときに
forの中身に条件式が6個くらいあるとき、
違う関数に条件式書いたほうがいいかな?

for文の中に関数を置くと処理に時間がかかると聞いたんですけど。
929デフォルトの名無しさん:2007/10/14(日) 19:40:05
>>928
関数は機能として作成するべき
長いからひとつの関数にするというのはよくない

関数呼び出しはアセンブラのcall命令とレジスタのpush/popが入るから
実効命令は長くなる
だけど150回のループでは体感でその違いはわからないだろう
930デフォルトの名無しさん:2007/10/14(日) 20:55:26
>>925

まるで東大入学の勉強法を聞くようだが
プロになるのは東大に入るのよりずっと簡単だぞ。
931デフォルトの名無しさん:2007/10/14(日) 21:08:05
>>928-929
is〜〜()ぐらいなら機能として作っても良いと思うけどね。
ぶっちゃけ条件が6個あっても、マクロやら関数になっててもどっちでも良い。
とりあえず自分が見やすい方にしたら?
あとはまぁ、forの条件に書くんじゃなくて、ループのブロック内で判定してbreakするとか。
932デフォルトの名無しさん:2007/10/14(日) 21:18:28
賢いコンパイラなら適当にインライン化してくれるだろうし、どっちでもいいと思うよ。
933デフォルトの名無しさん:2007/10/14(日) 21:21:02
俺も初心者の頃は
「こんなに関数呼び出してオーバーヘッドはないのかな
スタック?は大丈夫?(←当時は良く分かってない)」
と悩んだけど

たいていの場合鼻くそ程も影響しないケースが多い
934名無し:2007/10/14(日) 21:26:07
3の倍数かつ5の倍数の条件式って
X=3&&X=5
でいいんですか??
935デフォルトの名無しさん:2007/10/14(日) 21:26:12
>>932
そんな勝手なことするの?
inlineをしていしないとインラインにはならないのでは?
936デフォルトの名無しさん:2007/10/14(日) 21:28:20
>>934
X=3がどうして3の倍数だよw
しかも代入しているし

!(x%3) && !(x%5)かな?
937デフォルトの名無しさん:2007/10/14(日) 21:28:27
>>934
NO!
938デフォルトの名無しさん:2007/10/14(日) 21:29:46
>>934
(x % 3 == 0) && (x % 5 == 0)

つうかまず算数をだな
939名無し:2007/10/14(日) 21:32:05
>>938
なるほど!ありがとです。
940デフォルトの名無しさん:2007/10/14(日) 21:35:06
>>935
C99からしかinlineキーワードは存在しないよ。
941デフォルトの名無しさん:2007/10/14(日) 21:45:28
この前まで全然エラーでなかったのに
main関数内の struct ftree *now5;だけで
セグメンテーションエラーでる。
これはどういうものなの?

構造体はこんなもんなんだけど
struct ftree{
double prob;//その状態での確率
double sprob;
942デフォルトの名無しさん:2007/10/14(日) 21:46:34
>>941
now5 の指す領域を確保していないに一票
943デフォルトの名無しさん:2007/10/14(日) 22:03:32
データファイルを入力として使い
検査データのファイルを使って処理をするようなプログラムがたくさん
のってるC言語の本とかありませんかね?

ソフトウェアテストの本とかいいって聞いたんだけど。
944デフォルトの名無しさん:2007/10/15(月) 00:07:50
質問させてください。

for(;*ps !='\0';ps++,pd++)
{
 *pd = *ps;   /*1文字複写*/
}
*pd = *ps;   /*最後の'\0'を複写*/

1行目のfor()内の最初の ;*ps ってどういう意味ですか?
あと、3行目と5行目でやってることって一緒じゃないんですか?
945デフォルトの名無しさん:2007/10/15(月) 00:10:50
*ps はポインタ ps の指している先を参照している

やってることは一緒だが、ループの回数よりもう一回余分にコピーする必要があるからそうしている
946デフォルトの名無しさん:2007/10/15(月) 00:13:14
>>945
*ps の前に ; をつけるのは何でですか?
947デフォルトの名無しさん:2007/10/15(月) 00:17:46
for 文は 3 つの式をセミコロンで区切って書くんだが、知らなかったか?

for (初期化; 条件; 更新)

初期化するものが何も無ければ、そこには何も書かない。
948デフォルトの名無しさん:2007/10/15(月) 00:21:02
>>947
ありがとうございました!!
949デフォルトの名無しさん:2007/10/15(月) 00:45:58

 *(ps+i)と*ps+i ってどう違うんですか?
 教科書読んでも分からなかったので..どなたか教えてください
950デフォルトの名無しさん:2007/10/15(月) 00:50:24
*ps+i は (*ps)+i と解釈される

1×(2+3) と 1×2+3 みたいなもん
951デフォルトの名無しさん:2007/10/15(月) 00:52:09

 950
 なるほど!ありがとうございました
952デフォルトの名無しさん:2007/10/15(月) 00:58:23
ひどい教科書もあったもんだ
953デフォルトの名無しさん:2007/10/15(月) 01:04:13
継承って一言で言うとどんな感じ?
未だに理解できん・・・
954デフォルトの名無しさん:2007/10/15(月) 01:04:47

 何度もすみません p_ptrってなんですか?
955デフォルトの名無しさん:2007/10/15(月) 01:31:30
>>954
単に何かの変数名なんじゃないの
956デフォルトの名無しさん:2007/10/15(月) 01:36:00

 >955
 そうなんですかΣ
 ありがとうございました
957デフォルトの名無しさん:2007/10/15(月) 01:36:12
関数の最後の}の後の行に出たエラーで"予期せぬ EOF が検出されました。"
と表示された時はどこを調べたらよいですか?
958デフォルトの名無しさん:2007/10/15(月) 01:39:50
>>953
継承はC++から入るより、いったんJavaやったほうが理解しやすいと思う。
んで、一言でいうのはむずいなあ。。 個人的な意見な。
959デフォルトの名無しさん:2007/10/15(月) 01:42:57
>>957
たぶんどこかで括弧とかコメントとかを閉じ忘れてる
960デフォルトの名無しさん:2007/10/15(月) 01:53:47

 一部抜粋です

 //探索
 for(p = data ; *p !='0' ;p++)
 {
   if(*p == key[0])
   {
     printf("文字%cは、%d番目にあった\n",key[0],p - data);
   }
 }

 //探索ってのは/*探索*/とは別なんですか?
 *p == key[0]の=ってなんで2つもいるんですか?
 誰か教えてください
961デフォルトの名無しさん:2007/10/15(月) 01:55:28
= は代入
== は比較
なぜってそう決まってるから

//〜 はコメントで /*〜*/ と一緒
962デフォルトの名無しさん:2007/10/15(月) 01:58:29

 >>961
 そうなんですか!!ありがとうございました
963デフォルトの名無しさん:2007/10/15(月) 06:26:57
>>961
//〜 は1行コメントで /*〜*/ は複数行コメント(1行でもOK)
初級C言語の本とかには絶対書かれてるから読んだほうがいいよ
964デフォルトの名無しさん:2007/10/15(月) 08:22:56

 if((c >= 'a' )&&( c <= 'z'))

 &&ってどういう意味ですか?
965デフォルトの名無しさん:2007/10/15(月) 08:25:02
>>964
本を買った方が早い
買いに行けないのなら初心者講座してるサイトでも探した方がいい
966デフォルトの名無しさん:2007/10/15(月) 08:43:31
const int array[][4]={
{1,2,3,200},
{1,3,3,200},
{2,2,3,200},
};
ってどういう意味ですか?値の初期化はできてますか?
967デフォルトの名無しさん:2007/10/15(月) 15:11:35
キーボードから整数 m と n (ただし m≤n) を入力し、
m 以上 n 以下の整数のうち 3 で割り切れるものの和を求めるプログラムを作成せよ。
という問題ですが、以下のプログラムだと、mが「3の倍数+2」、nが「3の倍数+1」のとき
正しい値が出力されません。どこがおかしいか教えてほしいです。
よろしくおねがいします。
#include <stdio.h>
int main(void)
{int m,n,X,total;
printf("数値を入力してください");
scanf("%d",&m);
printf("今入力した数値以上の数値を入力してください");
scanf("%d",&n);
total = 0;
X = 0;
if(m%3 == 0)
{total = total + m;
{while(m<=n)
m = m + 3;}
printf("%d",total);}
else if(m%3 == 1)
{while(m<=n)
{total = total + m;
X = m + 2;
m = m + 3;}
printf("%d",total);}
else
{while(m<=n)
{total = total + m;
X = m + 1;
m = m + 3;}
printf("%d",total);}}
968デフォルトの名無しさん:2007/10/15(月) 15:22:23
constは初期化したら後から代入できないことを指す。
[]の中に何もかかれてなければ、その初期化のときに必要な
領域が自動的につくられる。よって初期化はできてる

969ごめんこっち:2007/10/15(月) 15:26:52
#include <stdio.h>

int main(void)
{int m,n,X,total;

printf("数値を入力してください");
scanf("%d",&m);
printf("今入力した数値以上の数値を入力してください");
scanf("%d",&n);

total = 0;
X = 0;
if(m%3 == 0)
{total = total + m;
{while(m<=n)
m = m + 3;}
printf("%d",total);}
else if(m%3 == 2)
{while(m<=n)
{total = total + X;
X = m + 1;
m = m + 3;}
printf("%d",total);}
else
{while(m<=n)
{total = total + X;
X = m + 2;
m = m + 3;}
printf("%d",total);}
}
970デフォルトの名無しさん:2007/10/15(月) 15:27:58
>>967
#include <stdio.h>

int main(void)
{
int m, n, total;

printf("数値を入力してください");
scanf("%d", &m);
printf("今入力した数値以上の数値を入力してください");
scanf("%d", &n);

total = 0;
m=(m+2)/3*3; // m を 3 の倍数にする ※ここ重要
// while(m%3!=0) m++; でも可
while(m <= n)
{
total = total + m;
m = m + 3;
}
printf("%d", total);

return 0;
}
971デフォルトの名無しさん:2007/10/15(月) 15:31:05
>>970

m=(m+2)/3*3; // m を 3 の倍数にする ※ここ重要

ここで例えば4なら6、8なら9という操作をしてるんですね?
サンクスです。

よかったら>>969で変な値が出た理由を教えてほしいです。
972デフォルトの名無しさん:2007/10/15(月) 15:36:57
>>971
下のように置換すれば分かると思うよ
total = total + X;

total = total + X;
printf("debug total=%d\n", total);
973デフォルトの名無しさん:2007/10/15(月) 15:39:19
>>972
うーむ、初心者なんで少し難しいっすね。
まぁ参考になりましたありがとうございます!
974デフォルトの名無しさん:2007/10/15(月) 15:43:19
なるべく素朴に。

int main() {
int i, m, n, total = 0;
printf("数値を入力してください");
scanf("%d",&m);
printf("今入力した数値以上の数値を入力してください");
scanf("%d",&n);

for (i = m; i <= n; i++) {
total += i % 3 == 0 ? i : 0; // m 以上 n 以下の整数のうち 3 で割り切れるものの和
}
printf("%d",total);
return 0;
}
975デフォルトの名無しさん:2007/10/15(月) 16:01:33
int func1_c(const int n, const int m) {
int begin = n/3, end = m/3;
return 3 * (end + begin) * (end - begin + 1) /2;
}
これでも、あってますか?
976デフォルトの名無しさん:2007/10/15(月) 16:05:20
>>971
>if(m%3 == 0)
> {total = total + m;
> {while(m<=n)
> m = m + 3;}
> printf("%d",total);}
↑ここは入力ミス(ブロックのくくりミス)だと思うからとりあえず置いといて

>else if(m%3 == 2)
> {while(m<=n)
> {total = total + X;
> X = m + 1;
> m = m + 3;}
> printf("%d",total);}

ちゃんと脳内トレースすれば分かると思うけど、
ループ条件のチェックが"足す前"に行われている。
Xにm+1が代入されて、それが足される前にm+=3して条件チェックしちゃってるから、
m+1 <= n < m+3
になってると、while条件でXが足される前にループ抜けちゃう。
さらにいえば、ここでの条件チェックはm+1<=nとかX<=nとかすべき
(mがn以下であるからといってm+1がn以下とは限らない)
一例としては、
else if(m%3 == 2){
while(m+1 <= n){
total += m + 1;
m += 3;
}
printf("%d",total);
}
まあ、for使った方が分かりやすいかもね。
977デフォルトの名無しさん:2007/10/15(月) 16:05:26
>>975
っ n=4, m=6
978976:2007/10/15(月) 16:07:04
すまん、>>976の「ループ条件のチェックが〜」のくだりは忘れてくれ
そこは関係なかった
979デフォルトの名無しさん:2007/10/15(月) 16:11:40
>>975
int func1_c(const int n, const int m) {
int begin = (n+2)/3, end = m/3;
return 3 * (end + begin) * (end - begin + 1) /2;
}
980デフォルトの名無しさん:2007/10/15(月) 16:13:20
なるほど切り上げの除算じゃないと駄目だったんですね、ども
981デフォルトの名無しさん:2007/10/15(月) 17:05:04
プログラムの「前」ってどっちですか?

int main(int argc, char *argv[])
{
  int k = 0;             ← こっちが前?
  for (int i = 0; i < 10; i++) {
    k += i;
  }
  printf("こたえ=%d", k);  ← こっちが前?
}
982デフォルトの名無しさん:2007/10/15(月) 17:10:02
マルチすんなハゲ
983デフォルトの名無しさん:2007/10/15(月) 18:06:42
今マージソートマクロを自分で作ってみようと頑張っているんですが、
とりあえずマージする部分のマクロはできました。
分割マクロの再帰→マージマクロ再帰でできるかなあと考えています。
でも与えられた配列を分割を繰り返して
要素数1にするという行程のプログラムをどうしても考え付きません。
どなたか教えて下さい。。マージマクロはこのままで使える方向で作りたいです。

void merge(int data1[], int n1, int data2[], int n2, int data3[]){

int index1, index2, index3, i;
index1 = index2 = index3 = 0;

printf("merge_sort\n");

while(index1 < n1 || index2 < n2){
if(index1 < n1 && index2 < n2){
(data1[index1] >= data2[index2])?(data3[index3++] = data1[index1++],)
:(data3[index3++]=data2[index2++]);
for (i=0; i<(2*N) ;i++)
printf("%d,", data3[i]);
printf("\n");
}
else if(index1 < n1){
for (;index1 < n1 ;index1++)
data3[index3++] = data1[index1]; }
else {for( ; index2 < n2 ; index2++)
{data3[index3++] = data2[index2];}}
}
}
984デフォルトの名無しさん:2007/10/15(月) 18:19:04
どうみてもマクロじゃねえだろ
985デフォルトの名無しさん:2007/10/15(月) 18:22:32
>>983
で、自分で作ってみようと頑張っているのか?
986デフォルトの名無しさん:2007/10/15(月) 19:54:32
×マクロ
○関数

郷に入りては郷に従え
987デフォルトの名無しさん:2007/10/15(月) 19:58:51
おそらく VBA プログラマあがりだろ。彼らはプログラムのことをマクロと呼ぶ。
決してC言語の #define の事を言っているのでは無い。
それくらい文脈でわかりそうなもんだが、答えられないような難しい質問がくると
質問の本質とは関係ない部分で叩く煽る罵倒するのが、Cヲタの特徴。
988デフォルトの名無しさん:2007/10/15(月) 20:07:33
>>987
>それくらい文脈でわかりそうなもんだが

その甘さが数々の用語の誤用を招き
破壊と混乱をもたらしたのだ

何より先駆者に対する敬意が感じられない
989デフォルトの名無しさん:2007/10/15(月) 20:11:54
そうだそうだー!
990デフォルトの名無しさん:2007/10/15(月) 20:17:20
るせぇ!低級言語使用者どもめがっ!
991デフォルトの名無しさん:2007/10/15(月) 20:32:11
991?
992デフォルトの名無しさん:2007/10/15(月) 20:49:51
学校の課題です。キーボードから数値を入力して「正」「負」「0」を表示する。ピリオド「.」が入力されたら終了。
//全体の流れ
//無限ループ
//数値の入力、失敗したらピリオドであるかを判定。
//ピリオドなら終了if(getchar)=='.')break;
//ピリオドでなかったら入力間違いのメッセージを出して再入力。fflush(stdin);
//if文で正負0を判定して表示
//以上を繰り返す。
main()
{
int a;
printf("数値aを入力してください");
while(scanf("%d",&a)!='.'){
?????????????????????
if(getchar()=='.'){
break;
}
?????????????????????
if(a>0){
printf("PLUS\n");
}else if(a<0){
printf("MINUS\n");
}else if(a==0){
printf("ZERO\n");
}
}
}
2箇所、分かりません。よろしくお願いします。
993デフォルトの名無しさん:2007/10/15(月) 20:56:51
994デフォルトの名無しさん:2007/10/15(月) 20:57:21
>>992
C/C++の宿題を片付けます 97代目
http://pc11.2ch.net/test/read.cgi/tech/1191937213/
↑こちらへどうぞ

しかし変なプログラムですなあ、scanfの戻り値を'.'と比較とは……
995デフォルトの名無しさん:2007/10/15(月) 21:09:04
>>993
>>994
了解しました。
996デフォルトの名無しさん:2007/10/15(月) 21:50:49
ファイルから数値を読み取るとき、
その数値をに二次元配列にいれるとして
そこの二次元配列の最初の領域確保はどうするべきですか?
できるだけ領域を使わないとすると。
997デフォルトの名無しさん:2007/10/15(月) 21:53:47
あるデータファイルを入力として使い
検査データのファイルを使って処理をするようなプログラムがたくさん
のってるC言語の本とかありませんかね?

ソフトウェアテストの本とかいいって聞いたんだけど。
ファイルを実際に読み込み書き込みを使ってるプログラムを
書いてる本って少ないんだよなー
998デフォルトの名無しさん:2007/10/15(月) 21:54:40
C言語で、新しく、iccを入れて走らせたんですけど
fopenで、セグメンテーションフォルトが起きて困ってます。
古いバージョンのiccが入ってるマシンでは問題なく走ります。
考えられる原因は何なんでしょうか?
999デフォルトの名無しさん:2007/10/15(月) 22:06:46
ポインタの取り扱いミス
1000デフォルトの名無しさん:2007/10/15(月) 22:17:01
1000ならAO入試受かる
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。