5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら、俺に聞け! <19>

1 :ともっち:02/05/07 16:36
C言語質問すれ

・comp.lang.c FAQ
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

・前スレ
<18> http://pc.2ch.net/test/read.cgi/tech/1020260813/l50
リンクは>>2-3

2 :ともっち:02/05/07 16:36
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならすべてわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/

C言語なら、俺に聞け!
<17> http://pc.2ch.net/test/read.cgi/tech/1019372139/l50
<18> http://pc.2ch.net/test/read.cgi/tech/1020260813/l50

3 :ともっち:02/05/07 16:37
コンパイラ

タダで使えるBorland C++!
http://pc.2ch.net/test/read.cgi/tech/1002377328/l50

Win32用の開発環境のみ。

gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

------------------------ ライセンスや機能などに問題あり ---------------------
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

その他
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

4 :デフォルトの名無しさん:02/05/07 16:38
>>1
ともっちかよ!

5 :デフォルトの名無しさん:02/05/07 16:39
>>2
ともっち 38 かよ!

6 :_:02/05/07 16:46
JAVAとC言語ってどんな違いがあるんですか?


7 :デフォルトの名無しさん:02/05/07 16:46
>>6
ほとんど一緒。
天と地ほどの差しかない。

8 :デフォルトの名無しさん:02/05/07 16:47
>>6
生ハムと生肉くらいの違いです

9 :_:02/05/07 16:49
金融系のITでは、どちらが主流なんですか?
なんかコボルというのは前時代のプログラムで
こんなの学んでも食えんと言われてしまいました。

10 :デフォルトの名無しさん:02/05/07 16:50
>>9
いやコボルだろ〜
CはUNIX記述用言語として生まれただけあってUNIXと制御系でよく使われる。

11 :_:02/05/07 16:56
制御系っていうのはウイルスからPCを守ったりする
ソフトを開発する仕事のことですか?

あと、10氏レスを見ると、UNIXを学ぶなら、先にC言語を学んだほうがいいみたいな
感じですね

12 :デフォルトの名無しさん:02/05/07 16:57
>>11
一緒でいーんじゃねーの

13 :デフォルトの名無しさん:02/05/07 16:58
制御系ってOSとかじゃないの?

14 :デフォルトの名無しさん:02/05/07 17:07
Cが使われる制御系ってプロセス(工程)制御とか
エンジン制御とか埋め込み系じゃなか?

15 :デフォルトの名無しさん:02/05/07 17:08
C をやる前に Lisp か scheme をやったほうがいいYO

16 :デフォルトの名無しさん:02/05/07 17:10
>>15
まじかよ!
Emacs Lispとか?

17 :デフォルトの名無しさん:02/05/07 17:12
>制御系っていうのはウイルスからPCを守ったりする
>ソフトを開発する仕事のことですか?
違う。

>制御系ってOSとかじゃないの?
それも違う。

厳密な定義がある訳じゃないけどある特定の機械を動かすためのプログラムをさして
制御系とか組み込みなどという。いま身の回りにある電化製品はほとんどICが入っていて
これを「制御」しているのもやはりプログラムなわけです。
Cはこの制御系でよく使われるのですがそれは言語仕様が小さくてプログラム全体が
小さくできるからです。

18 :デフォルトの名無しさん:02/05/07 17:14
>>17
> 小さくてプログラム全体が小さくできるからです。

比較的低水準だからだとオモテタ

19 :デフォルトの名無しさん:02/05/07 17:16
制御系と組み込みは同じものだったのか・・・
逝こう・・・

20 :デフォルトの名無しさん:02/05/07 17:21
>>17
前橋さんの本でちょこっとかいてあったんですけど、「テレビのリモコンに使う組み込みチップ」
などは実務における、Cのよくある使い方の1つなのですか?
初心者丸出しの質問で申し訳ないですが。

21 :デフォルトの名無しさん:02/05/07 17:28
>>18
だからプログラムを小さくできるということでは。

22 :デフォルトの名無しさん:02/05/07 17:42
言語仕様が巨大で、処理系も巨大でも、サイズの最適化が強力ならプログラムのサイズ小さくできるんでないの?

23 :デフォルトの名無しさん:02/05/07 17:47
>>22
巨大も部分による。
予約後が莫大=巨大というとらえ方もあるし

24 :デフォルトの名無しさん:02/05/07 17:51
プログラムサイズがどうのこうのっていうのは、処理系側の話では?

25 :デフォルトの名無しさん:02/05/07 18:14
Smalltalkは予約語は無いし文法は最小限だけど、おせじにも言語仕様が小さいとは言えない、とか。

で、Cは出力されるコードが予想やすい言語仕様だから、小さく作りやすい、って事でないのかな?
あとライブラリが切り離せるとかもあるかな。

26 :デフォルトの名無しさん:02/05/07 20:45
void (*MainLoop)()=StartInit;

while(1){
 if(PeekMessage(&msg,(HWND)NULL,0,0,PM_REMOVE)){
  if(msg.message == WM_QUIT) break;
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }else{
  MainLoop();
 }
}

というふうにループ構造を作って,

void StartInit()
{
   printf("はじめ\n");
   MainLoop=SecandInit;
}

というふうにしているのですが、危険でしょうか?

27 :デフォルトの名無しさん:02/05/07 20:47
>>26
ぜんぜん平気。

28 :デフォルトの名無しさん:02/05/07 20:49
でもダサイ

29 :デフォルトの名無しさん:02/05/07 20:51
>>28
ガ━━Σ(゚д゚lll)━━ン

30 :デフォルトの名無しさん:02/05/07 20:52
>>26
そう言う風にする危険性より、MainLoop と言うへんてこな変数名や
SecandInit とか言う Manoy に匹敵するスペルミスが、あなたの
プログラムを糞なものにする危険性のほうが高いでしょう。

31 :デフォルトの名無しさん:02/05/07 20:58
>>30
ガ━━Σ(゚д゚lll)━━ン

    ∧ ∧        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄ ̄( ゚Д゚) ̄ ̄|   < もう寝るよ。おやすみ。
|\⌒⌒⌒⌒⌒⌒\   \
|  \           \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\  |⌒⌒⌒⌒⌒⌒|
  \ |_______|

32 :デフォルトの名無しさん:02/05/07 21:08
>>29 >>31
リアクションに ワラタ

33 :デフォルトの名無しさん:02/05/07 21:18
>言語仕様が巨大で、処理系も巨大でも、サイズの最適化が強力ならプログラムのサイズ小さくできるんでないの?

スレの流れを読んでよ。制御系の話でしょ。
制御系と言うことはOS上で走らせるプログラムじゃないんだから汎用的なコンパイラの
最適化は無意味じゃん。

22にわかりやすく言えばOS(組み込みにOSも何も無いんだけど)に当たる部分も書かなきゃ
いけないということ。

34 :22:02/05/07 21:25
>>33
ハァ?
チミ、クロス開発って知ってる?

35 :デフォルトの名無しさん:02/05/07 21:28
>>33
> 制御系と言うことはOS上で走らせるプログラムじゃないんだから汎用的な
> コンパイラの最適化は無意味じゃん。

ハァ ?

> 組み込みにOSも何も無いんだけど

ハァ ? (まあ、ない奴もあるけどさ...。)

36 :デフォルトの名無しさん:02/05/07 21:48
ハァハァいうな。うみびらきならもうすぐだ。

37 :デフォルトの名無しさん:02/05/07 21:49
善意に取れば >>35 は「ソースとオブジェクトが良く対応してた方が
(つまりソースがある程度低レベルな方が)組み込みのデバッグが楽」
といいたいのかも知れん。


38 :37:02/05/07 21:50
ごめん>>35じゃなくて>>33だった。

39 :デフォルトの名無しさん:02/05/07 22:02
なんかこう、ちょびっとasmとかm80とかの使い方覚えて
最適化のこと分かった気になって、ついつい2chでかたりはじめちゃう連中、
ほのぼの。


40 :デフォルトの名無しさん:02/05/07 22:12
>>37
> つまりソースがある程度低レベル
お前のプログラムみたいだな。(藁)

41 :2:02/05/07 22:19
(藁を(藁)とする>>40は新参

42 :デフォルトの名無しさん:02/05/07 22:25
>>41
2ch の古参でうれしいの ?

43 :デフォルトの名無しさん:02/05/07 22:26
必死な>>42を晒しage

44 :デフォルトの名無しさん:02/05/07 22:27
>>42
新 参 者 必 死 だ な ( 藁

45 :デフォルトの名無しさん:02/05/07 22:35
√藁

46 :42(騙り:02/05/07 22:36
そう、よかったわね。

47 :35:02/05/07 22:38
>>37
そんな変な取り方すんなよ。
別に制御系と言ったって、特殊なコンパイラ使ってるわけじゃない。まあ、
CPU が普通と違うとか、いろんな領域のアドレスがちゃんと指定できる
(どっちかってーと、リンカの仕事もあるけど) 等の機能はあるけど、
最適化に関しては、普通のコンパイラと同じだよ。
「組込に OS も何も無いんだけど」に至っては、何年前の話だ ? って感じが
する。まあ、俺もテレビのリモコンなんかは手がけたこと無いから、そのクラス
だとそう言うこともあるとは思うが、ちょっと大き目の LBP とか、銀行の端末
とかなら最近は、OS 乗せるのが普通。特に、GUI と Net (.NET では無いぞ。
TCP/IP とかのことだよ。) と ファイルシステムを備えるものなら、まず OS は
載っている。ちなみに、携帯電話用の OS もあるのは、知ってるよね。

48 :綾ナムナム(´人`):02/05/07 22:42
>>47 そんな必死に言い訳しなくてもいいのよ
ここがどんな場所だかわかってるの?

49 :デフォルトの名無しさん:02/05/07 22:44
>「組込に OS も何も無いんだけど」に至っては、何年前の話だ ? って感じが
>する。まあ、俺もテレビのリモコンなんかは手がけたこと無いから、そのクラス
>だとそう言うこともあるとは思うが、

いやまさにそういうレベルの話だったんだけど自分の周りの方が特殊だったんだ、、。
おはずかしぃ。

50 :デフォルトの名無しさん:02/05/07 22:47
目からもろこ?

51 :デフォルトの名無しさん:02/05/07 22:48
ちなみに33 = 49でそれ以外の方は違う方です。
善意の方も悪意の方もネタの方もそのつもりでお願いします。

#いや善意にとってくれた人が自己弁護しているようにとられているから申し訳なくて、、。

52 :デフォルトの名無しさん:02/05/07 22:52
正直、OSが使える人は羨ましい
仕事でブッちぎれたときはHello,world.
標準出力がある幸せ

53 :デフォルトの名無しさん:02/05/07 22:53
もろこ!!

54 :47:02/05/07 22:54
>>48
あらあら、言い訳にしか取れなかっただね。ごめんな、あんたにはちょっと
難しすぎたみたいね。

>>49
まあ、そう言う世界もあるらしいけど、制御系一般の話としてはちょっと
ね。ところで、OS 云々はいざ知らず、そう言うクラスの話だと、
「汎用的なコンパイラの最適化は無意味」なのか ? メモリーが少なそう
だからプログラムサイズを最優先にするとかのことを言ってるのか ?

55 :デフォルトの名無しさん:02/05/07 23:00
正直、小規模組み込み系の話はそっち系のスレでやって欲しい。


56 :デフォルトの名無しさん:02/05/07 23:04
不特定多数が相手なんだから、
相手の解釈がどうのこうの言わずに自分の表現を変えてみたら?


57 :デフォルトの名無しさん:02/05/07 23:07
>>56
誰に言ってるんだ。誤爆か ?

58 :デフォルトの名無しさん:02/05/07 23:43
リスト構造のプログラムで
struct node {
int data;
struct node *next;
};
なる構造体を定義し、メモリを確保する際に、
struct node *p_new;
p_new=(struct node *)malloc(sizeof(struct node));
とC言語の本に載っています。しかしながら、別の本には、
p_new=(struct node *)malloc(sizeof(struct node)+4);
のように+4、あるいは+8などしているのですが、これは
なぜでしょうか?何のためでしょうか?教えていただけませんか?
いずれにしてもコンパイルは出来ますし、実行も正常にできます。

59 :グリーン:02/05/07 23:45
どなたか、ぜひ教えて下さい。
Windowsプログラムで、エクスプローラでフォルダを選択して右クリックの[共有]で開く画面(フォルダ共有設定をする画面)を出したいのですが、方法はないものでしょうか。


60 :デフォルトの名無しさん:02/05/07 23:46
>>58
一般的に言って足す必要なし。
+4してる本に特殊な状況であることについての説明があるんじゃないの?
もしなければその本がクソ。

61 :デフォルトの名無しさん:02/05/07 23:46
理由なんか無いだろ

62 :デフォルトの名無しさん:02/05/07 23:47
>>59
C言語じゃ無理だね

63 :デフォルトの名無しさん:02/05/07 23:50
>>62
ワラタ

64 :デフォルトの名無しさん:02/05/07 23:51
>>58
メモリー屋さんの陰謀かもしれん。その本の題名と著者をさらせ。
と言うのは、おいといて...
struct node {
 struct node *next;
 int data[1];
}
って定義して (next と data の順序に注意)、
p_new = (struct node *)malloc(sizeof(struct node) + 4);
なら、p_new->data[0〜1] が使えて
p_new = (struct node *)malloc(sizeof(struct node) + 8);
なら、p_new->data[0〜2] が使える。と言う方法は昔あったけど...。
ちなみにこれは、sizeof(int) == 4 を仮定してるから、普通は...
p_new = (struct node *)malloc(
 sizeof(struct node) + (n - 1) * sizeof(int));
と言うようにやる。

65 :デフォルトの名無しさん:02/05/08 00:18
つうか質問です。
コンパイラ(visual C++.NET)は
どうしてレジストリいじくっちゃうんですか?
仕組みわかる人教えて

66 :デフォルトの名無しさん:02/05/08 00:22
>>65
API。アフォか。

67 :伊集院光:02/05/08 00:23
突然ですが私は伊集院光です。水曜25時25分
ゲームWAVE見てね。




68 :デフォルトの名無しさん:02/05/08 00:25
>>67
前まで見てたけどお前アフォなので見なくなった

69 :デフォルトの名無しさん:02/05/08 02:13
>>58
むかしむかし小さなメモリブロックをアロケートすると4だか8だかの倍数の
大きさにメモリブロックのサイズを調整しようとした時にバグになる処理系があった。
もしかしたらそれのトラウマが感染してるんじゃなかろうか?

70 :58:02/05/08 07:34
>>60,>>61,>>64,>>69
レスありがとうございます。助かりました。

71 :記念式典国民大会:02/05/08 09:29
なんかこのスレも回数を増すごとに>>1の名前におもしろみが薄れていく・・・
スーパーハイソサエティーハッカー日下部陽一から次はどう来るか楽しみだったのに・・・

72 :デフォルトの名無しさん:02/05/08 12:10
俺は糞壁の名前だけでむかつくから使わんで欲しいが。

73 :デフォルトの名無しさん :02/05/08 14:22
くだらない質問なんですけど、
TurboC++っていうコンパイラソフトで、
複数のファイルからなるプログラムをコンパイルする時はどうすればいいのでしょうか?
初心者なので優しく教えてね。よろしくお願いします。

74 :デフォルトの名無しさん:02/05/08 14:34
>>73
tcc file1 file2 file3...
もしくはmakeを使う。

75 :デフォルトの名無しさん:02/05/08 14:36
>>73
IDEからやりたいのなら、プロジェクトにコンパイルしたいファイルを追加する。
しかし、Turbo-C++のIDEのプロジェクトにはバグがあって、よく泣かされたな・・・・
(遠い目)

76 :デフォルトの名無しさん:02/05/08 14:40
>>74
レスありがとうございます!

出来ればtcc file1 file2 file3...、メイクの使い方を詳しく教えてください。
たびたびすいません。


77 :デフォルトの名無しさん:02/05/08 14:53
>>76
例えばfile1.cとfile2.cとfile3.objをコンパイルしたければ

tcc file1.c file2.c file3.obj

file1をオブジェクトファイルにコンパイルしたければ

tcc -o file1.c

makeはmakefileに次のような内容を編集する。

file.exe: file1.obj file2.obj file3.obj

78 :デフォルトの名無しさん:02/05/08 14:56
>>77
スマソ。tccのオブジェクトファイル作成は

tcc -c

だったです。

79 :デフォルトの名無しさん:02/05/08 15:06
>>77
何回やってもエラーが出ちゃいます(泣

tcc -c file1.c←あんまり意味がわかりません。。。すません。
根本的にどう繋げればいいか教えてくれると嬉しいです!

80 :デフォルトの名無しさん:02/05/08 15:35
>>75
レスありがとうございます!
それって単純に複数のプログラムを開いてコンパイルのボタン押すだけのことですよね?


81 :デフォルトの名無しさん:02/05/08 15:42
TurboC++ってマニュアルねーのかよ。

82 :デフォルトの名無しさん:02/05/08 15:45
なんかみんな親切やねぇ。

83 :sa:02/05/08 17:33
初心者です。

10     15  
5   →  10
3   を  5
       3

というふうにファイル(.txt)の先頭に書き込みしたいのですが、
fseekでストリームのファイルの位置をを先頭にもってきて書き込みすると、
15
5     と2行目が削除されてしまいます。


どうしたらうまくいくでしょうか?レス頂けるとありがたいです。

84 :デフォルトの名無しさん:02/05/08 17:38
ファイルの中身全部読み込んで1行書き込んでから
読み込んだ内容を戻してやったらだめなの?

85 :デフォルトの名無しさん:02/05/08 18:02
>>83
いきなりファイルの上で挿入する手段は無い。
>>84のいうとおりメモリ上で挿入してからファイルに書くか、もう1つファイル使え。

86 :デフォルトの名無しさん:02/05/08 19:02
他スレにも書いたのですが、
VC6.0にてfopen()を発行するとerrnoが12(ENOMEM)でエラーになってしまいます。
また、この現象が起こるPC、起こらないPCがありまして、
エラーとなっていたPCでも電源を切って翌日になると成功し始めたりします。。。
対策方をご存知でしたらおしえてください。おねがいします。

87 :デフォルトの名無しさん:02/05/08 19:04
マルチは氏ね

88 :デフォルトの名無しさん:02/05/08 19:04
コンパイルエラー?
DLLかなんかがぶっ壊れてるか、マシンの日付が未来になってるとか。
新規インストールのOSと新規インストールのVCで動作確認しる!

再現性がないやつは特定が困難かもなぁ。


89 :デフォルトの名無しさん:02/05/08 19:06
ENOMEM・・・本当にメモリが足りないとか?
それとも、ディスクが足りなくなってるとか、リソースが尽きてるとか、ファイルを開きすぎてるとか(閉じてないとか)、それ系のエラーかと。

90 :デフォルトの名無しさん:02/05/08 19:08
>>88
コンパイル時ではなく、実行時のエラーです。
ちなみに、一度エラーが起こらなくなるともう大丈夫なようです。


91 :デフォルトの名無しさん:02/05/08 19:10
>>89
同じスペックのマシンでも動く動かないがあるので、メモリは大丈夫なので、
リソースなのかなぁ。。。。?

92 :デフォルトの名無しさん:02/05/08 19:36
>>91
CRTのソースのfopen関係のあたりでENOMEM検索してみれば
いいんでない?

93 :デフォルトの名無しさん:02/05/08 19:43
雑誌で,
for(i=0;i<20;i++){
 Num[i]=i;
}



for(i=0;i<10;i+=2){
 Num[i]=i;
 Num[i+1]=i+1;
}

としたほうが早くなるよ。
都かいてあったのですが,皆さん使ってますか?使ったほうがいい?

94 :デフォルトの名無しさん:02/05/08 19:45
>>93
loop unrollingだな。
オプション付ければコンパイラがやってくれるよ。

95 :デフォルトの名無しさん:02/05/08 19:46
>>93
この程度はコンパイラが最適化するだろ。
バグを生みやすい意味不明のコーディングは逝ってよし!

96 :デフォルトの名無しさん:02/05/08 19:48
無駄。>>93
実際の性能改善だと
そんな細かい小細工以前に
やる事がたくさんある。

97 :デフォルトの名無しさん:02/05/08 19:56
関数の戻り値として,文字列を返したいのですが,

char *ReturnMoji(int i)
{
if(i==1)
return "1だよ"
if(i==2)
return "2だよ"
if(i==3)
return "3だよ"
}

というふうにして,char Text[256]; char mes[256];
Text=ReturnMoji(1);
sprintf(mes,"答えは%sです",Text);
DrawText(hdc,mes,-----);
としているのですが,%sの部分が変な文字で表されます。
どうしたらいいでしょうか?

98 :デフォルトの名無しさん:02/05/08 19:59
>>97
それでコンパイルが通るはずが無い。
ちゃんとコンパイル済のソースを賭。

99 :デフォルトの名無しさん:02/05/08 20:00
>>97
その方法では無理なので

char *ReturnMoji(char *buf,int i)
{



return *buf;
}

な感じで

100 :デフォルトの名無しさん:02/05/08 20:02
そもそも、
char Text[256];
Text=ReturnMoji(1);
constの配列にポインタは代入できまへん。

101 :デフォルトの名無しさん:02/05/08 20:04
>>98
まぁまぁ、コンパイラじゃあるまいし。

>>100
レベルの低い煽りだな。

102 :デフォルトの名無しさん:02/05/08 20:05
>>79
亀レスだが・・・・・・・
tlink.cfgとかtcc.cfgの設定はちゃんとできてる?パスが通ってない場合が
ほとんどだよ。

103 :デフォルトの名無しさん:02/05/08 20:17
char *ReturnMoji(int i)
{
static char *ret_str[3] = {
"1だお","2だよ","3だよ"
};
return (i>0 && i<=3)?ret_str[i-1]:NULL;
}

char *txtp, mes[256];
txtp = ReturnMoji(1);
sprintf(mes,"答えは%sです",txtp);
DrawText(hdc,mes,-----);


104 :79:02/05/08 20:17
>>102
レスありがとうございます。

tlink.cfgとかtcc.cfgの設定ってどこでおこなうのですか?
夕方からずーっとやってるんですが、ヘルプ見てもできないんです…

105 :デフォルトの名無しさん:02/05/08 20:20
>>103
あ、staticな領域は消えないか・・・ってまぁたトリッキーなw。

106 :デフォルトの名無しさん:02/05/08 20:21
>>104
全部教えないと何も出来ないのか?
コンパイラが入ってるbinフォルダにあるだろ

107 :デフォルトの名無しさん:02/05/08 20:22
>>104
オプションを記述するだけ
-Ic:\include_file_path\
-Lc:\library_path\
みたいに

懐かしいね

108 :デフォルトの名無しさん:02/05/08 20:22
>>103
そんなことする必要はないだろ
文字列リテラルはスタック領域に書き込まれる物じゃないんだから

109 :デフォルトの名無しさん:02/05/08 20:22
>>106
.NET SDKのコンパイラ群はなぜか%WINDIR%以下に展開されて死ぬほど悩みましたが?

110 :デフォルトの名無しさん:02/05/08 20:27
>>108
ハァ?
staticにしないとポインタがスタックにつまれて返せなくなるだろ。

111 :デフォルトの名無しさん:02/05/08 20:29
>>103
エラーチェックしろ。

112 :デフォルトの名無しさん:02/05/08 20:29
>>110
>>108さんの意見に同意。
char *ret_strは関数の終了と同時に破棄されるが、文字列リテラルの
アドレスは依然として有効。

113 :デフォルトの名無しさん:02/05/08 20:30
>>110は勘違いをしている。
ret_str配列は無くなってしまうが、
ret_str[i-1]はただのポインタだから
普通に返せる。

114 :110:02/05/08 20:30
と思ったがポインタは消えても文字列リテラルのアドレスは残るか

115 :110:02/05/08 20:31
>>112-113
ああ、勘違いした。スマソ

116 :デフォルトの名無しさん:02/05/08 20:34
char *ReturnMoji(int i)
{
char Moji[3]={"1だよ","2だよ","3だよ"};
if(i==1)
return Moji[0]
if(i==2)
return Moji[1]
if(i==3)
return Moji[2]

return NULL;
}

とすれば,文字列へのポインタがなくならないので,大丈夫ということでしょうか?

117 :デフォルトの名無しさん:02/05/08 20:35
バカにされた108への謝罪は無かったのでありました(まる)

118 :デフォルトの名無しさん:02/05/08 20:36
>>116
char *Moji[3]だろ。
普通は添え字は書かない。*Moji[]

ポインタはなくなるが、指していたものは残るので、そのアドレスを返して使っても問題ない。

119 :デフォルトの名無しさん:02/05/08 20:36
>>117
>>113>>108だからOK

120 :デフォルトの名無しさん:02/05/08 20:37
>>118
*Moji[3]にデフォルト値入れると大変なことに。

121 :デフォルトの名無しさん:02/05/08 20:37
const char* ReturnMoji(int i)
{
 char *Moji[] = {"1だよ", "2だよ", "3だよ"};
 if (sizeof(Moji) / sizeof(Moji[0] > i)
  return Moji[i - 1];
 else
  return NULL;
}

だけど、>>97でも問題はない。
>>97でおかしいのは、
Text=ReturnMoji(1);
これ

122 :デフォルトの名無しさん:02/05/08 20:38
>>119
勝手に決めるな

123 :デフォルトの名無しさん:02/05/08 20:39
>>120
なぜ?

124 :デフォルトの名無しさん:02/05/08 20:39
int Human; と宣言して,
Humanの第4ビットまでにage=10;を入れて
第5ビットから第8ビットまでtaijyuu=50;を入れて,
第9ビットから第12ビットまでseibetu=1;を入れて扱いたいのですが,
どのように実現したらいいでしょうか?

125 :デフォルトの名無しさん:02/05/08 20:39
>>116
それはダメダメ。自動変数に文字列が確保されてしまうので、
関数の終了と同時に文字列が破棄される。

126 :デフォルトの名無しさん:02/05/08 20:40
>>124
構造体だったか共用体だったか忘れたが、それでできる。
ビットなんとかってやつ。

127 :デフォルトの名無しさん:02/05/08 20:40
>>125
その前にコンパイルが通らない

128 :デフォルトの名無しさん:02/05/08 20:40
>>124
そう言う共用体の書き方があった。。。

int a:3
int a:6

みたいな。詳しくはしらん。
(H8マイコンCコンパイラの知識。)

129 :デフォルトの名無しさん:02/05/08 20:40
>>97
char Text[256]; ---> char *Text;

または

Text=ReturnMoji(1); ---> strcpy(Text, ReturnMoji(1));

のどちらかで。下の場合は #include <string.h> を忘れずに。

130 :113=98:02/05/08 20:41
>>119
いや108じゃないけどね(にが藁

>>116あのなあ。return文にセミコロンが無きゃエラーになるダロー。
本当に使ってるソースを書かずに間違いだらけのを書かれると、
どの間違いについて聞きたいか分からないから手間がかかって
しょうがないんだよ。

131 :デフォルトの名無しさん:02/05/08 20:42
>>124
できない。
どう考えても3bitじゃ50を保持できない

132 :126:02/05/08 20:43
>>131
そうだな(ワラ
考えなかった。

133 :デフォルトの名無しさん:02/05/08 20:43
>>126 >>128
共用体じゃない。ビットフィールドだ
struct {
int x : 4;
int y : 4;
int z : 4;
int w : 4;
};

134 :デフォルトの名無しさん:02/05/08 20:44
>>124, >>128
ビットフィールドですね。
ttp://black.sakura.ne.jp/~third/c38.html

135 :デフォルトの名無しさん:02/05/08 20:44
>>131
4bitだよね。それでも無理だけど。

136 :デフォルトの名無しさん:02/05/08 20:45
>>135
10進コンピュータなら出来る。
と言ってみたい。

137 :デフォルトの名無しさん:02/05/08 20:46
>>128
ビットフィールドのことだろ。ビットの並びは実装依存なので、何ビット目に
確保されるかとかは保証されないよ。

union uni {
int Human;
struct bit {
unsigned age : 4;
unsigned taijyuu : 6;
unsigned seibetu : 4;
};
};

138 :デフォルトの名無しさん:02/05/08 20:47
>>136
bit (<binary digit) n. 【コンピユータ】 ビット ((情報を数量的に表す基本単位)). 
goo 英和辞典より。

つっこもうと思ったが1bitが10のステートをとっても良いんだね。


139 :デフォルトの名無しさん:02/05/08 20:48
>>138
そう。
なんかそんなスレがあった。
実現するのかしら。

140 :デフォルトの名無しさん:02/05/08 20:49
( ´∀`)そーですね

141 :デフォルトの名無しさん:02/05/08 20:49
>>138 binaryだから2進に決まってるだろ。
だいいち10ステートあったら最小単位じゃないじゃないか。
ってスレ違い。

142 :デフォルトの名無しさん:02/05/08 20:50
>>141
ああそうか。
10進だとditか

143 :デフォルトの名無しさん:02/05/08 20:50
decimal digit = ditを提唱するぞ!俺は!!
今なら現在の電圧を10分割するくらい・・・。

144 :デフォルトの名無しさん:02/05/08 20:51
>>143
各種記憶装置との互換性がなくなりそう・・・

145 :デフォルトの名無しさん:02/05/08 20:51
138
それは無理。
アナログ情報を表すnatと言う単位では無限の状態を
取ることが可能。

146 :デフォルトの名無しさん:02/05/08 20:53
dit VS nat

Fight!

147 :デフォルトの名無しさん:02/05/08 20:53
保持できる情報量が圧倒的に違いすぎるので、natの勝利!

148 :デフォルトの名無しさん:02/05/08 20:54
>>143
別にいいけど…ってそれただの「10進ヒトケタ」やん。
わざわざ情報量の単位にする意味なし。
bitが単位になってるのはそれ以上細かい単位が無いからだよ。

149 :デフォルトの名無しさん:02/05/08 20:55
int mona=10;
int monao=20;
int a=mona;
a=monao<<4;
printf("mona=$d,monao=%d\n",mona,monao>>4);
こんな感じでできなかったっけ?

150 :デフォルトの名無しさん:02/05/08 20:55
漏れは最小単位として
unary digit = ditを提唱することにするぞ!

151 :デフォルトの名無しさん:02/05/08 20:56
ditじゃねー、uit(うぃっと)だ

152 :デフォルトの名無しさん:02/05/08 20:57
まぁ、量子コンピュータが出たらbitなんて鼻くそポイさ。

153 :デフォルトの名無しさん:02/05/08 20:58
>>152
能力がいくら増えても情報量はbitで表されると思われ

154 :デフォルトの名無しさん:02/05/08 20:58
スレ立て30時間でまだ150とは・・・

155 :デフォルトの名無しさん:02/05/08 20:58
量子コンピュータって何だよ!
そんなもん基本概念からして違うんだから
今のコンピュータとリプレースは出来ないだろ

156 :デフォルトの名無しさん:02/05/08 20:59
>>155
まぁ、お前はDNAコンピュータの原料にでもなってろってこった。

157 :デフォルトの名無しさん:02/05/08 21:00
int mona=10;
int monao=20;
int a=mona;
a=monao<<4;
printf("mona=%d,monao=%d\n",mona,monao>>4);
こんな感じでできなかったっけ?

158 :デフォルトの名無しさん:02/05/08 21:00
>>151
その話も10進コンピュータスレで外出
位どり記数法では0しか表せない

159 :デフォルトの名無しさん:02/05/08 21:00
>>157
いや、2回も書かんでも・・・。

160 :デフォルトの名無しさん:02/05/08 21:01
intが当たり前のように256bitの時代とか来るのかなぁ?

161 :79:02/05/08 21:05
>>106

すいません…BIN見たのですがどれがどのファイルかわかりません…

>>107

>>オプションを記述するだけ
>>-Ic:\include_file_path\
>>-Lc:\library_path\

具体的にどこに記述するものなのか教えて下さい。

162 :デフォルトの名無しさん:02/05/08 21:07
>>161
おぃおぃ
tlink.cfgとかってファイル名書いてあるだろ?

163 :デフォルトの名無しさん:02/05/08 21:07
>>159
ワラタ

164 :デフォルトの名無しさん:02/05/08 21:11
>>161
ガイシュツだけど説明書はないの?
なければHELPの中を隅から隅まで目を皿のようにして探すこと。

165 :デフォルトの名無しさん:02/05/08 21:15
int age=50;
int sex=1;
int human=age;
human=sex<<8;
として、ageを参照するときは,human&255とし,
sexを参照するときは,human>>8でどうでしょうか?

166 :デフォルトの名無しさん:02/05/08 21:17
>>165
ソレダ!!

167 :デフォルトの名無しさん:02/05/08 21:18
>>160
くる。
あとCPUも。

168 :デフォルトの名無しさん:02/05/08 21:19
>>165
human|=(sex<<8)だろ。つーか、
なぜビットフィールドじゃダメなのか小一時間樋冷たい。

169 :デフォルトの名無しさん:02/05/08 21:19
>>165
クリックしちゃったじぇねーか!!
ビットをずらしていたのか・・・

170 :デフォルトの名無しさん:02/05/08 21:20
>>168
おけつめたい

171 :79:02/05/08 21:20
>>162
TCW5→BIN
で、この中にtlink.cfgっていうファイルがあるんですよね?

探してもないのですが…
なんでこんな簡単なことできないのだろ…(泣



172 :デフォルトの名無しさん:02/05/08 21:20
>>169
printfで>>4を表示させても仕方ないだろう・・・w

173 :デフォルトの名無しさん:02/05/08 21:20
>>169
8 :デフォルトの名無しさん :02/05/07 16:47
>>6
生ハムと生肉くらいの違いです

174 :デフォルトの名無しさん:02/05/08 21:21
>>172
リンクがあるとついクリックするくせが(恥

175 :デフォルトの名無しさん:02/05/08 21:21
>>161
turboc.cfg
だか
tcc.cfg
だかのファイルをカレントディレクトリに作る

176 :デフォルトの名無しさん:02/05/08 21:22
166
128ビットのunsigned 型はint以外でどう表記するのですか。
unsigned lo--ng ・・・

177 :デフォルトの名無しさん:02/05/08 21:22
もしかして、borland.comに落ちてるtc201.zipですか?
helpが無いみたいだし

178 :デフォルトの名無しさん:02/05/08 21:22
>>171
いや、ないなら作ればよい。tcc.cfgもお忘れなく。もう少しだね。

179 :デフォルトの名無しさん:02/05/08 21:23
THELP.COMを常駐させればヘルプが見れるはず

180 :デフォルトの名無しさん:02/05/08 21:23
>>176
つぅかそろそろlong shortは終わらせた方が。。。

181 :デフォルトの名無しさん:02/05/08 21:26
初期化したい時に,
human|=(0<<8)
は可能ですか?

182 :デフォルトの名無しさん:02/05/08 21:28
移植性も考えればサイズ指定すべき。


183 :デフォルトの名無しさん:02/05/08 21:29
>>181
初期化したいときに限ってダメ。

184 :デフォルトの名無しさん:02/05/08 21:41
>>176
long long long int。C2003で対応予定。

185 :初心者:02/05/08 21:54
教えてください。エラーもないのに実行できません

#include<stdio.h>
int main(void)
{
int i;
char moji[100];

printf("文字列を入力");
gets(moji);

for(i=100;i<=0;i--)
{
if(moji[i]==NULL)
{
}
else
{
printf("%s",moji[i]);
}
}
}

問題
文字列を読み込んで逆から表示 例 iptep==>petpi

186 :79:02/05/08 21:54
>>175,178

だんだん理解できてきました。
tcc.cfgって名前のファイルをカレントディレクトリに作ったのですが、まだできません。

ちなみにtest1.c incre.cってファイルを繋げてコンパイルしたいのですが、
tcc.cfgの中身は、tcc-c test1.c incre.cだけでいいのでしょうか?

本当にたびたびすいません。

187 :デフォルトの名無しさん:02/05/08 21:55
>>186
いや、それは・・・


188 :デフォルトの名無しさん:02/05/08 21:56
>>185
配列って
int hoge[100]
って宣言すると
hoge[0];
から
hoge[99];
までしか使えないって知ってた?

189 :デフォルトの名無しさん:02/05/08 21:57
ファイルから日本語全角文字を配列に格納する方法を
教えてください。

190 :デフォルトの名無しさん:02/05/08 21:58
>>186
もしかしたら>>175さんの言う通り、tcc.cfgでなくてturboc.cfgかもしれないので
両方作ってみて下さい。
中身はコマンドラインでなくて、

[turboc.cfg or tcc.cfg]
-IC:\TC\INCLUDE
-LC:\TC\LIB

[tlink.cfg]
-LC:\TC\LIB

のような感じになります。そして、
tcc test1.c incre.c[enter]です。-cは付けないで下さい。
うまく行けばtest1.exeが出来るはずです。

191 :デフォルトの名無しさん:02/05/08 21:58
>for(i=100;i<=0;i--)

解説して。

192 :デフォルトの名無しさん:02/05/08 21:59
>>191
俺も、いったいそのループ(になってない)が何をしたいのかサパーリ

193 :デフォルトの名無しさん:02/05/08 21:59
>>191
つーか、一回もfor文の中身は実行されない罠。

194 :デフォルトの名無しさん:02/05/08 22:00
while( fgets( kuni[i],256,country_fp ) != NULL ){
fputs( kuni[i],country_fp);
i++;}
なにがだめなの?

195 :デフォルトの名無しさん:02/05/08 22:03
>>194
とりあえずおまえは
前橋のポインタ完全制覇でも読んでろ

あとcountry_fpってなに?

196 :デフォルトの名無しさん:02/05/08 22:04
>>195
いなかのフライドポテト。

197 :デフォルトの名無しさん:02/05/08 22:05
>>194
なんで入力ストリームと出力ストリームが同じなの?

198 :194:02/05/08 22:05
わからんぽ
わからんぽ
おしえてぽ

199 :194:02/05/08 22:06
FILE *country_fp;

200 :デフォルトの名無しさん:02/05/08 22:09
>>199
どうやってオープンした?

201 :デフォルトの名無しさん:02/05/08 22:10
>>194
こういう事する時は、"r+"で開いておいて、fseekなどで切り替えないと
動作の保証はない。

202 :初心者:02/05/08 22:11
for(i=100;0<=i;i--)

の間違えでした。


203 : :02/05/08 22:11
文字列の行末にある空白を削除するにはどうすればいいでしょうか

204 :79:02/05/08 22:11
>>190

[turboc.cfg or tcc.cfg]
-IC:\TC\INCLUDE
-LC:\TC\LIB
ファイルの中身に記入。

[tlink.cfg]
-LC:\TC\LIB
ファイルの中身に記入。

tcc test1.c incre.c←これはどこのファイルに書けばよいのでしょうか?

205 :デフォルトの名無しさん:02/05/08 22:11
>>202
まだ間違ってます。

206 :194:02/05/08 22:12
ファイルから日本語全角文字を配列に格納する方法を
教えてください。



207 :446:02/05/08 22:12
>>194
country_fpをfopen()したやり方にも夜が、
wとかwbとしたなら、オープンした時にファイルの長さが0になる。
aとかabとかa+bとかしたなら、ファイルの最後に追加することしかできない。

ちゃんとr+とかr+bでオープンしたとしても、
入力した直後に出力してはいけない。間にfflush()かfseek()をはさめ。


208 :初心者:02/05/08 22:12
このfor文がおかしいのでしょうか?

209 :デフォルトの名無しさん:02/05/08 22:13
>>204
tcc test1.c incre.cは、どこにも書かずにそのままコマンドラインから
打ち込むか、またはバッチファイルに書いて実行する。

210 :デフォルトの名無しさん:02/05/08 22:15
203
sscanf()

211 :デフォルトの名無しさん:02/05/08 22:16
>>204
もしくはmakefileというファイルをエディタで作成し、

test1.exe: test1.obj incre.obj

と書いて、make[enter]とやってもよい。だけど今はやめとけ。

212 :デフォルトの名無しさん:02/05/08 22:17
>>208
俺の経験から言わせてもらうと、初心者に分類される人たちは、
プログラムを1行ずつ読むことが出来ていない気がする。
自分で書いたプログラムすら、その挙動が把握できてないというか。

213 :デフォルトの名無しさん:02/05/08 22:19
>>212
つぅか丸写し以外でその質問している時点で努力も学力も才能も足りてない気がする。

214 :79:02/05/08 22:25
>>209

-IC:\TC\INCLUDE
-LC:\TC\LIBと書かれた[turboc.cfg or tcc.cfg] のファイルと、

-LC:\TC\LIB と書かれた[tlink.cfg] のファイルは、

test1.c incre.cの置かれたフォルダに入れればいいんですよね?

コマンドラインから打ち込んでもできなかったので、
バッチファイルに書く方法も教えてください。

よろしくおねがいします。

215 :デフォルトの名無しさん:02/05/08 22:27
>>214
tcのbinフォルダに入れろ。


216 :デフォルトの名無しさん:02/05/08 22:28
>>214
ちょっと待って。今Turbo-Cはどのディレクトリに入ってるの?
そのディレクトリ名をturboc.cfgやtlink.cfgに書くんだよ。
コマンドラインから打ち込んでもだめだったら、バッチファイルに
書いたってだめだよ。

217 :デフォルトの名無しさん:02/05/08 22:28
>-IC:\TC\INCLUDE
>-LC:\TC\LIBと書かれた[turboc.cfg or tcc.cfg] のファイルと、
>-LC:\TC\LIB と書かれた[tlink.cfg] のファイルは、

-IC:\TC5W\include

とかじゃないのか?
自分の環境に合わせろ

218 :デフォルトの名無しさん:02/05/08 22:29
打ち込んでも出来ない=コマンドまたはファイル名が違います?
それだったらパスを通せ

219 :79:02/05/08 22:35
>>215
test1.c incre.cの置かれたフォルダにはいれなくていいのですか?

>>216
Turbo-Cは、
C:\TCW5\BIN\tcw.exeです。


220 :デフォルトの名無しさん:02/05/08 22:36
>>219
コンパイラの設定ファイルだから、
ソースがあるところに入れる意味がない

221 :初心者:02/05/08 22:38
C言語でデータ配列の中から最大値を求める方法には
サーチングしかないのでしょうか?
サーチングだと処理に時間がかかっていやなのですが。
何か方法があれば教えてください。

222 :デフォルトの名無しさん:02/05/08 22:39
>>221
ソートでも良いけど?

223 :デフォルトの名無しさん:02/05/08 22:39
[turboc.cfg or tcc.cfg]
-IC:\TCW5\INCLUDE
-LC:\TCW5\LIB

[tlink.cfg]
-LC:\TCW5\LIB

これらをC:\TCW5\BINに置いてやってみ。

224 :初心者:02/05/08 22:43
221です。
サーチングでもソーティングでも処理には
時間がかかるので、一括して処理できるような
ものがあればと思ったのですが。


225 :デフォルトの名無しさん:02/05/08 22:44
>>221
じゃあ、ただ配列に入れるんじゃなくて、もっと工夫しろ。
データ構造の本を読んで「半順序木」の勉強を汁

226 :デフォルトの名無しさん:02/05/08 22:45
>>224
人間に出来ないものはプログラムでも出来ないと思われ(速度以外

227 :デフォルトの名無しさん:02/05/08 22:45
>>224
2分探索ならxlogx
バカサーチならx

228 :初心者:02/05/08 22:48
185ですけど、いちおう成功したけど
この書き方って下手ですか?

#include<stdio.h>
int main(void)
{
int i;
char moji[100];

for(i=0;i<100;i++)
{
moji[i]=0;
}

printf("文字列を入力");
gets(moji);

for(i=99;0<=i;i--)
{
if(moji[i]==NULL)
{
}
else
{
printf("%c",moji[i]);
}
}
}

229 :79:02/05/08 22:50
>>220
わかりました!

>>223
やってみたのですけど、まだできません…。
コマンドはスクリプト→コマンドで入力ですよね?

単純にソースが間違ってるんですかね。。。
でも試食版コンパイラではできたのですが…。

230 :デフォルトの名無しさん:02/05/08 22:51
>>228
if(moji[i]==NULL)
{
}
else
{
printf("%c",moji[i]);
}

まず、Cの薄い本でも読んでくれ。アイデアはおもしろい。

231 :デフォルトの名無しさん:02/05/08 22:53
じゃぁ、
tcc test1.c incre.c

と入力して、その出力を一切改変せずに、
省略も一切しない状態ですべてここに貼り付けてみろ

232 :デフォルトの名無しさん:02/05/08 22:53
>>228
40点

233 :デフォルトの名無しさん:02/05/08 22:54
>>229
IDEからわざわざコマンドで実行させているんですか?まあいいけど。
一度、test1.cとincre1.cを別々にコンパイルして、エラーが出ないか
どうか確かめた方がいいですね。
多分incre.cにはmain()が無いというリンカエラーが出ると思うけど、
それは無視して下さい。

234 :デフォルトの名無しさん:02/05/08 22:55
>>228
配列を逆さに読む意味は?
そもそも何がしたいんだ?

235 :デフォルトの名無しさん:02/05/08 22:57
>>229
俺の所には古いBorland-C++5.02Jがあるけど、これから複数のプログラムを
コンパイルするには、ファイル→新規作成→プロジェクトでやると簡単だよ。
Turbo-C++も多分同じでしょう。

236 :デフォルトの名無しさん:02/05/08 22:58
>>185にて
文字列を読み込んで逆から表示 例 iptep==>petpi
とかいてあるぞ。>>234

まぁ本来はもちっと難しい方法で解決するんだろうけど、
!=をつかってスリムにしない程の初心者なので良いんではないだろうか。

237 :デフォルトの名無しさん:02/05/08 22:59
>>236
あれだと妙な空白が初めに出ない?

238 :デフォルトの名無しさん:02/05/08 23:00
>>237
if(moji[i]==NULL)
{
}
だから出ないんじゃない?

239 :デフォルトの名無しさん:02/05/08 23:00
>>185

宿題スレからコピペ

#include <stdio.h>

rev_put(ch)
{
 if (ch != '\n') {
  rev_put(getchar());
  putchar(ch);
 }
}

main()
{
 rev_put(getchar());
}


240 :初心者:02/05/08 23:01
40点ですか。100点の解答は
どんな風にやるんですか?<232
ヒントをオクレ

241 :デフォルトの名無しさん:02/05/08 23:02
for(i=99;0<=i;i--)
{
if(moji[i]==NULL)
{
}
else
{
printf("%c",moji[i]);
}
}

ここを

for(i=99;0<=i;i--)
{
if(moji[i]!=NULL){
printf("%c",moji[i]);
}
}

とするのはどうかな。

242 :デフォルトの名無しさん:02/05/08 23:02
>>240
>>239じゃだめなんか?

243 :デフォルトの名無しさん:02/05/08 23:04
>>242
無駄に再帰使ってるね。。。

244 :79:02/05/08 23:05
>>231
やっとのことで成功しました!
…ここまできたので、ついでといっては何ですが、
[turboc.cfg or tcc.cfg]
-IC:\TCW5\INCLUDE
-LC:\TCW5\LIB

[tlink.cfg]
-LC:\TCW5\LIB

IC,LCなどの意味も教えてくれないでしょうか?

この分からず屋にも親切に教えてくださったみなさん、
ありがとうございました!
これで、ますますCの勉強がやりやすくなります!

245 :デフォルトの名無しさん:02/05/08 23:06
>>244
おめっと。
でも分からず屋ってこういうときに使う言葉か?(汗

246 :デフォルトの名無しさん:02/05/08 23:07
>>231
ICじゃなくて
-Iがインクルードパス
-Lがライブラリのパス
C:\TC5W〜がディレクトリ
-Iと-Lでディレクトリを指定している。

しかし、水を差すようで悪いが、
bcc32を使った方がいいと思う


247 :デフォルトの名無しさん:02/05/08 23:07
>>243
入力される文字列の長さが100文字限定というのはアレだからな

248 :デフォルトの名無しさん:02/05/08 23:11
TurboC++ for Windows 5 って、Windows専用コンパイラじゃなかったっけ?
コマンドラインツールって含まれてるの?
コンソールアプリもEasyWindow(s?)でウインドウアプリにしちゃった気が・・。

エラーってさ、、、
 「コマンドまたはファイル名が違います」
じゃないよね?

249 :79:02/05/08 23:12
>>245
あっ、使い方間違ってますね(汗

>>246
ありがとうございます!
また質問で悪いのですが、bcc32とは何でしょうか?

250 :デフォルトの名無しさん:02/05/08 23:13

#include <stdio.h>

int main(void)
{
char ch = getchar();
if ( ch!='\n' ) main();
putchar( ch );
}

251 :デフォルトの名無しさん:02/05/08 23:13
>>250
returnがありませんw。

252 :デフォルトの名無しさん:02/05/08 23:14
ワラタ

253 :デフォルトの名無しさん:02/05/08 23:14
はっきり言ってなんかのコンパイラの設定聞いてる奴がうざい。

254 :デフォルトの名無しさん:02/05/08 23:15
>>249
http://www.borland.co.jp/cppbuilder/freecompiler/

255 :デフォルトの名無しさん:02/05/08 23:17
>>253
湧くな。

256 :デフォルトの名無しさん:02/05/08 23:17
>>251
returnいるのか?
他のやつも省略してるし、コンパイラは警告もエラーもはかないし。
まぁ、戻り値無視してるからなんでも適当に付け足せば。

257 :デフォルトの名無しさん:02/05/08 23:18
>>249
1のリンクくらいは見ようよ

258 :デフォルトの名無しさん:02/05/08 23:18
>>256
main()
ならreturn省略してもいいが(よくないけど)
intと書いたのならきっちり値を変えそうよ

259 :79:02/05/08 23:19
>>253
すいませんでした。これからは自粛します…。

>>254
早速DLしてます!これからどっちが使いやすいか試します!

260 :デフォルトの名無しさん:02/05/08 23:19
>>256
関数の型がintだからいるだろ。

261 :デフォルトの名無しさん:02/05/08 23:22
>>258,260
省略時もintだろ?

262 :デフォルトの名無しさん:02/05/08 23:23
>>258
int main()のreturnを省略していいのはC++だよ。

263 :デフォルトの名無しさん:02/05/08 23:23
>>79がまず覚えるべきなのはgoogleの使い方だとオモフ。

264 :デフォルトの名無しさん:02/05/08 23:24
>>259
多分今日味わった苦労が、BCC32のセットアップの時に役立つはず。

265 :デフォルトの名無しさん:02/05/08 23:25
>>262
ん〜〜VC++でCとしてコンパイルしてるが、
まぁVC++の警告の出し漏れか。

266 :デフォルトの名無しさん:02/05/08 23:26
>>259
おめでとさんついでに、もう一つ書いておいてあげます。
BCC32にはこれをペアで使うと楽だよ。
http://hp.vector.co.jp/authors/VA017148/pages/cpad.html

267 :デフォルトの名無しさん:02/05/08 23:26
>>261
だから、よくないけどって書いてあるだろ。
心情的にはわかるってことだ

268 :初心者:02/05/08 23:28
185ですけど
241さんのやだと見た人がわかりずらいので
やめました。はじめはそうしてたのですが・・

250
これは僕の実力をはるかに超えた解答でした。
1つの問題で多くの解答が出ることにプログラミング
に楽しさがあるのではと実感しています

269 :デフォルトの名無しさん:02/05/08 23:29
>265
VC++でCとしてコンパイルしたら、returnがなくても警告でないんだ。

270 :デフォルトの名無しさん:02/05/08 23:32
>>269
どうやらmain関数だけはそうらしい。

271 :デフォルトの名無しさん:02/05/08 23:41
>>270
C++みたいですね。でもC++としてコンパイルすると、return 0;がないと
警告出ません?

272 :デフォルトの名無しさん:02/05/08 23:42
241のも、NULLと'\0'を混同している点で、減点は必至。

273 :デフォルトの名無しさん:02/05/08 23:49
>>272
どっちも0じゃん!
と、いつぞやの紛争をぶり返す俺。

274 :デフォルトの名無しさん:02/05/08 23:52
>>271
C++でもmainだけは警告でなかった。
他の関数ではエラーになる。(VC.NET)

275 :デフォルトの名無しさん:02/05/09 00:04
>>274
cppなら出るぞ(VC6SP4)。

276 :デフォルトの名無しさん:02/05/09 00:09
なんだ、その、つまり、荒れてるのか?

277 :デフォルトの名無しさん:02/05/09 00:18
>>274
C++で出ないのは標準だからね。Cででないのは仕方ないかな。規格書の
中にreturn省略時のmainが何を返すかまでは書いてないから。

278 :デフォルトの名無しさん:02/05/09 00:27
main関数までプロトタイプ宣言している奴はいる?

279 :デフォルトの名無しさん:02/05/09 00:29
いない

280 :デフォルトの名無しさん:02/05/09 00:35
>>278
C始めて1ヶ月くらいまでしてた(w

281 :デフォルトの名無しさん:02/05/09 00:48
>>273
NULLは ((void*)0) と定義されてあることもあるという
どうしようもないツッコミを入れてみる。

282 :デフォルトの名無しさん:02/05/09 00:49
>>281
C++じゃNULLは0だよ

>>xxx
ここはCスレだ


283 : :02/05/09 01:17
たとえ動作上何の問題がないとしても
NULLマクロをヌルポインタ以外の意味で使うのは恥かしい


284 :デフォルトの名無しさん:02/05/09 01:47
>>282
ここがC言語スレだと分かってるなら


C++の話を無意味に持ち出す?

285 :デフォルトの名無しさん:02/05/09 01:56
発展前に釘を刺しただけだと思われ

286 :デフォルトの名無しさん:02/05/09 02:17
>>278
前橋和弥

287 :sa:02/05/09 09:40
初心者です。
テキストファイルをオープンして、そのテキストファイルに何行のデータがあるか
知りたいんですが、どうすればいいんでしょう?


288 :デフォルトの名無しさん:02/05/09 09:46
wc -l

289 :デフォルトの名無しさん:02/05/09 09:47
改行の数を数える。

290 :デフォルトの名無しさん:02/05/09 09:56
>>287
fgetsでループしる。

291 :91:02/05/09 11:47
>>92
>CRTのソースのfopen関係のあたりでENOMEM検索してみれば
CRTってなんですか?


292 :デフォルトの名無しさん:02/05/09 11:59
初心者なんだけどぶっちゃけ

#include< iostream.h>
のcout<<
タイプか

stdio.h
printf"
のタイプあどっちがいいの?
どっちが初心者むきで、どっちが一般的?

293 :デフォルトの名無しさん:02/05/09 12:12
ぶっちゃけ、ここはCスレ
マジレスするとケースバイケース

294 :デフォルトの名無しさん:02/05/09 12:14
>>292
ぶっちゃけた話、両方をやっておくべき。

295 :デフォルトの名無しさん:02/05/09 12:16
>>291

 ディスプレイとかモニタとか画面とかとも言うね。
 人によっては、TVとか言う人も(笑)。


296 :デフォルトの名無しさん:02/05/09 12:19
>>292
 Cでは、前者は一切使わない。
 無理して頑張って努力すれば出来ない事ない鴨しれないけど、ワシは知らん。


297 :sage:02/05/09 12:20
>>295
ってことは、ディスプレイが原因なのか?

298 :デフォルトの名無しさん:02/05/09 13:17
>>292
前者はほとんど使ったこと無い。
C++のオーバーロードの(悪い)例程度に見てる。

299 :299:02/05/09 14:45
int c;
scanf("%d",&c);
これで間違って文字を入力された場合の対処法はどうすればよいのでしょうか?

自分でも考えたんですが
chara a;
int c;
scanf("c",&a);
c = atoi(a);
という方法もやってみたんですが
数字と文字を入力された場合(12yとか)は、駄目なんですよね。

300 :デフォルトの名無しさん:02/05/09 14:52
>>299 scanf()で%sを使ってatoi()

scanf()で%dとか使うのは入力されるデータにまず間違いがない
(ファイルからの入力とか……おっとこれはfscanf()か)とき
だけにしておいたほうが良い

>>291 C RunTimeルーチンのこと? crt0.sとかをGoogleで検索.

301 :デフォルトの名無しさん:02/05/09 14:54
scanf を使わない。


302 :デフォルトの名無しさん:02/05/09 14:56
誤った入力に対処できないから scanf() は使うな、なんて言われて
何も考えずに使わないようにしていました。 fgets() と sscanf()
を組み合わせて使う方法は今でも常道なんでしょうか。少し脱線すまそ。


303 :デフォルトの名無しさん:02/05/09 15:27
>>300
atoi()はatoi("a")とatoi("0")も0を返すので
0が入力されたのか文字を入力されたのかの区別が付かない


  


304 :デフォルトの名無しさん:02/05/09 15:32
>>303
fgetsとstrtodでどうでしょう?

305 :デフォルトの名無しさん:02/05/09 15:42
>>304
駄目、一見よさそうに見えるが指数形式も扱えてしまう為、
strtod("1e", &p);が正常終了する。

isdigitで1文字づつチェックするのが一番安全


306 :デフォルトの名無しさん:02/05/09 15:45
>>305
fgetsとstrtolでどうでしょう?

307 :カス野郎:02/05/09 16:17
>>292
だけど、秋に基本情報技術者の試験控えてるんですけど
どちらにしろ、たしか基本情報ではcout<<タイプはないよね。
printfの方だよね。

さらにVC++やってても変数とか出すときにsprintf使うけど
coutなんてまったく使わないし、printfタイプの方がいいという
ことでいい?みんなこっちつかってるよね。

308 :デフォルトの名無しさん:02/05/09 16:34
>>307
「cout<<」を使えるのはC++だからね…

309 :デフォルトの名無しさん:02/05/09 16:40
>>307
stringstreamは便利だyo!

310 :デフォルトの名無しさん:02/05/09 16:41

cout<<の存在意義って何?


311 :デフォルトの名無しさん:02/05/09 16:48
==で文字列が同じかどうか判断できたり、+で文字列を連結できるC++はまじですごい・・・・・
というか文字列型自体すごいのだが。

312 :デフォルトの名無しさん:02/05/09 16:55
>>310
coutっちゅーか、streamに対する<<の意義は:
型に対する処理の選択が実行時ではなくコンパイル時に行われる。
operator <<(stream&, 〜)を実装しさえすれば後からどんなデータでも統一的に追加対応できる。
%dなどの書式文字についていちいち覚えなくても、<<で出るとだけ覚えれば使える。

しかし、こと書式の詳細指定に関しては冗長かつ結局実行時ステートなのがアレだ。

313 :デフォルトの名無しさん:02/05/09 16:57
>>312
C++全然知らないんだけど、cout <<の<<はビットシフトの<<じゃないよね?

314 :デフォルトの名無しさん:02/05/09 17:07
>>313
<<演算子はiostream等のクラスでオーバーロードされて、まるで出力用に
作られたかのように動きます。よくできすぎとるわ。

315 :デフォルトの名無しさん:02/05/09 17:09
>>314
臨機応変に変えるんだ!?
すごいね。
でもコンパイラを作るのが大変そう・・・

316 :デフォルトの名無しさん:02/05/09 17:09
>>311
それは言語の機能として型に対する演算子の処理を自分で作れるように
なっていて、ライブラリがそれを利用して作られているからということ。
文字列型というものはC++の言語そのものにあるんじゃなくてライブラリの
中にある。


317 :デフォルトの名無しさん:02/05/09 17:13
>>316
そそ。なるべく本体は小さく保とうという精神がC++になっても受け継がれている。
しかし、内部が小さくてもC++では外部がばかでかくなり、今まで一番言語仕様
が大きいと言われていたAdaをもしのいでしまった。

318 :デフォルトの名無しさん:02/05/09 17:15
>>315
その結果として、現在(多分)標準C++準拠と銘打っていても実際はbuggyな
処理系だらけです。

319 :デフォルトの名無しさん:02/05/09 17:31
>なるべく本体は小さく保とうという精神がC++になっても受け継がれている。

うそつけ
あのクソ汚い文法のどこを見てそんなことがいえるんだ

320 :デフォルトの名無しさん:02/05/09 17:38
>>319
出たな!「C++の文法は汚い」厨!

321 :デフォルトの名無しさん:02/05/09 17:51
「汚い」は「小さい」の反意語なのか?

322 :C++房:02/05/09 18:11
C++の文法は世界一キレイです。

323 :デフォルトの名無しさん:02/05/09 18:24
諸君、ここはCスレだということを忘れていないかい?

324 :デフォルトの名無しさん:02/05/09 18:53
>>323
CとC++が渾然一体となったスレもこうなると欲しいな。両者を切り離して
考えないスレを。

325 :デフォルトの名無しさん:02/05/09 18:55
それはC++スレじゃダメなのかい?

326 :デフォルトの名無しさん:02/05/09 18:56
>>325
C++スレでCの話するとスレ違いだと叩かれる。

327 :デフォルトの名無しさん:02/05/09 20:31
ad-hoc polymorphismのどこがきれいなんだ?
ただad hocなだけなのに。


328 :デフォルトの名無しさん:02/05/09 20:33
>>324
必要性を感じた人間が自ら実行するべき。

Cしかやらない私にはC++の話は邪魔なだけです。

329 :デフォルトの名無しさん:02/05/09 20:41
>>328
了解。しばらく様子を見ます。

330 :デフォルトの名無しさん:02/05/09 21:04
>>324
必要性を感じた人間が自ら実行するべき。

Cしかできない私にはC++の話は理解できなくていらいらするだけです。

331 :デフォルトの名無しさん:02/05/09 21:56
今マウスの座標の取り方を GetCursorPos(&MousePos);
としているのですが,これではウィンドウ上の座標ではなく,
ディスプレイの画面上の座標を取るらしく困っています。
ウィンドウ上の座標をどうやったらえることができるのでしょうか?

332 :デフォルトの名無しさん:02/05/09 21:57
>>331
ScreenToClient

333 :デフォルトの名無しさん:02/05/09 21:57
ScreenToClient

334 :デフォルトの名無しさん:02/05/09 21:58
>>332-333
それはクライアント座標しかとれないんですけど?

335 :デフォルトの名無しさん:02/05/09 22:00
GetWindowRectして適当に変換すれば?

336 :デフォルトの名無しさん:02/05/09 22:21
>>335
グッジョブ
できました
ありがとうございました
api集とかこれから買いに行ってきます

337 :デフォルトの名無しさん:02/05/09 23:04
ESCコードを使ってコマンドプロンプト上に
色つきの文字を出力したいんです。ただし
OSはWindowsXP,コンパイラはLSI-C86(試食)。
(Win98の方は確認済)
実際にやってみると

printf("\x1b[34m hoge"); /* blue */
printf("\x1b[2J"); /* clear */   

ESCの部分が改行記号(半角)になって
しまいますが、やはり不可でしょうか?
(どれかのWin Ver. 以降, DOSが変わったと
 聞いたことがあるんですが。)
よろしくお願いします。



338 :デフォルトの名無しさん:02/05/09 23:06
>>337
氏ねクソマルチ。

339 :337:02/05/09 23:10
>>338
すみません。スレ16は間違いです。
(スレの進みに気づかなかったので。)


340 :デフォルトの名無しさん:02/05/09 23:25
#include <conio>
textcolor(YELLOW);
cprintf("(・∀・)マンコー");

341 :デフォルトの名無しさん:02/05/09 23:51
>>339
向こうで答えで照るのに。

342 :初心者:02/05/10 01:45
プログラミング初心者です。
三日前に突然思い立ってC言語を始めました。
Micro$oftのVS.netを買ってCから勉強中です。

文字列を入力させて一文字ずつずらすプログラムを作りました。
8文字以内で入力させるようにしたのですが、ビルドしてもエラーも警告も出ないのに、
もの凄く長い文字を入力するとデバッグエラーが発生します。
Run-Time check Failure #2 - Stack around the variable 'string" was corrupted.

どうすればいいのでしょう?

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

main()
{
unsigned char i;
char string[8];

for (;;) {
puts("1〜8文字入力してください。");
scanf("%s", string);
if (strlen(string) <= 8) {
break;
}
}

for (i = 0; i < strlen(string); i++) {
string[i] = string[i] + 1;
}
printf("%s\n", string);
}

343 :デフォルトの名無しさん:02/05/10 01:47
> scanf("%s", string);

stringが7文字分しか確保していないのに、
scanfは入力された文字(1000文字なら1000文字)全部詰め込もうとする。

344 :初心者:02/05/10 01:55
>>343
即レスありがとうです。

>stringが7文字分しか確保していないのに、
>scanfは入力された文字(1000文字なら1000文字)全部詰め込もうとする。

ということはscanfがいけないということですね?
代わりに使うには何があるのでしょう?
教えてくれたらうれしいです。

345 :デフォルトの名無しさん:02/05/10 02:01
そうじゃなくて
取りあえず
char string[8];

char string[1000];
とか

346 :デフォルトの名無しさん:02/05/10 02:02
getchar();
を改行が来るまで最大7回ループ。

347 :346:02/05/10 02:04
345に同意だ。346は忘れたほうがいい。

348 :初心者:02/05/10 02:05
>>345
それですと無駄に領域を確保してしまう気がするのですが。
それはそれでありなんでしょうか?
できるだけコンパクトにまとめたいです。

349 :デフォルトの名無しさん:02/05/10 02:12
char str[9];
int i,c;
for(i = 0;i < 8 && (c=getchar()) != '\n';i++)
str[i] = c;
str[i] = '\0';
とか

350 :初心者:02/05/10 02:12
例えば2chでスレ立てする時にタイトル長くすると怒られますよね。
あんな風にしたいのです。

351 :349:02/05/10 02:14
スマソ、よくソースミテナカッタ・・・

352 :デフォルトの名無しさん:02/05/10 02:16
>>350
ifのあとにelseで警告出せばいいのではないだろうか・・・?

353 :デフォルトの名無しさん:02/05/10 02:18
>>348
プログラム始めて三日ならそれでいいと思う。
一週間たてば動的に確保する方法も理解できるはず。

354 :初心者:02/05/10 02:19
さらに今気付いてしまったのですが、8文字以内は大丈夫だと思ってたら、
8文字目でもエラー発生がしますね…(T-T)
やはり配列を長くしておくのが一番なんでしょうか…
でも1万字コピペして貼り付ける輩がいないとも限らないし。


355 :初心者:02/05/10 02:24
>>352
その方法なら一応わかるんです。
あ、でも2chのスレタイに一万字貼り付けた事がないからどうなるかは分かりませんが。

>>353
それはどんな方法なのですか?
といっても今の私には理解できなさそうな気がしますが。

356 :デフォルトの名無しさん:02/05/10 02:26
>>354
なんで8文字だとダメなのか、よーく調べてみよう。


357 :デフォルトの名無しさん:02/05/10 02:28
>>354
細かいところにこだわりたいなら、自力で349を改造するのがいいと思う。
それが無理なら、今はそんなことにはこだわらないほうがいいと思う。

358 :初心者:02/05/10 02:34
>>356
はい、調べてみる事にします。

>>357
>349に未知のモノがあってまだ改造どころではなさそうです。

これからも独学で逝くつもりなので頑張ってみます。
お騒がせしますた。
また来るかも知れませんが。

359 :デフォルトの名無しさん:02/05/10 02:46
Cの勉強系スレに常駐するといいかも。
最近寂れてるし。

独学もいいけど、コンピュータの基礎(プログラミング意外のね)の本も
併読するといいよ。


360 :デフォルトの名無しさん:02/05/10 03:23
>>358
fgets後sscanf

361 :デフォルトの名無しさん:02/05/10 08:58
3日目でバッファオーバーフローの問題に気付くなんてなかなか才能あるカモね。

362 :デフォルトの名無しさん:02/05/10 10:11
こんなんでどう?
8文字以内に改行が入ると出力されてしまうようになるので
削ってふ。

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

int main()
{
unsigned char i;
char string[8 + 1];

puts("1〜8文字入力してください。");
fgets(string, sizeof(string), stdin);

for (i = 0; i < strlen(string); i++) {
if (string[i] == '\n')
string[i] = '\0';
string[i] = string[i] + 1;
}

printf("%s\n", string);

return 0;
}


363 :デフォルトの名無しさん:02/05/10 11:37
/*
表示だけ。表示だけじゃいやーんなら、>>353の言っている
メモリの動的確保について勉強して。変数名はstringよか
bufか何かのほうが意味的に適切かも。
*/
while (fgets(string, sizeof(string), stdin)!=NULL) {
for (i=0;i<sizeof(string)&&string[i]!='\n';i++) {/*条件式の順に注意*/
if (string[i]=='\0') {/*念のため*/
string[i]='\n';
break;
}
else
string[i]=string[i]+1;
}
fputs(string, stdout);
}
メモリの動的な確保のかわりにファイルをバッファ的に使う
キタナイ方法もあるにはあるけど。。

364 :デフォルトの名無しさん:02/05/10 13:31
fgets で 8 文字読みこむと必要なのは 10 文字分という罠。

365 :デフォルトの名無しさん:02/05/10 13:37
>>364
'\0'の他に'\n'の分が必要なわけですね。

366 :デフォルトの名無しさん:02/05/10 15:01
終わるときは EOF を打ち込む。

#include <stdio.h>

#define LINEMAX 1024

int main(void){

    char line[LINEMAX];
    int len;
    int i;


    while(0 < printf("1 - 8 文字入力してください : ") && fgets(line, sizeof(line), stdin) != NULL){

        if(9 < (len = strlen(line))){
            printf("文字が多すぎます。\n");
            continue;
        }

        for(i = 0; i < len; ++i)
            line[i] = line[i + 1];

        fputs(line, stdout);
    }

    return 0;
}

367 :デフォルトの名無しさん:02/05/10 15:09
ループ継続条件の不等号の向きを全部逆にしてほすぃ

368 :デフォルトの名無しさん:02/05/10 15:20
> for(i = 0; i < len; ++i)
ここは逆にしないほうがいぃ

369 :366:02/05/10 15:31
いつも不等号の向き固定(大小関係固定)でやってるから。
一般的でないのはわかってるけど、対象固定だと気持ち悪くて。

370 :370:02/05/10 15:49
>>354
この問題!!!
配列の領域以上に文字をぶち込まれた場合の処理どうやるんですか?
C言語初めて1ヶ月だけど、未だに出来ない・・・.

371 :デフォルトの名無しさん:02/05/10 15:51
>>370
fgets()で一度に読み込める文字数を制限してしまえばよい。

372 :デフォルトの名無しさん:02/05/10 15:52
>>370
スレ読めばわかると思うけど、ぶち込まれた場合のことを考えるんじゃなくて、ぶち込まれないようにがんばるんだよ。

373 :370:02/05/10 15:57
>>371
fgets()はファイル読み込みじゃないの?
stdinからもOK?

>>372
頑張ってるんだけどさ・・・.
上司が「じゃあこれは?」とか言ってぶち込みやがるんだよ〜

374 :デフォルトの名無しさん:02/05/10 16:03
fgetc( fd ) で地道にやろう。
>上司が・・・〜
当然だ。

375 :デフォルトの名無しさん:02/05/10 16:05
>>373
「入力される」のと「配列に入れられる」のはぜんぜん違うよ。
入力されたときのことを考えて、
配列からはみ出ないようににがんばるんだよ。

376 :デフォルトの名無しさん:02/05/10 16:07
>>373
もちろんstdinでもOKだよ。openされてるFILE*型なら大丈夫。

377 :デフォルトの名無しさん:02/05/10 16:08
char string[10000];
とかにしちゃえば?
さすがに1万文字も入れられることはないし、
スタックの無駄遣いではあるけど。10KB程度全体から見たら微々たる物じゃないかと。

378 :370:02/05/10 16:13
>>375
つまりこういうこと?
char str[100];
char a[8];
int i;

scanf("%s",str);

for(i=0;i<9;i++)
{
a = str[i];
}

・・自信ないなあ

379 :デフォルトの名無しさん:02/05/10 16:15
>>378
for(i = 0; i < 7; i++) a[i] = str[i];
str[i] = '\0';

380 :デフォルトの名無しさん:02/05/10 16:16
じゃなかったゴメソ
for(i = 0; i < 7; i++) a[i] = str[i];
a[i] = '\0';

381 :デフォルトの名無しさん:02/05/10 16:18
三年後,>>377の作ったプログラムに10001文字入れられて現場は
バグ取りに追われるのでした・・・(>>377は既に転職)

382 :デフォルトの名無しさん:02/05/10 16:23
こんなんどう?
#define MAX 15

int main(){

char str[MAX];
int len;

fgets(str,MAX,stdin);

len = strlen(str);

str[len-1]='\0'

return 0;

}

これなら改行もカンマも大丈夫かな?


383 :デフォルトの名無しさん:02/05/10 16:28
コマンド入力画面で対話式に引数を入力していくプログラムってありますよね?
その操作を繰り返すのが面倒なのでテキストファイルに引数の一覧書き込んで
そこから読み込むという形で自動化したいんですけど出来るでしょうか?

384 :デフォルトの名無しさん:02/05/10 16:30
>>383
stdinからの入力なら、単にテキストファイルをリダイレクトするだけの
話では。

385 :383:02/05/10 16:35
>>384
私の使っているOSはリダイレクトをサポートしていません。

386 :デフォルトの名無しさん:02/05/10 16:38
>>385
> 私の使っているOSはリダイレクトをサポートしていません。
えっ?リダイレクトってOSがサポートするものなの?
シェルがサポートするもんだと思ってた。


387 :385:02/05/10 16:41
>>386
いわれると思った・・・(笑)
やっぱりシェルが提供しているのか。

ちなみに385!=383です。

388 :デフォルトの名無しさん:02/05/10 16:43
>>384
えーと、そのプログラムを実行した後に
何度か対話式に引数の入力が求められるんですけど、
それら全ての引数をファイルから入力したいんです。
例えばdos窓とかでだと、
実行後に
実行しますか?
y/n:y
本当に実行しますか?
y/n:
こんな感じの入力画面になりますよね?
これはリダイレクトするだけで、出来るものなのですか?
勉強不足なら本当に済みません。

389 :デフォルトの名無しさん:02/05/10 16:46
>>388
いちいち「本当に実行しますか?」と聞いてこないようにプログラムすればよい。

390 :383:02/05/10 16:46
385さんは多分勉強不足の僕をからかっているんでしょう。。。
ほんとにすいません、もうちょっと調べてきます。

391 :385:02/05/10 16:47
>>390
違うぞ。勉強不足は>>385の方だぞ(ワラ

392 :383:02/05/10 16:47
>>389
いえ、実際は数値とかの入力なんですけど。。。

393 :デフォルトの名無しさん:02/05/10 16:48
>>392
コマンドライン引数を使って計算するプログラムじゃないの?

394 :393:02/05/10 16:49
対話的って書いてあるじゃない(汗

395 :デフォルトの名無しさん:02/05/10 16:55
>>383
これが「プログラマは楽をするためならどんな努力でもする。」って奴ですか?

396 : ◆GpSwX8mo :02/05/10 16:58
#include "glibw32.h"
#include<stdio.h>
#include<math.h>
#define haikei BLACK
#define L 1000 //x方向の総分割数
const int TOTALTIME=1500; //総時間ステップ数
const double MAXamplitude=1; //波の最大振幅
main(void)
{
int M=TOTALTIME;
double u[L+2],preu[L+2],nextu[L+2],
dt=0.01, dx=0.01, v=1.0, max=MAXamplitude;
ginit(600,200,haikei);
GRAPH gra; gra.view(0,0,600,200);
gra.window(-dx*L/2,-max,dx*L/2,max);
///////初期条件の設定////////////////////////////
//
for(int l=0;l<=L+1;l++)
{
u[l]=exp(-pow((l-L/2)*dx,2));
preu[l]=u[l-v*dt/dx];
}
/////////数値シュミレーション/////////////////////
//
for(int i=1;i<=M;i++)
{
for(int l=1;l<=L;l++)//時間発展
nextu[l]=pow(v*dt/dx,2)*(u[l+1]-2*u[l]+u[l-1])+2*u[l]-preu[l];
nextu[0]=nextu[L]; nextu[L+1]=nextu[1]; //周期境界条件
//
/////////描画部//////////////////////////////
if(i%3==0)
{
gra.frectangle(-dx*L/2,-max,dx*L/2,max,haikei);//消去
gra.moveto(0,-max); gra.lineto(0,max); //縦軸
gra.moveto(-dx*L/2,0);gra.lineto(dx*L/2,0); //横軸
}
gra.moveto(-dx*L/2,u[0]);
for(int l=1;l<=L+1;l+=3)
{
gra.lineto(dx*(l-L/2),u[l],GREEN);
}
gra.moveto(-dx*L/2,u[0]);

/////////////入れ替え preu <- u, u <- nextu ///////////////
for(int l=0;l<L+2;l++)
{
preu[l]=u[l];u[l]=nextu[l];
}
}
gend();
}

397 : ◆GpSwX8mo :02/05/10 16:58
さっさと答えろおめーら。

398 :デフォルトの名無しさん:02/05/10 17:00
>>378だと100文字以上ぶちこまれたときにコケる。

399 :デフォルトの名無しさん:02/05/10 17:01
>>396-397
その前の質問しろ

400 :デフォルトの名無しさん:02/05/10 17:02
s/その前の/その前に/

401 :デフォルトの名無しさん:02/05/10 17:02
>>397
グヒヒ

402 : ◆GpSwX8mo :02/05/10 17:05
質問です。
396で
(1)形の違う波が衝突してすり抜けるようにする方法
(2)固定端や自由端にする方法
はどうすればいいんでしょうか。
これはコンパイルしても浮動小数点のエラーは出ますが問題なく実行できます。
いろいろ考えてみたのですが、
(1)は初期条件をうまいこといじればできそうな気がしますが、どうも
すり抜けるというか干渉しあいながらすれ違うみたいな図ができてしまいます。
(2)は周期条件をいじればできそうな気がしますが、もとの図と同じように
ただ往復する波の図ができてしまいます。
どなたか心当たりのある方、レスお願いします。
自分も新たなことがわかり次第、書き込んでいこうと思います。

403 : ◆reqfwMkc :02/05/10 17:06
>>397に偽者が出たのでトリップ変えます。
ちなみに#1でした。

404 :デフォルトの名無しさん:02/05/10 17:09
subback.htmlを更新

405 :383:02/05/10 17:09
>>395
そうなのかもしれませんけど、そのプログラムのソースが手に入らないんですよ。
厚かましい事この上ないですけど、実際に僕が質問した事は初心者レベルで実行可能かどうかだけdめお教えて下さい。

>>391
前のレスを見逃していました、申し訳ないです。
それと勉強不足はやはり違いなく僕の方だと思います。
シェルが何なのかさえ明確には分からないんですから。

>>393
で、出来そうでしょうか?

406 :デフォルトの名無しさん:02/05/10 17:13
>>388
> これはリダイレクトするだけで、出来るものなのですか?
できる。


407 :383:02/05/10 17:15
>>406
出来るんですか。。。
ありがとうございます、お手数おかけしました。
もう少し勉強しなおしてみます。

408 :ふぁるこん:02/05/10 17:33
どなたか教えてください。
BorlandのHPより無料でTurboDebuggerをダウンロードしてきました。
小規模なC++ソースのデバッグをしたいのに以下のエラーがでます。
「not enough memory to load symbol table」
他のアプリも全部終わらせています。
メモリはそれなりに空いていると思うのですがどうすれば良いのでしょうか。

409 :デフォルトの名無しさん:02/05/10 17:37
ど・初心者ですが、質問です
C言語のプログラム書くのに便利なソフトって何がありますか?
コンパイラするソフトではなく、プログラムを書くソフトでお願いします

410 :デフォルトの名無しさん:02/05/10 17:37
>>409
vi

411 :デフォルトの名無しさん:02/05/10 17:41
>>409
須れ違いの鼬買い

412 :デフォルトの名無しさん:02/05/10 17:42
スレ違いって、では、どこで聞けばいいんでしょうか?

413 :デフォルトの名無しさん:02/05/10 17:44
>>409
notepad
edlin

414 :デフォルトの名無しさん:02/05/10 17:46
>>413
ありがとうございます

415 :デフォルトの名無しさん:02/05/10 17:50
ねたのつもりなんだが・・・

416 :デフォルトの名無しさん:02/05/10 17:50
>>415
他にどんなのがいいでしょうか?

417 :デフォルトの名無しさん:02/05/10 17:52
emacs

418 :デフォルトの名無しさん:02/05/10 18:08
マジレス
根っからのWinnerと限定してvi,emacsはじゃ排除

秀丸
vivi
SAKURA
cpad等の簡易統合環境

SAKURAはフリー
統合環境はそれ以外ではほとんど使い物にならないから特殊用途
viviと秀丸はシェア

419 :デフォルトの名無しさん:02/05/10 18:12
マジレス
type con >source.txt

420 :デフォルトの名無しさん:02/05/10 18:52
>>419
立派なエディタだねw

421 :デフォルトの名無しさん:02/05/10 19:07
>>396
つーか、ここで聞かないでシミュレーション板で聞けば?
あと、その近似法だと波が干渉するのは当然だ。

422 :デフォルトの名無しさん:02/05/10 19:25
>>419
DOS時は、数行で終わるファイルはそれで作ってた。
なつかしぃ。

423 : ◆reqfwMkc :02/05/10 19:54
>>421
レスどもです。m(_ _)m
板移ることにします。

424 :デフォルトの名無しさん:02/05/10 20:06
>copy con test.c
だべ?

つーか、ソースなんか
#include <con>
の一行で済ませろ

425 :デフォルトの名無しさん:02/05/10 20:07
>>424
冷静に考えると可能なのよね・・・。

426 :342の初心者:02/05/10 20:37
皆様いろいろとありがとうございました。
いろいろと調べた結果、根本的解決にはなっていませんが以下のようにする事で解決しました。

char string[8];
scanf("%s", string);

char string[9];
scanf("%8s", string);

ただ、調べていくうちに、解決策としてポインタとやらが有効なのではないかと考えています。
>353様のおっしゃられたメモリの動的確保を勉強中です。
入力された分だけメモリを確保するようにしようと思っています。

427 :デフォルトの名無しさん:02/05/10 21:15
char string[9] = {0};
にしといた方がいいよ。


428 :scanf推進派:02/05/10 22:01
>>426
>根本的解決にはなっていませんが・・・
もしかして2バイト文字も一文字としてずらすからでしょうか?
文字コードレベルでずらしていいのでしたら

#include "stdio.h"
#include "stdlib.h"

#define uchar unsigned char
#define num 8
/* ↓MS系コンパイラは定義されていないので↓ */
#define iskanji(_c) ((0x81<=((uchar)_c)&&((uchar)_c)<=0x9f)||(0xe0<=((uchar)_c)&&((uchar)_c)<=0xfc))

int main(void)
{
int i, n;
uchar string[(num*2)+1] = {0x00};

printf( " 1 〜 %d 文字入力してください。\n", num );
scanf("%s", string);

for(i=0, n=0; *(string+i)!=0x00; i++, n++){
if(iskanji(*(string+i)))
i++;
}
if(n > num){
puts( "多すぎ..." );
exit(30);
}
for (i=0; *(string+i)!=0x00; i++){
if(iskanji(*(string+i)))
i++;
*(string+i) += 0x01;
}
printf( "%s\n", string );
return (0);
}

は、どうでしょうか?コンパイルしてないのでうまく動作するかはわかりませんが...
また、質問の内容とずれていたらスマソ


429 :デフォルトの名無しさん:02/05/10 22:11
UNIX環境でプログラムから自分が実行されてる
ウィンドウのサイズ(文字数)を調べる方法知ってる人教えてくれ。

430 :デフォルトの名無しさん:02/05/10 22:15
>>429
取りあえず寝ろ。

431 :デフォルトの名無しさん:02/05/10 22:29
とりあえず意味が分からない。

432 :デフォルトの名無しさん:02/05/10 22:31
>>430
UNIXコマンドを作るんスよ!
実行されてるウィンドウサイズがわからなきゃ作りようがない!
んじゃなけりゃLinxコマンドとかのソースって何処にあるかだけでも!

433 :デフォルトの名無しさん:02/05/10 22:34
質問です。
16bitの整数の上8ビットと下8ビットを入れ替えたいんですが、例えば

short int data[100];
:
:
for(i=0;i<100;i++){
  data[i]=(data[i]>>8 & 0xff)|(data[i]<<8 & 0xff00);
}

こんな事してるんですが、もっと早い方法ってありますか?

434 :デフォルトの名無しさん:02/05/10 22:34
curses使え

435 :デフォルトの名無しさん:02/05/10 22:36
>>428
そのscanf()の使い方だと振り出しに戻ってるような…

436 :デフォルトの名無しさん:02/05/10 22:37
CPUにそういう専用命令があるかも。
あと、unsigned shortとしておけば、
&は要らないとおもう。

437 :デフォルトの名無しさん:02/05/10 22:40
>>434
ありがとう。

438 :デフォルトの名無しさん:02/05/10 22:41
curses
ってさ"かーしぃす"って読んだらいいの?

439 :デフォルトの名無しさん:02/05/10 22:49
>>433
激しく機種依存だけど、union使ったら?

440 :デフォルトの名無しさん:02/05/10 22:50
>>439
どんな感じに?

441 :デフォルトの名無しさん:02/05/10 23:02
>>433
環境を特定しないような一般的なレベルでは、それがいいのでは?
それ以上気にするなら、メモリアクセスのスループットを最大化するこ
とを重視して最適化するのがよいと思う。組み込みプロセッサとかは知
らんけど。

442 :デフォルトの名無しさん:02/05/10 23:06
>438
最後は ず の方がかっこいい。

443 :433:02/05/10 23:07
皆さんアドバイスありがとうございます。
ところで、どのように共有体を使ったらいいのでしょうか>>439
興味あります。

444 :名無しさん:02/05/10 23:08
printfなどの出力は、今では簡単にできますがもともとは誰かが設定した関数printfを使っているわけですよね。
そう考えて、どんどん根底まで突き詰めていくと(つまり、printf関数を作成した人はその関数内で別の関数を利用していたと考えられます。
が、その関数を定義した人は?というループ)、C言語のライブラリにある関数をプログラミングしている人は、こちらから見れば作成環境がどんどん悪くなっていきます。
どのような方法でプログラミングをしていたのでしょうか?
それとも、C言語というプログラミング言語は、ほかのプログラミング言語で定義されたものなのでしょうか?

445 :デフォルトの名無しさん:02/05/10 23:09
>>444


446 :デフォルトの名無しさん:02/05/10 23:10
>>443

union
{
 struct
 {
  char a;
  char b;
 } c;
 short s;
} r;

r.s = 数字;
swap(r.c.a,r.c.b);

アバウトにこんな感じ

447 :439じゃないけど:02/05/10 23:11
>443
typedef union{
short s;
struct { char c1; char c2; };
} utype;
...
short int data[100];
utype *ptr = (utype*) data;
for(i=0;i<100;i++){
swap( ptr->c1 , ptr->c2 );
ptr++;
}
つーよーな感じでわ。

448 :デフォルトの名無しさん:02/05/10 23:11
>>444
一度、printfのソースを眺めてみればいいと思う。

449 :デフォルトの名無しさん:02/05/10 23:12
>>439
実行時間計ってみれ。
コンパイラが最適化してビット操作に置き換えちゃったりすることがあ
るので、コードを確認してみても面白い。


450 :デフォルトの名無しさん:02/05/10 23:11
>>444 ソース読めば?

451 :433:02/05/10 23:22
>>446,447
なるほど。共有体なんて使った事がなかったからそんな発想はありませんでした。
さんきゅうです。

452 :デフォルトの名無しさん:02/05/10 23:35
>>446-447,451
構造体のパッキング・・・

453 :デフォルトの名無しさん:02/05/10 23:38
>>444
わかりませんか?おかしいですね。
特に、初心者の方はよくわかると思うのですが・・・

たとえば、文字列の長さを調べるのに
int i;
char *s = ...
for (i = 0; s[i] != '\0'; i++)
;
i += 1;
とかやってませんか?

それがアレですよ、ええと、そうそうstrlen()
こんな調子であなたがやってることをライブラリ制作者はやっているんです

454 :デフォルトの名無しさん:02/05/10 23:47
>>444
だいたいそんな感じですが、最終的には OS の機能を呼び出して文字を出力するわけですな。

455 :デフォルトの名無しさん:02/05/10 23:49
>>454
もしくはVGAとかBIOS叩く〜

456 :デフォルトの名無しさん:02/05/10 23:52
>>454
飛躍しすぎ


457 :デフォルトの名無しさん:02/05/10 23:52
誤爆
>>455宛て

458 :433:02/05/11 00:13
構造体のぱつきんぐって何?
それつおいの?

459 :デフォルトの名無しさん:02/05/11 00:27
>>444
基本的にはアセンブラ
まぁ、機械語を書ける兵もいるかも知れんが…

460 :デフォルトの名無しさん:02/05/11 00:54
近頃unionを共有体と呼ぶヤシが多いのはなぜだ?

461 :デフォルトの名無しさん:02/05/11 00:56
共用体じゃないのか?

462 : :02/05/11 01:09
ファイル共有ソフトの関係じゃない?

463 :デフォルトの名無しさん:02/05/11 01:26
昔は労働体と言ってたものじゃが…

464 :C勉強中:02/05/11 01:26
なにやら評判がいいのでK&R本でC言語を勉強してます。

p22の演習1-6で getchar() !=EOF という式の値が0か1であることを
確認せよっていうのがどうすれば確認できるか分かりません。

アドバイスお願いします。

465 :デフォルトの名無しさん:02/05/11 01:28
>>464

printf("%d\n", getchar() != EOF);

466 :デフォルトの名無しさん:02/05/11 01:32
>>465
それはアドヴァイスではなく答えだ


467 :C勉強中:02/05/11 01:33
{
int c;

while ((c = getchar()) != EOF){
putchar(c);
printf("%d\n", getchar() != EOF);
}

}
で、testと入力して実行すると
t1
s1
って結果になるんですがこれでOKです?結果が理解できないです。

468 :デフォルトの名無しさん:02/05/11 01:36
>>467
それでOKです。"test"のうち2文字目の'e'と4文字目の't'がprintf内のgetchar()
によって食われ、1になっているからです。

469 :デフォルトの名無しさん:02/05/11 01:41
int blean, c;
while (blean = (c = getchar()) != EOF){
if(c == '\n') continue;
printf("%c\t%d\n", c, blean);
}
printf("EOF\t%d\n", blean);

470 :C勉強中:02/05/11 01:51
>>468
食われて?w;
まず拾ってきた1文字めがEOFじゃないからtをプットしますよね?
プットした=真だから次に1プリントアウトさるのは分かるのですが
eはいずこえ?つぎにeを拾ってこないの?

>>469
理解するにしばし時間を。

471 :デフォルトの名無しさん:02/05/11 01:54
while ((c = getchar()) != EOF){ //tをゲト
putchar(c);
printf("%d\n", getchar() != EOF); //eをゲト
}

getchar()使う、読み出す位置、次へ移る
これプログラムの定説ある(´A`)

472 :デフォルトの名無しさん:02/05/11 01:55
>eはいずこえ?つぎにeを拾ってこないの?
printf内のgetcharで拾ったよ。出力してないだけで。

473 :デフォルトの名無しさん:02/05/11 01:56
>>470
食われてという表現はまずかったかもしれないけど、'e'がEOFではない
もんだから、getchar() != EOFの式が1になって、それがprintfで表示
される罠。
その後またwhileの条件文に戻って、's'をgetchar()してputchar()し、
最後の't'もまた例によって1になる罠。

474 :デフォルトの名無しさん:02/05/11 01:57
>>470
ああわかった。どこで悩んでおられるのか。
getchar() != EOFという式が、char型を返すと思いこんでおられるようだ。
この式は1か0しか返さんよ。

475 :C勉強中:02/05/11 01:58
なるほど。二つ目のgetchar() != EOFでも文字ゲットしてきますよね。
二つ目のgetchar() != EOFを一つ目のときの数字の1とだけしか見てませんでした。
やっと理解できました。ありがとうございますた。


476 :デフォルトの名無しさん:02/05/11 02:07
>>474
ハァ?
標準入力から一文字読んでその文字を返す関数ですが。

477 :476:02/05/11 02:08
おっと、式のことか。スマソ
起きたばかりでねぼけてしまった。

478 :383:02/05/11 02:56
>>406
手持ちの参考書調べてみましたが、やっぱり分かりません。
なんか、一個目の入力で止まってしまって、目的のプログラムが終了するまで
残りの引数が入力されないような状態になってしまうんですけど。。。
なんか、ヒントとか参考になる書籍とかだけで良いので教えてくださいませんかね?

479 :デフォルトの名無しさん:02/05/11 02:58
>>478
fgets(...);
fgets(...);
としてユーザの入力を得るなら、
y
y
n
と記述したテキストを用意して、

executable < commands.txt

これで出来る

480 :デフォルトの名無しさん:02/05/11 03:09
設問が「確認せよ」だから、答えとしては

規格のこの部分で「〜」と定義されている。
よって、getchar() != EOF という式の値は0か1になる。

という記述の方がふさわしいような気がする。
printf("%d\n", getchar() != EOF);
これだとあらゆる入力を試さないと確認したことにならないし。

481 :デフォルトの名無しさん:02/05/11 03:09
>>478
何でもいいから次の参考書を買え。参考書はいっぱいあるから尽きるこ
とはない。安心しろ。


482 :デフォルトの名無しさん:02/05/11 05:11
>>481
時間が尽きると思われ

483 :デフォルトの名無しさん:02/05/11 05:39
>>478
キーワードが幾つか出てるけど、それで検索掛けてみた?


484 :デフォルトの名無しさん:02/05/11 06:03
>>479
>>405でソースが入らないと言ってるのに
fgetsならと言いきってしまう所が素敵

>>383
一通り、試してみて駄目だったら諦めた方が良いよ

485 :デフォルトの名無しさん:02/05/11 06:07
>>481
482さんの仰る通りそんな事してたら時間が幾らあっても足りません。
意地悪な事は言わないで良書(出きればソース付きの)を教えてくださいませんか?

>>483
リダイレクト以外で何かキーワードが出てきたでしょうか?
リダイレクトでは検索かけてみたんですけど、
どうも参考書に書いてあることと変わらない内容ばかりで…
僕は応用が利かないんでしょうね。。。
けど、もう少し頑張ってみます。

486 :デフォルトの名無しさん:02/05/11 06:09
>>484
>一通り、試してみて駄目だったら諦めた方が良いよ
とは一体どういう意味なのでしょうか?
出来るには出来るけど、僕には無理という事なのか、
実質的に無理なのか、どっちなんでしょうか?
多分前者だと思うんですけど。。。忌憚無き意見をお願いします。

487 :デフォルトの名無しさん:02/05/11 06:43
ソースが手に入らないでプログラム的に解決する事じゃないなら、
そもそも板違いだろ?

488 :デフォルトの名無しさん:02/05/11 06:44
とりあえず、環境は何なんだよ
それによって解答も違うだろ

489 :デフォルトの名無しさん:02/05/11 07:45
char str[20];

fgets(str,sizeof str,stdin);

としたとき、改行文字も入れて20文字以上書き込むと標準入力に何文字か残ってしまいますよね?
これを消し去るにはどうしたらいいのでしょうか。

調べてみたところfflush(stdin)とすればできると書いてあったのですが、Linux+gccの環境ではできないようなんです。

490 :デフォルトの名無しさん:02/05/11 08:17
>>489
規格ではfflush()は出力用にしか定義されてない。

491 :デフォルトの名無しさん:02/05/11 09:26
>>490
環境依存でも構わないので、何かよい方法はないでしょうか。

492 :デフォルトの名無しさん:02/05/11 10:54
>>489
scanf("%*s");

493 :デフォルトの名無しさん:02/05/11 11:35
>>489
どういう組み方をしたいのかは知らないが、普通fgetsに標準入力は使わないと思うが・・・

494 :デフォルトの名無しさん:02/05/11 11:41
>>493
よく使ってますが何か?

495 :デフォルトの名無しさん:02/05/11 11:48
>>494
getsじゃダメダメ?
単にwarning回避したいだけ?

496 :デフォルトの名無しさん:02/05/11 11:49
>>493
gets() がバッファサイズ指定できるならそっちを使うだが、
現状では fgets() するしかないような。

497 :デフォルトの名無しさん:02/05/11 11:51
> 普通fgetsに標準入力は使わないと思うが・・・
常道じゃないの?

498 :デフォルトの名無しさん:02/05/11 11:52
>>496
ああ、fgetsってバッファサイズ渡せるのね。
freadしか使ったこと無いよ。。。たしか。

499 :デフォルトの名無しさん:02/05/11 12:02
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> fgets

500 :デフォルトの名無しさん:02/05/11 12:14
>>499
いや、意味わからんて。

501 :デフォルトの名無しさん:02/05/11 12:26
stdinのバッファをフラッシュするのって、難しいね。いろいろやってみたけど、
やっぱり直接FILE構造体の中身をいじるしかないみたい。

502 :デフォルトの名無しさん:02/05/11 12:33
fseek(stdin,0L,SEEK_END);

これはまずいよな・・・・一応VC++ではできるみたいだけど。

503 :502:02/05/11 12:38
しかも別にフラッシュしているわけじゃないし。

504 :デフォルトの名無しさん:02/05/11 12:44
>>501
ユーザがキーを先行入力している可能性があるので、何でもかんでもstdinを
フラッシュするのはいかがなものか。

バッファから溢れた行末部分を捨て去りたいなら
char str[20];
int c;
fgets (str, sizeof str, stdin);
if (str[0] && (str[strlen (str) - 1] != '\n'))
  while (((c = getc (stdin)) != EOF) && (c != '\n'))
    ;
こんな感じか。

505 :デフォルトの名無しさん:02/05/11 13:04
>>485
君はどんな参考書でも役に立つレベルかと思われ。たくさん読め。
つーか問題も分かっててソースも必要と、具体的な要求があるんだから本屋で
探せばいいじゃん。できないなら読解能力不足だ。たくさん読んで読解能力を
身につけよう。

506 :デフォルトの名無しさん:02/05/11 13:33
int mygets(char *buf, size_t bufsize, FILE *fp)
{
size_t n = 0;
int c;
whilie ((c = fgetc(fp)) != EOF)
{
if (c == '\n')
break;
if (n < bufsize)
buf[n] = c;
++n;
}
buf[n] = '\0';
return c;
}
こんなんいっこつくればいいやん。

507 :デフォルトの名無しさん:02/05/11 13:33
n < bufsize -1
じゃないとまずいね。

508 :デフォルトの名無しさん:02/05/11 14:05
if (n < bufsize - 1)
  buf[n++] = c;
じゃないとまずいね。

509 :デフォルトの名無しさん:02/05/11 14:45
charが8ビットでない環境(自分は見たことないけど)では、
uint8_t とかはどのように定義されるのだろう???

510 :デフォルトの名無しさん:02/05/11 15:01
>>505
んな事は分かってる。
レベルの低さからしても確かにどんな参考書でも多少は役に立つだろうよ。
でも、どんな本にも良い者と悪い物があるだろう、目的の技術が載っていない本だってあるだろう。
俺は何冊も本が買えるほど裕福じゃないし全部読めるほど暇でもないんだ。
また本屋でぱっと見たくらいじゃ分からないレベルだから、ここでお薦めの本がないか聞いているんだ。
昨日からの話の流れで、そのくらい判断できるだろう。
出来なかったんなら君こそ読解力を身につけた方が良いんじゃないか?それとも初めから答える気なんてないのか?
どんな本でも沢山読めっつうようなアドバイスなんて、別にC言語知らなくても出来るだろう。
もしも、一冊か二冊読んだくらいでどうこうなるような問題じゃないのなら謝罪するよ。
だが、もしそうなら君は一体何冊くらいの本を読んだんだ?そのくらいの情報はあっても良いと思うんだが。
質問しといてこういう事を言うのは非常に大人気無いが、君の発言にはちょっとカチンときたよ。

>488
OSはレッドハットです、バージョンは忘れましたけど。
>487
ソースは二種類あります。
繰り返し引数を入力して実行するプログラムと、引数の入力を自動化するプログラムです。
前者は手に入りました、後者を自作したいんです。
後者のプログラムを作るために参考になるソースがれば良いという意味で書いたのですが。

511 :デフォルトの名無しさん:02/05/11 15:08
>>509
charが1バイトは仕様で定義されてた気がする・・・

>>510
俺はCの本は1冊読んだだけだけど、何を読むべきかなんて他人にはわからない問題かもしれない。
K&Rを激しく勧めるやつもいればK&Rは糞だと言うやつもいる。

512 :デフォルトの名無しさん:02/05/11 15:30
>>510
ネットで調べれば?俺はそうしたよ


513 :デフォルトの名無しさん:02/05/11 15:33
本のことです

514 :デフォルトの名無しさん:02/05/11 15:36
charは決まってるね。

515 :デフォルトの名無しさん:02/05/11 15:36
>>511
charは1byte。
でも1byteが8bitという決まりはない。

516 :デフォルトの名無しさん:02/05/11 15:43
この前、charもintも32bitという環境で開発しているという人がいたな。
使いにくそう・・・・

517 :デフォルトの名無しさん:02/05/11 15:45
>>510
相手が自分の期待したとおりの回答を出さなかったからといって切れるのはどうかと思うが。

ちなみに俺の場合は買ったのは二十冊ぐらいにもなったかな。
ほとんど500円以内で買った中古本。
読み終わったらフリーマーケット行き。

1冊だけと言うなら K&R を勧める。
続けるなら推薦図書スレでどうぞ。

518 :デフォルトの名無しさん:02/05/11 15:46
>>517
アフォは放置。それがベスト。


519 :デフォルトの名無しさん:02/05/11 16:04
>>571
アフォ3級に認定されました おめでとう!!
次は2級をめざしてがんばってね

520 :デフォルトの名無しさん:02/05/11 16:05
>>519
アフォ2段の方は言うことが違うわ。
>>571の人!がんばってくれ!!

521 :デフォルトの名無しさん:02/05/11 16:06
>>519のアフォ度は測定不能です。

522 :_ :02/05/11 16:07
a[0] = 0;    // a is int*
a[1] = 1;

*a++ = 0;
*a = 1;
って基本的にどっちが速いの?
gccではほとんど変わらないみたいだけど・・・(最適化激しすぎ)
変わらないなら上のほうが分かりやすいな。

523 :デフォルトの名無しさん:02/05/11 16:11
おまえら>>571にプレッシャーかけるなよ。
どんなふうにボケようか困るだろ。

あと約50か……(ドキドキ

524 :デフォルトの名無しさん:02/05/11 16:18
ところで>>518が放置したのは>>510だと思うが。
>>519はその辺どう思う?

525 :デフォルトの名無しさん:02/05/11 16:21
>>519は恥ずかしくてもう出てこれないそうです。

526 :デフォルトの名無しさん:02/05/11 16:27
>>522
ケースバイケースで使い分ける。速度と可読性を秤にかけること。大抵の
場合は可読性を取った方がよい。

527 :デフォルトの名無しさん:02/05/11 16:28
>>571 取り合戦などというめずらしい会場はここですか?

528 :デフォルトの名無しさん:02/05/11 16:31
C言語ってなんでDOS窓で出てくるんですか?

529 :デフォルトの名無しさん:02/05/11 16:34
>>522
前者じゃねぇのかなぁ。なんとなく。
サイズってどっちが小さいのかね。

530 :デフォルトの名無しさん:02/05/11 16:37
>>528
たまたまprintfが標準出力に出力する仕様で
たまたま標準出力がコンソール(DOS窓)を指しているだけです。

531 :デフォルトの名無しさん:02/05/11 16:41
>>528
EXEを作る際にリンカの設定でそうしているだけです。

532 :デフォルトの名無しさん:02/05/11 16:43
>522
その程度だと、どんな環境でも差が出にくいんじゃないか?
aが構造体へのポインタで、更に同様の記述が多くなると
差が出そうだが(後者が速くなりそうだ)、それさえも大抵は
最適化でほぼ同じになってしまう。基本的に読みやすい方で
いいだろうな。

533 :デフォルトの名無しさん:02/05/11 16:56
おーい。だれか構造体のパッキングって何かおしえてくれー。

534 :デフォルトの名無しさん:02/05/11 16:58
>>533
水道の蛇口んところとかで水漏れ防ぐやつ?

535 :デフォルトの名無しさん:02/05/11 16:59
>>533
ハッキング?

536 :デフォルトの名無しさん:02/05/11 16:59
>>533
中途半端な大きさだとCPUが取得できなかったり非常に効率が悪くなったりする。
それを防ぐために構造体はある境界までサイズを増大させる。
それが嫌ならpackedさせる。

537 :デフォルトの名無しさん:02/05/11 17:00
>>536
packedはpascalだね。

538 :デフォルトの名無しさん:02/05/11 17:01
>>それが嫌ならpackedさせる。
えーと、手元にある参考書(独習C)には特に何も書いていないんですけどどういうことなんですか?

539 :デフォルトの名無しさん:02/05/11 17:03
>>537
ごめんなさい、ほんとはDel厨です。

>>538
Cでpackedに対応するキーワードを付ければ構造体のサイズはメンバの合計サイズとなる。


540 :デフォルトの名無しさん:02/05/11 17:06
知らないならしゃしゃり出ないでくれる?

541 :!>>539:02/05/11 17:07
>>540
で、お前は何も答えられないのな。

542 :デフォルトの名無しさん:02/05/11 17:18
>>539
C言語自体にはないけど、#pragma packで構造体をパックする処理系も
あるよ。説明書をよく読んでみそ。

543 :デフォルトの名無しさん:02/05/11 18:09
>>517
ああいう反応をしたのは大人気無かったと自覚している。
言い訳になるけど、あれ以上ループを繰り返したくなかったんだよ。
昨日は肝心の質問内容には殆ど触れられずに終わっていまっていたから。
なにも言わずに諦めて去るという選択あったんだろうけど。
なんにせよ、ご回答には感謝する、ありがとう。
参考にさせてもらいます。

>511
そりゃ、一般的な技術を学ぶんだったら人それぞれかもしれないけど
今はこちらが問題点をここに書いて、それに合った技術が詳しく解説されている本を求めているわけで。
自分に合う合わないは二の次なんですよ、今回は。

544 :デフォルトの名無しさん:02/05/11 18:11
>ああいう反応をしたのは大人気無かったと自覚している。
おこちゃまは背伸びしてみなくてもよいですよ

545 :デフォルトの名無しさん:02/05/11 18:14
(最適化激しすぎ)

546 :デフォルトの名無しさん:02/05/11 18:24
>>543
redhatつかってんだろ?
なんでリダイレクトしないんだよ?

547 :デフォルトの名無しさん:02/05/11 18:24
redhatっていってもLinuxじゃない特殊な環境があるのか?

548 :デフォルトの名無しさん:02/05/11 18:47
つか、リダイレクトごときでこんだけひっぱって、
あげくにソース付きの本紹介しろとか言っちゃったら、
なに言われても文句言えないだr(略

549 :HHH:02/05/11 18:48
四次方程式の解を求めるプログラムを示して頂けないでしょうか
0〜4次の五つの係数を代入するヤシです
検索でアプリケーションは見つかったのですがソースが見れませんでしたッp

550 :デフォルトの名無しさん:02/05/11 18:55
>>549
解の公式があればそれをコーディングするだけで終わると思うんだけどいかが?

551 :デフォルトの名無しさん:02/05/11 19:03
これっておかしいでしょうか?

KOU *Kou;

ReadFile(hFile,&Kou,sizeof(KOU)*17,&byteCount,NULL);



552 :デフォルトの名無しさん:02/05/11 19:05
すみませんでした

数行抜けてました

KOU *Kou;

if( ( Kou = (KOU *)calloc(17,sizeof(KOU)) ) == NULL )
 exit(1);
}


ReadFile(hFile,&Kou,sizeof(KOU)*17,&byteCount,NULL);

553 :デフォルトの名無しさん:02/05/11 19:06
>>551
可笑しいです。たぶん
>ReadFile(hFile,&Kou,sizeof(KOU)*17,&byteCount,NULL);
ここを
ReadFile(hFile,Kou,sizeof(KOU)*17,&byteCount,NULL);
こうしたいんだと思う。

554 :デフォルトの名無しさん:02/05/11 19:07
×ReadFile(hFile,&Kou,sizeof(KOU)*17,&byteCount,NULL);
○ReadFile(hFile,Kou,sizeof(KOU)*17,&byteCount,NULL);

555 :554:02/05/11 19:07
ぎゃーかぶったー。

556 :553:02/05/11 19:08
>>555
ふ・・・世の中考えることは皆同じなのさ。

557 :デフォルトの名無しさん:02/05/11 19:14
>>553-556
説法ありがとうです
5時間悩んでいましたが,やっとうまくいきました

558 :デフォルトの名無しさん:02/05/11 20:14
locateがうまくいかないんです。カーソル移動したいのに。何で出来ないの?

559 :デフォルトの名無しさん:02/05/11 20:28
locateって何ですかー。ANSI C にそのような識別子は規定されておりません。

560 :デフォルトの名無しさん:02/05/11 20:28
>>559
BASICか・・・。

ANSI.sys入れてエスケープシーケンスとか。

561 :デフォルトの名無しさん:02/05/11 20:30
__WIN32__ とか __linux__ とか __MSDOS__ みたいに、
MacOS X を識別できる定義済みマクロってなんか無いでしょうか??
X で定義されて 9 以下では定義されないようなやつ。

562 :デフォルトの名無しさん:02/05/11 21:04
>>561
>>1 C FAQ 10.19

9以下の環境とXの両方で試して比較すれ。

563 :デフォルトの名無しさん:02/05/11 21:14
皆さん、K&Rの例題解いてます?
いまやってるんですが、1問につき1日費すこともあります。
これって遅いですか?


564 :デフォルトの名無しさん:02/05/11 21:15
>>563
まあ焦らずゆっくりやれや。ペースはひとそれぞれだし。

565 :デフォルトの名無しさん:02/05/11 21:19
>>563
心配するな。
俺の場合、5章、6章当たりは3日で1問とかだった。


566 :デフォルトの名無しさん:02/05/11 21:23
>>564
確かにそうなんですどね

>>565
5、6章で1問につき3日ですか、私なら1週間掛りそうですね。

567 :デフォルトの名無しさん:02/05/11 21:28
#defineとかの解釈アルゴリズム詳しくわかる人いる?
Cコンパイラ自作しようと思ったが、初めにマクロの解釈でつまずいた。
int a = 1;
int b = 2;
#define b a + b
#define a a + b
printf("%d", a);
例えばこれで何が出力されるか実際に試さないとなかなかわからないと思うが。
あと関数内にマクロを書いた場合、ソース上のどの範囲で有効になるかとか。

マクロの解釈アルゴリズム具体的にわかる人いる?


568 :デフォルトの名無しさん:02/05/11 21:32
>>567
printf("%d", a + b);
に展開されるし、定義した位置から#undefするまでスコープ外でも有効

569 :567:02/05/11 21:38
>>568
スコープについてはありがとう。
実際にやってみたら意外と4になった。
実際作るとしたらどういうアルゴリズムで展開したらよいのだろうか?


570 :デフォルトの名無しさん:02/05/11 21:41
>>569
マクロ a の展開中にマクロ a は展開されない。
マクロ b の展開中にマクロ b は展開されない。
だから
a → a + b → a + a + b
で終わり。・・・のはず。

571 :デフォルトの名無しさん:02/05/11 21:42
上で #define b a + b してるから、
これ #define a a + b はすなわち #define a a + a + b 。
ゆえに printf("%d", a); は printf("%d", a + a + b); と展開される。
なので出力結果は1+1+2の4。

ファイルの上から順に、単純に文字列置換していくだけでいいのでは?>>569

572 :デフォルトの名無しさん:02/05/11 21:49
int a = 1;
int b = 2;
#define a a+b
#define b 100
printf("%d", a);
は 101 になる。 bccでは、なった。 やってみれ。

573 :お願いします:02/05/11 21:51
プログラマーの卵です。
いま研修中でwin32 console applicatison(DOS風の黒い画面上で動くソフト)
を作っています。初歩的な質問かもしれないですが参ってます。

printf("数値aを入力\n");
printf("必要なければそのまま[enter]を押してください。\n");
if(scanf("%d",&a)!='\n')/*この行の式がわかりません*/
  printf("%d",a);
  printf("入力無し");

というような感じで、エンターキーを押すと次の処理に移行
できるような、判別式を探しています。(\nでは無理でした。)
なにか方法はないでしょうか?よろしくおねがいします。

574 :デフォルトの名無しさん:02/05/11 21:53
>>572
改めて考えると結構無茶苦茶な言語だな C って(w
最初のプリプロセッサの実装の都合に仕様が引きづられてそうだ。

>>573
scanf の返り値が何かくらい調べろ。

575 :デフォルトの名無しさん:02/05/11 21:58
getsしたあとで sccanfして戻り値を調べろ。


576 :567:02/05/11 22:07
ありがとう。ついでにもうひとつだけ、
int a = 1;
#define a b
#define b a
printf("%d", b);
では、これは?

ちなみに、
#define a b
#define a a
だったらaが再定義されているというエラーが出る。
だから#define b a → #define a a に展開されているとしたら、
aが再定義されているとエラーが出るはず。

もし左側の字句は展開されないのだったら、
上から順に展開されると b→a
で問題無く終わりのはずなんだが。

実際はbが定義されていないと出た。この場合どういう展開したかわかる?


577 :567:02/05/11 22:10
すいません。567は勘違いです。わすれて。


578 :567:02/05/11 22:11
↑567はじゃなくて576ね

579 :デフォルトの名無しさん:02/05/11 22:18
>>576

#define b a
の時点でaは展開されるんじゃないの?
#define b b
の意味になるから、bはそれ以上展開されないで未定義。
ってゆうかcppすれ。

580 :デフォルトの名無しさん:02/05/11 22:30
アホども、議論する前に参考書でも読め

581 :デフォルトの名無しさん:02/05/11 22:33
>>579
>>572を眺めてみよう。

582 :573:02/05/11 23:15
>>574 >>575

すいません、頭があんまりいいほうではないので
もう少しヒントが欲しいんですが・・。

読み込みをgetsでやって、その後scanfするというのは
エンターの入力をgetsなら文字として判定できるということですか??

583 :デフォルトの名無しさん:02/05/11 23:27
>>571
あなたアフォ3級だって。
真面目に答えたのにご愁傷様。

584 :デフォルトの名無しさん:02/05/11 23:30
>>582
*scanfの戻り値は実際に代入できた数でしょ?

char str1[]="333";
char str2[]="aaa";
int i;

sscanf(str1,"%d",&i); /* ここでは1が */
sscanf(str2,"%d",&i); /* ここでは0が */

返るはず。

585 :デフォルトの名無しさん:02/05/11 23:31
いちいちきかねえでライブラリのマニュアル見ろバか

586 :584:02/05/11 23:32
>>585
私に言っているの・・・・?
聞いているのとはちょっと違うんだけど。

587 :デフォルトの名無しさん:02/05/11 23:33
このやり方であっているんでしょうか?

KOU Kou[6];

hFile = CreateFile("Kou.dat",GENERIC_READ,0,NULL,OPEN_EXISTING,
 FILE_ATTRIBUTE_NORMAL,NULL);
//読みこみを失敗したら終了
if(hFile == INVALID_HANDLE_VALUE){
 ErrorRead();
 GameExit();
}

ReadFile(hFile,&Player,sizeof(PLAYER)*6,&byteCount,NULL);
CloseHandle(hFile);

ReadFileの中は,あっているんでしょうか?

588 :デフォルトの名無しさん:02/05/11 23:34
まちがいました

KOU Kou[6];

hFile = CreateFile("Kou.dat",GENERIC_READ,0,NULL,OPEN_EXISTING,
 FILE_ATTRIBUTE_NORMAL,NULL);
//読みこみを失敗したら終了
if(hFile == INVALID_HANDLE_VALUE){
 ErrorRead();
 GameExit();
}

ReadFile(hFile,&Kou,sizeof(KOU)*6,&byteCount,NULL);
CloseHandle(hFile);

ReadFileの中は,あっているんでしょうか?

589 :デフォルトの名無しさん:02/05/11 23:39
APIの話をするならWin32スレに逝け。


590 :デフォルトの名無しさん:02/05/11 23:57
なんでココの奴らは、

それは〜〜だよ。
すれ違いだから、今後は〜スレで聞けよ。

ぐらいできないのが多いの?
分からないから他にまわすってこと?

591 :デフォルトの名無しさん:02/05/11 23:58
板違いだつーのがわからないならもう来んな

592 :588:02/05/12 00:00
解決しました
板違いすんませんでした

593 :デフォルトの名無しさん:02/05/12 00:10
>>591
板違いとスレ違いの違いがわからないならもう来んな

594 :デフォルトの名無しさん:02/05/12 00:16
>>574
>改めて考えると結構無茶苦茶な言語だな C って(w
>最初のプリプロセッサの実装の都合に仕様が引きづられてそうだ。

プリプロセッサの動作は旧いCとANSI-Cではかなり違う。
旧いCの方は小技がかなり効きそうだけど、頑張った他人のソースを読むのは
嫌になるに違いない。

595 :デフォルトの名無しさん:02/05/12 00:33
>>587コイツ、スゲー馬鹿
>>551
http://pc.2ch.net/test/read.cgi/tech/1017072275/685
参照

596 :567:02/05/12 02:30
>>579
576は勘違いでした。お騒がせしました。

>>571
> ファイルの上から順に、単純に文字列置換していくだけでいいのでは?
とりあえずいろいろ試して#defineの仕組みがだいたいわかってきたので参考までに。
どうやら上から順番に置換していくわけではないようです。
ちなみに#defineの行の自体は他の#defineにより置換されることはないようです。
例えば次の例を使うと
 int a = 1;
 int b = 2;
 #define b a + b
 #define a a + b
 printf("%d", a);
まず、#defineの第1字句がaと一致するものを検索して置換します。
 a → a + b
そしてこの#defineにフラグを立てます。一度使った#defineは置換完了まで再び使われません
次にこのaとbに対して再び置換を試みます。
a の#defineはさっき使ったのでもう使用不可です。そこで b に対してのみ置換が行われます。
 a + b → a + a + b
そしてこの#defineにもフラグを立てます。
次にこのaとbに対して置換が試みられます。もう使用できる#defineはないのでここで終了です。
こうやって使用できる#defineがなくなるか、もしくは
どの字句も全ての#defineの1字句目と一致しなくなれば終了です。

この方法だと#defineする順番を入れ替えても同じ結果が出ます。


597 :デフォルトの名無しさん:02/05/12 02:58
printfでunsigned long型を表示したいのですが、%luというのは処理系(ANSI C準拠)に依存せずに使えるんでしょうか。

598 :デフォルトの名無しさん:02/05/12 03:17
>>596
「一度使った#defineは置換完了まで再び使われません」というのが多少気になる。余計なお世話かもしれんけど、こんなの考えてみた。
int a = 1;
int b = 2;
int c = 3;
#define a a + b
#define b a + c
#define c b
#define d a + b + c
printf("%d", d);
意味判らん気味だけど、最終的に a + a + b + a + b + b + a + b + c = 15 になります。たぶんこれくらいややこしいのが正常に展開できたら問題ないんじゃないかと。>>596だと、
d (dを展開)→ a + b + c (aを展開)→ a + b + b + c (bを展開)→ a + a + b + a + b + c (cを展開)→ a + a + b + a + b + b (終わり)
になりそうな気がして。

599 :デフォルトの名無しさん:02/05/12 03:18
>>597
うぃ。 %lu は ANSI 準拠です。 unsigned long で使えます。

600 :デフォルトの名無しさん:02/05/12 03:51
Cは死滅言語です。きっぱりやめましょう


601 :デフォルトの名無しさん:02/05/12 03:53
>>600
あなたもさっさとプログラマやめましょう。

602 :デフォルトの名無しさん:02/05/12 03:54
>>601
やめるも何も>>600はプログラマじゃないよ。
Cを使えないがためにプログラマになれなかったの。

603 :デフォルトの名無しさん:02/05/12 04:00
ああ、そうだったわね。

604 :デフォルトの名無しさん:02/05/12 04:06
最近cを始めたばかりなのですが

int c;

while((c=getchar())!=EOF)

とありますが、何を入力してEOFなのでしょうか?
EOFの値は-1と表示されますが、駄目元で-1と入力しましたが
やはり駄目でした。
申し訳ありませんが教えていただけると嬉しいです。


605 :デフォルトの名無しさん:02/05/12 04:09
EOFはcharの範囲外の任意の値
従って、直接EOFを入力することは不可能

606 :デフォルトの名無しさん:02/05/12 04:10
キターーー!!

>>604
キーボードのCtrl + Zよ
Windows系ならね

607 :デフォルトの名無しさん:02/05/12 04:11
>>604
WindowsのコンソールならばCtrl+Z
UNIX、もしくはWindowsでもcygwinならばCtrl+D

608 :604:02/05/12 04:12
>>606
できました〜!!
ありがとうございます。

609 :デフォルトの名無しさん:02/05/12 04:14
>>605
(TДT)

610 :604:02/05/12 04:15
>>607
ありがとうございます。

611 :デフォルトの名無しさん:02/05/12 04:17
>>610
OSは何使っているの?

612 :デフォルトの名無しさん:02/05/12 04:18
既出や板違いだったらすいません。
私はプログラミング知識ゼロの超ド素人です。
最近C言語でゲームを作りたいと思いまして、C言語を覚えようと思ってます。
覚えながら作る(作りながら覚える?)ようにしたいんですが、
必要なモノ、あると良いモノがあったらお教え下さい。
あとわかりやすい書籍なんかも教えていただけると幸いです。

613 :デフォルトの名無しさん:02/05/12 04:20
>>612
コンパイラは>>2-3をみて。
エディタはなんでもいい・・・・と思う。強調表示できれば尚よいけど。

614 :デフォルトの名無しさん:02/05/12 04:22
>最近C言語でゲームを作りたいと思いまして、C言語を覚えようと思ってます。

気のせいだかわからんがこういう台詞を聞くのは50回目くらいだな
いや、別にいんだけどね。

615 :613:02/05/12 04:32
強調表示よりも自動的に字下げしてくれる機能の方が便利だな。

616 :デフォルトの名無しさん:02/05/12 04:38
>>614
50回か・・・年季が入ってるね。
俺はまだ10回くらいかな。

617 :デフォルトの名無しさん:02/05/12 04:39
C 言語でゲームというと数当てなどだろうか。

618 :デフォルトの名無しさん:02/05/12 04:49
1スレッド2回半くらいで50回になっちゃうよ、<19>までくると。

619 :デフォルトの名無しさん:02/05/12 04:51
C言語まではいいがWin32、C++、DirectXと
進むにつれて挫折すること請け合いだ。

620 :デフォルトの名無しさん:02/05/12 04:51
ココで聞いてみていいものかどうか・・

> float 32ビット (IEEE754)浮動小数点数
> ±3.40282347E+38 〜 ±1.4E-45と0, ±無限大Infinity、非数NaN

つまり float の最大値最小値て幾らなんですか?
C言語勉強しててふと疑問に思ったんですが・・・
上に引用した説明がつまりよくわかりません。


621 :デフォルトの名無しさん:02/05/12 04:55
>>620
表現したい値による

622 :デフォルトの名無しさん:02/05/12 04:59
>>620
floatに最大値、最小値はあまり意味がない。
有効桁数のほうが重要。

623 :わーい:02/05/12 05:17
>>612
C言語を独学でやるつもりなら、
大きな本屋に行って「〜入門」系の本を立ち読みでもして、
自分でこれなら良いかもって思うくらいのやつが見つかるまで買わない
っていうのが良いと思うけど。最初は本屋で勉強するつもりで。高いしね。
このスレの最初の方に良いのが書いてあるのかもしれないけど…

624 :デフォルトの名無しさん:02/05/12 05:57
>>620
なにが知りたいのかよくわからないが、IEEE754のはそのとおり。
あなたの処理系がIEEE754を採用しているかは知らん。
そのC処理系での値なら、採用している表現に関わらずfloat.hに
いろいろ書いてある。limits.hの実数版ですな。引用したのがよくわからないとのことだが、旧2種(なんていうんだか
いまだに覚えられない)についてのページをあたってくれたまい。

625 :デフォルトの名無しさん:02/05/12 06:10
>float の最大値最小値
>±無限大
などといまさら言ってみる。

626 :デフォルトの名無しさん:02/05/12 06:33
#define A(s) B(s)
#define B(s) X##s
#define E C + D
A(E) ;
B(E) ;
でコプリセッサに通すと
XC + D ;
XE ;
になったりする謎の多いbccでした
ちなみに、bccを持ってる人は、これに
#define XC 10
を追加して試した後
#define C 2
を追加して試すと更に謎が深まりますので
暇な方はレッツチャレンジ♪
#define XE A(E)
を追加するのもお勧め♪

627 :626:02/05/12 06:46
#define XE A(E)
は、ちょっとした勘違いで、そこに至るまでの
過程を別にすれば不思議はありませんでした(汗)

628 :デフォルトの名無しさん:02/05/12 07:13
まず、visualc++をたちあげてから
うまく使えない。
俺はDQNだ、鬱。
どうやったら
Cが書けるのか。

629 :デフォルトの名無しさん:02/05/12 07:17
Borland C Compilerを使え
簡単だ

630 :デフォルトの名無しさん:02/05/12 09:10
>>626
コプリセッサって何?

631 :デフォルトの名無しさん:02/05/12 09:11
>>630
地球連邦軍が開発したと言われる幻のガンダムのことだ。

632 :デフォルトの名無しさん:02/05/12 09:12
>>631
なるほど。

633 :デフォルトの名無しさん:02/05/12 11:12
>>620
"浮動"小数点というくらいだから最大値、最小値ともに表現次第で不定なんだろうな。
よく分からないけど。

634 :デフォルトの名無しさん:02/05/12 11:13
>>633
けど、ビット数的な制約はあるよね。

635 :デフォルトの名無しさん:02/05/12 11:17
>>634
うん。
無限ということは絶対にありえない。でもdoubleなら滅多に桁数が足りなくなるという事態は訪れないよな。
long doubleなんて実際に使うのかしら。

636 :デフォルトの名無しさん:02/05/12 11:25
複数の文字列を連結しようとするとき、
sprintf(buf, "%s%s%s", str0, str1, str2);
とした場合、str0〜str2の中に漢字が含まれ、その漢字に%を表すバイトが
含まれていると期待した結果にはならないと聞きました。
漢字を含む文字列を連結する定石を教えてください。
一つずつstrcatするのでしょうか…

637 :デフォルトの名無しさん:02/05/12 11:27
初耳です・・・。

638 :デフォルトの名無しさん:02/05/12 11:27
>>636
>一つずつstrcatするのでしょうか…
取りあえずこっちの方が絶対安全だね。
こっちの方が早いだろうし

639 :デフォルトの名無しさん:02/05/12 11:27
>>636
まあ確かに%と同じ文字コードが含まれていたらだめだねぇ・・・・
ひとつずつstrcatするしかないんじゃない?

640 :639:02/05/12 11:28
文字コードがEUC-JPだったら確かASCIIの%とはかぶらなかったような・・・・

641 :デフォルトの名無しさん:02/05/12 11:29
>>604

>>607の補足

Ctrl+Z または Ctrl+D を入力することにより、OSがそれ以上の入力を受け付けなくなる。
入力が無くなったため、getchar が EOF を返す。
決して、Ctrl+Z または Ctrl+D そのものが C言語の EOF というわけではない。

642 :639:02/05/12 11:31
ん?
%が含まれているとまずいのはフォーマット文字列だけだよね?

643 :デフォルトの名無しさん:02/05/12 11:32
>>642
俺もそう思ったけど取りあえずstrcatは確実だから奨めた。
確認するの面倒かつコンパイラ無い。

644 :デフォルトの名無しさん:02/05/12 11:34
>>636
キミは嘘を教えられています!要注意!
str0〜2の中に % が含まれていても全然普通に動作します。

それはそれとして、連結後の文字列が buf のサイズより長くならないように注意すれ。

645 :639:02/05/12 11:36
>>644
だよね。
危ない危ない・・・間違うところだったよ。

646 :637:02/05/12 11:36
良かった(;´ー`)無知をさらけ出したかと思ったよ。

647 :デフォルトの名無しさん:02/05/12 11:43
sprintfする時に必要なバッファのサイズが実行してみるまで分からないってことがありますよね?
そういうときはどうするのが最も良いのでしょうか。

私は、tmpfileしてからそれにfprintfで書き込み、返ってきた値に1足した数分、mallocするという方法を
考えたのですが、はっきり言って無駄が多すぎると思うんです。

648 :デフォルトの名無しさん:02/05/12 11:46
>>647
strncat()

649 :デフォルトの名無しさん:02/05/12 11:48
>>648
それは単に連結するだけですよね・・・?

650 :636:02/05/12 11:49
あ、、こうやれば漢字じゃなくても自分で確認できた…
sprintf(buf, "%s%s%s", "hoge", "%%", "hoge");
すいません、お騒がせしました。
(聞いたというのはたしかC系のスレで見たということなんですが、
どこだったかな…この過去スレか、Win32APIスレあたりだと思うんですが。)


651 :デフォルトの名無しさん:02/05/12 11:49
>>648
そりゃまずい。例えば%18.16fなどで桁数がどばっと増える時のことを
>>647さんは言っているんじゃない?

652 :デフォルトの名無しさん:02/05/12 11:54
_scprintfはダメなの?

653 :デフォルトの名無しさん:02/05/12 11:54
>>647
> 私は、tmpfileしてからそれにfprintfで書き込み、返ってきた値に1足した数分、mallocする
の部分を、ファイルに書き込まずに初めからmallocすれば・・・?

654 :デフォルトの名無しさん:02/05/12 11:57
>>653
mallocでいくら確保すればいいかわからないってことでしょ?
文字列だけなら簡単なんだけどね。

655 :デフォルトの名無しさん:02/05/12 12:00
/dev/nullかNULに(v)fprintfで書き込めば
サイズくらい分かるだろう


656 :652:02/05/12 12:02
_scprintfじゃダメなのか教えてくれよ(;´Д`)
確か前にも同じような話してたし、
もし_scprintfが移植性無いんなら使わないようにしなきゃジャン。

657 :デフォルトの名無しさん:02/05/12 12:13
>>656
Windows95じゃダメみたいだけど
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrf_scprintf_scwprintf.asp

658 :デフォルトの名無しさん:02/05/12 12:13
_で始まる名前の関数は*すべからく*環境依存の関数。

659 :デフォルトの名無しさん:02/05/12 12:18
>>657
わぉ!マジでWin95が入ってない!
>>658
たとえば>>657のリンク先の互換性にANSIとあっても、
動かないことはありうるってことですね。

どちらもサンクス。

660 :デフォルトの名無しさん:02/05/12 12:21
>>659
ANSI準拠の関数には_から始まるものはないだろ?
POSIX準拠の関数にもなさそう。

661 :デフォルトの名無しさん:02/05/12 12:29
>>656
なんだよ_scprintfって。思い切りVC++専用じゃねえかよぅ。

662 :デフォルトの名無しさん:02/05/12 12:29
アマチュア10年プロ10年、様々な環境下でC/C++でプログラムを書いてきたが
正直言って_scprintfは初めて聞いた。

なんだそりゃ

663 :デフォルトの名無しさん:02/05/12 12:30
>>647
int size = snprintf(NULL, 0, "%d", i);
char* buf = malloc(size+1);
sprintf(buf, "%d", i);
free(buf);

664 :デフォルトの名無しさん:02/05/12 12:31
_で始まる名前は処理系依存だとANSIで定められている。
よってANSIに対する互換性アリ、ってことか?(w


665 :デフォルトの名無しさん:02/05/12 12:34
>>664
ANSI互換と書いてないものもある。
何を基準に決めてるのかはM$に聞いておくれ。

666 :デフォルトの名無しさん:02/05/12 12:35
>>664
.NETのunmanageみたいなもんかね。


667 :デフォルトの名無しさん:02/05/12 12:37
>>663
snprintfもANSI規格ではないが、Windows系では標準のようだ。でも
UNIXではどうなの?

668 :デフォルトの名無しさん:02/05/12 12:38
>>667
ISOなんとかに準拠でしょ?

669 :デフォルトの名無しさん:02/05/12 12:41
snprintf は C99 標準のライブラリ関数です。 gcc にもあります。

670 :デフォルトの名無しさん:02/05/12 14:15
MFCとかはsprintfの結果文字列長は自力計算してるね。

671 :デフォルトの名無しさん:02/05/12 14:36
>>669
C99・・・・・時期早々だな

672 :デフォルトの名無しさん:02/05/12 15:16
sprintf()で用意するバッファのサイズについては
C FAQでも取り上げられていましたね。

あと、かんけいないが、すべからくの意味は
すべて*ではない*です>>658

673 :デフォルトの名無しさん:02/05/12 16:05
時期尚早。。。

674 :デフォルトの名無しさん:02/05/12 16:21
exit(0)てどういう意味ですか?

675 :デフォルトの名無しさん:02/05/12 16:21
>>671
いいのだ!自分はそんなこと気にしないのだ!
snprintf も uint32_t も __func__ も使いまくり!
可変長配列も使いたいところだが、gccにしか実装されてなくて・・・

676 :デフォルトの名無しさん:02/05/12 16:23
>>674
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/exit.3.html

677 :674:02/05/12 16:29
>>676
ありがとうございます。でもなに書いてるのかわかりません。

678 :デフォルトの名無しさん:02/05/12 16:43
コンパイラのgccとccって違うんですか?

679 :デフォルトの名無しさん:02/05/12 16:44
>>677
正常にmain関数を終了した事と同じになると思われ。

680 :デフォルトの名無しさん:02/05/12 16:45
どうでもいいけど
>>672
すべからくは*すべて*という意味で、
その後ろに否定の言葉を欲しがるだけでは?

681 :デフォルトの名無しさん:02/05/12 16:55
このスレは*すべからく*の意味を考えるスレになりますた。

682 :デフォルトの名無しさん:02/05/12 16:57
すべからく[須らく] 意味:ぜひとも
全てという字ではないよ。

683 :デフォルトの名無しさん:02/05/12 16:59
では知ったか>>672>>680はすべからく逝ってください。

684 :デフォルトの名無しさん:02/05/12 17:17
このあたり、岸田自らが立脚する
「唯幻論」そのものという感じであるがもっとズサンな所は他にもある。
岸田はケンカについて、こう言う。
「日本人のけんかというのは、すべからく『怨みを晴らす』という形」。
意味不明の日本語だ。
岸田は「すべからく」を「すべて」の高級表現だと思っているのである。
「すべからく」は漢字で書けば「須らく」で、意味は「ぜひ(〜をせよ)」であり、
つまり「すべからず」の反対語である。
早大文学部卒、和光大数授(「教授」の誤植だろうな、単なる)の岸田センセは、
本書の中で日本語の動詞の語尾変化についても論じていらっしやるが、
「ク語法」(高校古文で習う)については御存知ないらしい。
否、センセだけを非難してはいけない。
管見の範囲では、評論家・上野昂志、同・川本三郎、演劇家・唐十郎、
詩人・鈴木志郎康などが「須らく」を「全て」の高級表現と思い込んで使っている。
この四人に共通することは、いわば反権威・反規範主義である。
そういった人たちが文法規範に無知であること自体はかまわないとしても、
「全て」と平易に言えばすむものを、高級表現だと思って誤用する心は
皇室と縁組したがる成金のようで、卑しい。
その卑しさがファシズムを生んだとするのが、単純化して言えば、
心理学者・フロムの説である。
そこまで見すえた時、初めて、個別科学である心理学が、説明原理を支える一柱となりうるのだ。

685 :デフォルトの名無しさん:02/05/12 17:22
頭痛が痛いでふ。

686 :デフォルトの名無しさん:02/05/12 17:24
頭が割れるようにかゆいでふ。

687 :デフォルトの名無しさん:02/05/12 17:26
こ「岸「意岸「つ早・・・??
意味わからんぞ、ゴルァ!

688 :デフォルトの名無しさん:02/05/12 17:29
うーむ、さすが言語スレだなぁ
と、スレ違いを受け入れてみるテスト。

689 :デフォルトの名無しさん:02/05/12 17:31
もとい板違いを

690 :デフォルトの名無しさん:02/05/12 17:34
わからないとき、ヘルプを読む癖はついてても
国語辞書を引く癖はついてないのかな?

691 :デフォルトの名無しさん:02/05/12 17:38
英和は引くけど国語はねぇ。
なまじわかってるつもりなだけにはまると痛いよねぇ。

692 :デフォルトの名無しさん:02/05/12 17:40
#define nelem(x) (sizeof(x)/sizeof ((x)[0])) って配列にしか使えないんですよね。 ポインタだと確か駄目ですよね。 どうも好きになれないんですが良く使われている物なんでしょうか。

693 :デフォルトの名無しさん:02/05/12 17:41
#define nelem(x) (sizeof(x)/sizeof ((x)[0]))
って配列にしか使えないんですよね。
ポインタだと確か駄目ですよね。
どうも好きになれないんですが良く使われている物なんでしょうか。

694 :デフォルトの名無しさん:02/05/12 17:45
#define lengthof(arr)
という形で使ってるけど、わりとよく使われるのでは?

695 :デフォルトの名無しさん:02/05/12 17:47
初心者ですが、
getpwnam()とかで確保されたstruct passwdの領域って解放しなくていいの?


696 :695:02/05/12 18:08
getpwnam()じゃなくてもいいんですが、内部的にstaticで記憶されてる
領域なので、使わなくなっても確保されたままになってしまいますよね。
これがメモリリークというか無駄使いになってしまうように思うんですが。
どうなんでしょう。


697 :デフォルトの名無しさん:02/05/12 18:08
sizeof(x) って配列にしか使えないんですよね。 ポインタだと確か駄目ですよね。 どうも好きになれないんですが良く使われている物なんでしょうか。

698 :デフォルトの名無しさん:02/05/12 18:10
>>697
ポインタでも使えるけど・・・・?
ところで、括弧をつけるのは型の大きさを得る時だけだよ。

699 :デフォルトの名無しさん:02/05/12 18:10
>>696
メモリリークとは、動的に確保した領域を指すポインタが失われる事を指すから、
静的な領域ならメモリリークとはならないと思うよ。

700 :デフォルトの名無しさん:02/05/12 18:11
printf("Hello world.\n") の "Hello world.\n"の部分は内部的にstaticで記憶されてる
領域なので、使わなくなっても確保されたままになってしまいますよね。
これがメモリリークというか無駄使いになってしまうように思うんですが。
どうなんでしょう。

701 :デフォルトの名無しさん:02/05/12 18:11
>>697
int *p;とあって、

sizeof(p);
sizeof(*p);

の意味は違うよ。注意。

702 :デフォルトの名無しさん:02/05/12 18:12
>>700
をいをい、それがメモリリークだとしたら、実際のプログラムのほとんどが
メモリリークだらけになってしまうじゃないか。

703 :デフォルトの名無しさん:02/05/12 18:13
>>700
メモリリークは開放できなくなった領域のことでしょ?
mallocで得た領域へのポインタをfreeする前に見失うとか。

704 :デフォルトの名無しさん:02/05/12 18:15
ところでなんで君らはマジレスしてるんですか?

705 :697,700:02/05/12 18:16
俺はわかってるよ。頼むから、>>692>>696に言ってくれよ。

706 :デフォルトの名無しさん:02/05/12 18:16
>>700
それがどうしても無駄に感じるのなら、文字列はすべてファイルに入れておき、
必要になったらmallocした領域に読み込み、不要になったらすぐfreeするしか
ないぞ。それこそ時間の無駄。

707 :デフォルトの名無しさん:02/05/12 18:17
このスレはピュアな心のやつが多いのか・・・

708 :デフォルトの名無しさん:02/05/12 18:18
>>705
ああ、答える代わりに、揶揄していたのか。

709 :デフォルトの名無しさん:02/05/12 18:24
>>705
質問してる人にその内容で質問返しするともっとわかりやすかったかも。

710 :695:02/05/12 18:30
レスくれた皆さん、どうもです。
staticな領域の解放なんて考えなくていいんですね。

711 :デフォルトの名無しさん:02/05/12 18:53
>>710
そうそう。でも一度も使わなかったら警告を出すコンパイラがあるから、
一度は使うようにね。

712 :デフォルトの名無しさん:02/05/12 18:55
getch って何て読むんデスカ?

713 :デフォルトの名無しさん:02/05/12 18:56
>>712
げっち

714 :デフォルトの名無しさん:02/05/12 19:00
>>712
ゲットチ(藁

715 :デフォルトの名無しさん:02/05/12 19:04
ゲチ

716 :デフォルトの名無しさん:02/05/12 20:07
げっちゅう

717 :わーい:02/05/12 20:10
>>716に一票

718 :デフォルトの名無しさん:02/05/12 20:11
>>717はユンピョウ

719 :デフォルトの名無しさん:02/05/12 20:17
むしろ>>716を無理矢理標準的な読み方として広めたい

720 :デフォルトの名無しさん:02/05/12 20:22
2,3年世間とずれてるスレはここですか?

721 :デフォルトの名無しさん:02/05/12 20:27
なんだかヴォエーな人を思い出した

722 :デフォルトの名無しさん:02/05/12 21:33
void put(FILE * fp,char * data[])
{
char temp[MAX];
int i=0;


while((fscanf(fp,"%s",temp))!=EOF)
{
data[i]=malloc(strlen(temp)+1);

if(data[i])
{
strcpy(data[i],temp);
}

i++;

}

}
なぜmallocでエラー?

723 :デフォルトの名無しさん:02/05/12 21:36
俺はstrlenでトんでるとおもうが。

724 :デフォルトの名無しさん:02/05/12 21:38
test.o(.text+0x26df): undefined reference to `sqrt'
collect2: ld returned 1 exit status

gcc でコンパイラオプションを
-O2
にするとリンクで上のエラーが出て、
-O3
だと成功します。理由はなんでしょうか?

725 :デフォルトの名無しさん:02/05/12 21:42
画面に出力した文字って消せる?
一文字だけ。

726 :デフォルトの名無しさん:02/05/12 21:42
*data[] -> **data
だとすると、

*data[i] = malloc();//つぅかキャストしてやれよ。
なのかなぁ?

727 :デフォルトの名無しさん:02/05/12 21:43
スレ違いのような気もするが

>>724
sqrt()の返り値を使っていない、とか。
あるいはgcc -O3だとsqrt()が定数の場合はコンパイル時に
解の定数に置き換えている、とか。

728 :デフォルトの名無しさん:02/05/12 21:49
>>727 レスありがとうございます。
計算部分は
bunsan = sum / (term -1);
hensa = sqrt(bunsan);
こんな感じなので定数に最適化はされないはずなのですが。
もう少し色々実験してみます。

729 :デフォルトの名無しさん:02/05/12 21:55
main()
{
char a[10]="ohayou";
char *pa;

pa="oha";

printf("%s",a);
printf("%s",pa);
}
はできるのに

main()
{
char b[10];

b="ohayou";

printf("%s",b);
}
はできないのはなんでですか?

730 :デフォルトの名無しさん:02/05/12 21:58
>>729
だってアレ初期化時のみに有効だし。
初期化終わればただのBYTE型の配列と等価。

731 :  :02/05/12 22:13
プログラムする時に口には出さないけど頭の中で「printf」や「int」などって何て読んでますか?


732 :デフォルトの名無しさん:02/05/12 22:15
アホか・・・

733 :デフォルトの名無しさん:02/05/12 22:15
>>731
ぷりんとふ
いんと

口に出すときは

ぷりんとえふ
いんと

734 :デフォルトの名無しさん:02/05/12 22:19
intっていんと以外に読み方あるのか?汗

735 :デフォルトの名無しさん:02/05/12 22:20
いんてじゃ〜


736 :デフォルトの名無しさん:02/05/12 22:21
画面に出力した文字って消せる?
一文字だけ。

737 :デフォルトの名無しさん:02/05/12 22:21
>>734
>>731の周り(もしくは本人)に

「ここのアイエヌティー変数が変なんだよ。ここをアイエヌティーのポインタ変数にしなくちゃ。」

と調子こいているバカがいるのでしょう。


738 :デフォルトの名無しさん:02/05/12 22:21
>>729
char a[]="oha";は、char a[]={'o','h','a','\0'};を手っ取り早く書くための特例。

739 :デフォルトの名無しさん:02/05/12 22:21
>>734
インテジャー

740 :デフォルトの名無しさん:02/05/12 22:22
>>737
インテジャーと読む人がいると思うけど・・・
俺もたまにそう言う。

741 :デフォルトの名無しさん:02/05/12 22:22
>>736
putchar('\b');
できるとは限らないけど。

742 :デフォルトの名無しさん:02/05/12 22:24
イントでもインテジャでもどっちでもいいだろ。好きな方で読め。

743 :729:02/05/12 22:36
>>730
>>738
ええと、char a[10]="ohayou"; ていうのが特例であって
pa="oha"; やb="ohayou"; は
配列の先頭アドレスを代入しているという事ですか?
bはポインタじゃないからできないと。

""を使うと配列の宣言なしに配列が使えるわけですか?

744 :デフォルトの名無しさん:02/05/12 22:41
>>743
char型の配列は主として文字列を表すのに使うから、配列宣言時の初期化のみ、
="aaa"が={'a','a','a','\0'}と同じものだと見なされるの。あくまでも特例。

それ以外の時は文字列リテラルの先頭アドレスを代入することになるので、
配列名には代入できない。

745 :729:02/05/12 22:42
>>744
ありがとうございました。
もっと勉強します。

746 :744:02/05/12 22:43
代入したかったらstrcpyを使うこと。

747 :デフォルトの名無しさん:02/05/12 22:43
<=>

748 :デフォルトの名無しさん:02/05/12 22:59
>>722
一行の文字数がMAX - 1文字を超えているとか。その場合は
fgets(temp, MAX, fp);で。

749 :デフォルトの名無しさん:02/05/12 23:11
>>736
改行してなかったら、printf("\b \b");
でいけると思う。

750 :デフォルトの名無しさん:02/05/12 23:26
i = i++; は「未定義」らしいですが、「未定義」というのは、例えばこの文に対して abort を呼び出すようなコードを生成しても構わないってことで解釈合ってるでしょうか。

751 :750:02/05/12 23:28
・・・ふと思ったんですが、どうせならコンパイル時にエラーにしちゃったらダメなんでしょうか?

752 :デフォルトの名無しさん:02/05/12 23:33
>>750
i = i;
i = i + 1;

って解釈されないの?それ。

753 :デフォルトの名無しさん:02/05/12 23:42
>>752
そうとは限らない。=演算子の右辺と左辺はどちらを先に評価しても構わない
から、i = i;となってもよい。

754 :デフォルトの名無しさん:02/05/12 23:52
>>736
printf("\t\b\b");

755 :デフォルトの名無しさん:02/05/12 23:53
>>750
OSが壊れたりHDDから煙が吹いたりする処理系を出したとしても
とりあえずANSI準拠、K&R準拠をうたうことはできます。


756 :デフォルトの名無しさん:02/05/13 00:41
Regetなどの最近のダウンローダーのように、レジュームや、ファイルの分割ダウンロードによる高速化について
書かれた書籍や、Webサイトありませんか?

757 :デフォルトの名無しさん:02/05/13 00:42
>>756
なんでここで聞くんじゃーー!!

758 :デフォルトの名無しさん:02/05/13 00:43
>>756
>Regetなどの最近のダウンローダーのように、レジュームや、ファイルの分割ダウンロードによる高速化について

曲がりなりにもプログラマなら推測できるだろ。

759 :デフォルトの名無しさん:02/05/13 00:45
分割すると速くなるのだろうか・・・・
ウェブサイトでも時々無意味に画像をスライスしているところをみかけるが。

760 :デフォルトの名無しさん:02/05/13 00:45
c言語でcgiプログラムを作るのはどうでしょうか?
メリット・デメリットなどがありましたら教えてください。

761 :デフォルトの名無しさん:02/05/13 00:46
>>760
メリット:高速。
デメリット:文字列操作が大変。可変長文字列対応してないし。

762 :デフォルトの名無しさん:02/05/13 00:47
>>760
スクリプト言語に比べてインタープリタを起動しないのでその分の負荷は減る。

763 :デフォルトの名無しさん:02/05/13 00:47
>>759
サーバがこちらの通信速度未満に帯域制限している
場合有利。


764 :デフォルトの名無しさん:02/05/13 00:48
>>763
ああ、なるほどね。

765 :デフォルトの名無しさん:02/05/13 00:49
この前Cでチャットを作ってみたけど、確かに速かった。
でもそれは機能が少ないからのような気がする・・・・

766 :デフォルトの名無しさん:02/05/13 00:52
つか未だにCのcgiに非対応な鯖もあるので注意

767 :デフォルトの名無しさん:02/05/13 00:53
>>766
無料ならほとんど使えない。

768 :767:02/05/13 00:54
鯖と全く同じ環境をつくって、ローカルでコンパイルしてからアップすれば使えるかもしれんが・・・・

769 :デフォルトの名無しさん:02/05/13 00:56
xreaはLinuxでコンパイル済み(これも曖昧だが)のファイルが使える。
とくとくはtelnetでcc使えたはず。

770 :デフォルトの名無しさん:02/05/13 00:58
>>766
Cだとシステムの弱点をついたウィルスを簡単に作れるので、鯖会社も
嫌がる罠。

771 :デフォルトの名無しさん:02/05/13 01:01
>>770
というか、コマンドを実行できるようにするのが嫌なんでしょ。
コンパイルにはコマンド実行が必須だからねぇ。。

772 :デフォルトの名無しさん:02/05/13 01:14
>>771
adminの権限を乗っ取ったらやりたい放題だもんね。

773 :デフォルトの名無しさん:02/05/13 01:18
>>772
頼む、rootと言ってくれ。。。

774 :デフォルトの名無しさん:02/05/13 01:21
ルート16ターボ

775 :デフォルトの名無しさん:02/05/13 01:21
>>773
UNIX鯖とは限らないし〜と言ってみるテスト。
Win鯖なんか使いたくないけどな。

776 :デフォルトの名無しさん:02/05/13 01:23
則巻ターボ

777 :デフォルトの名無しさん:02/05/13 01:31
fw3

778 :デフォルトの名無しさん:02/05/13 15:26
bcc32 languageC.cpp glibw32.lib

779 :デフォルトの名無しさん:02/05/13 21:27
すいません教えてください。
バイナリファイルにデータを入力する際に
ソートして入れたいんですが(比較するのは入っているデータ
バイナリファイル上でひとつずつ比較していくのと
比較するデータとされるデータをメモリに格納してから
計算するのではどちらが効率的なのでしょうか?



780 :デフォルトの名無しさん:02/05/13 21:30
>>779
ファイル + に 

だと出力するものだと思う。

781 :デフォルトの名無しさん:02/05/13 21:36
比較しながらメモリに格納してそのまま書き出すのが早いと思う

782 :やばいっすよ!!:02/05/13 21:59
整数を3つ入力→数の小さい順に出力
これはif文を使って作るものなんですか??

783 :デフォルトの名無しさん:02/05/13 22:01
>>782
つぅかお前は誰だ?

784 :やばいっすよ!!:02/05/13 22:04
>>783
明日プログラムのテストを控えた者です。工房です。

785 :デフォルトの名無しさん:02/05/13 22:09
ならネットで遊んでないで勉強しなさい。

786 :デフォルトの名無しさん:02/05/13 22:10
>>782
そんなお前に大ヒントだ。

クイックソートと言うキーワードで検索だ!
これで友達よりlogx分速いプログラムが書けるぞ!


787 :デフォルトの名無しさん:02/05/13 22:20
>>779
メモリ領域があまりとれないなら、データを順方向に探索するだけでソート
できる、マージソート法というのがあります。一時的にランファイルという
作業ファイルを作成する必要がありますが、ほとんどメモリを食わずに
クイックソートと同じオーダーでソートできます。

ただし、ファイルの入出力を伴うので、ファイルキャッシュが効かないと激遅
になりますが。

788 :デフォルトの名無しさん:02/05/13 22:24
まさに牛刀をもって鶏を割くってやつだな(笑)

789 :デフォルトの名無しさん:02/05/13 22:34
別にメモリに作業領域を持ってもいいと思うんだが。
それから、平均的にクイックソートより遅いです
唯一の利点は安定である事だけ。



790 :デフォルトの名無しさん:02/05/13 22:36
>整数を3つ入力→数の小さい順に出力
入力時に並び換えろ

791 :やばいっすよ!!:02/05/13 22:40
>>785
はい。頑張りまっす。
>>786
クイックソートって良さげっす!!テスト終わったらじっくり勉強したい。

・・・・・ということで

792 :やばいっすよ!!:02/05/13 22:42
>>790
それって詐欺ではないですか・・??

793 :デフォルトの名無しさん:02/05/13 22:45
>>792
アホか。基本的な事だぞ。

794 :デフォルトの名無しさん:02/05/13 22:49
>>789
もちろんメモリに全部読み込んでqsortかけるのが多分一番速いですね。

795 :ななし:02/05/13 22:52
>>782
3行で書かないと減点される罠

796 :COMPILER:02/05/13 22:54
16ビットのDOS汎用コンパイラの入手方法を教えてください。

797 :デフォルトの名無しさん:02/05/13 22:55
>>796
google

798 :デフォルトの名無しさん:02/05/13 22:56
LSI-Cを検索

799 :やばいっすよ!!:02/05/13 22:56
ぐおおおおおおおおおおおおお!!!!!!!!!!!!まじでやばすっぎる!!!!!!!
プログラムは高得点あきらめて英語じゃ。
ということで世話になりました。テスト終わったらまた来ます。

800 :デフォルトの名無しさん:02/05/13 22:57
がんばれ

801 :デフォルトの名無しさん:02/05/13 22:58
つーか、そんなのは小学生のときにすでにやってたけど
当時はテストの点につながらなかったからなぁ。

あーでもあれか。今はテストの点につながるから
逆にプログラミングが苦痛になってたかも。

802 :COMPILER:02/05/13 23:02
>デフォルトの名無しさん

Micosoft C コンパイラの入手方法があれば教えてください。

803 :デフォルトの名無しさん:02/05/13 23:03
洒落だったんだが。。。 <クイックソート
そんな3つでクイックソートなんてしても得られるのはオーバーヘッドだけ・・・。

804 :デフォルトの名無しさん:02/05/13 23:04
骨董屋で買うとか
夢の島をひたすら探索するとか

805 :デフォルトの名無しさん:02/05/13 23:07
M$の16ビットのコンパイラってまだあったっけ?
MS-C7.0('94)あたりで終わってたような。

806 :デフォルトの名無しさん:02/05/13 23:08
>>802
持ってるけど君とは連絡手段が無いので無理だな。
開き直ってMXとかで探せや。

807 :デフォルトの名無しさん:02/05/13 23:11
VC1.52じゃなかったか?<最新
しかし、こんな骨董品エムエクースでも落ちてないと思われ

808 :デフォルトの名無しさん:02/05/13 23:18
>>805
M$は諦めてBC++Suiteでも拾いなされ。BC++5.02Jは16ビット対応だぞよ。

809 :デフォルトの名無しさん:02/05/13 23:36
LSICでいいじゃん

810 :デフォルトの名無しさん :02/05/14 00:29
C初心者です。
CでRDBのプログラム作ってます。
そこで、射影はできたんですけど選択、結合が作れません。
助言ください!よろしくおねがいします。

811 :デフォルトの名無しさん:02/05/14 00:42
質問はageましょう。

812 :デフォルトの名無しさん:02/05/14 01:58
>>802
WinME DDK を落としてくれば 16bit な MS-C が手に入る。

というか Micosoft って何よ。

813 :デフォルトの名無しさん:02/05/14 02:02
バージョンは?

814 :612:02/05/14 02:08
みなさん、ありがとうございます。
今のところ最高の目標としては「P/ECE」のソフトを作りたいと思ってます。
皆さんの助言をもとに頑張ります。

815 :デフォルトの名無しさん:02/05/14 02:10
P/ECEならLSICでもいいと思うんだが
Digital Mars
Watcom
も16bitのコンパイラあるし。
それから米BorlandのサイトにTurboC 2.01が落ちてるよ
ファイル名はTC201.zipかな

816 :デフォルトの名無しさん:02/05/14 02:24
WinME DDK 同梱の cl.exe のバージョンは 8.00x と表示された。

817 :デフォルトの名無しさん:02/05/14 06:26
巫女ソフトage

818 :デフォルトの名無しさん:02/05/14 13:59
ポインタのポインタの参照渡しってのちょっとわからないんです。
なんかコツのようなものってあるんですか?

819 :デフォルトの名無しさん:02/05/14 14:09
strtolの第二引数のように使えば

820 :デフォルトの名無しさん:02/05/14 14:14
818
呼び出し側にポインタを返すときつかう。
(関数へのポインタとかstaticな領域とかOSが割り当てた領域など
アドレス不変なポインタを返す)

821 :_:02/05/14 14:24
凡用系とオープン系の違いってなんですか?
これらの言葉意味って人によってまちまちですよね。


822 :デフォルトの名無しさん:02/05/14 14:34
>>821
ぼんようじゃない。汎用。は・ん・よ・う

823 :_:02/05/14 14:50
すみません・・・
汎用系でしたね。

特定のプログラムを組み込んで、ソフトを作ることですか?

824 :デフォルトの名無しさん:02/05/14 14:58
Cすれでホスト系聞くなよ

825 :デフォルトの名無しさん:02/05/14 15:00
>>824
じゃあどこで聞けばいいんだよ!
個簿留スレか?

826 :デフォルトの名無しさん:02/05/14 15:05
そもそも言語スレで聞くべきか?

827 :825:02/05/14 15:06
ちなみにあたいは>>821じゃないから。

828 :デフォルトの名無しさん:02/05/14 15:09
情シ板に逝こう
ム板なら初心者質問スレぐらいか

829 :デフォルトの名無しさん:02/05/14 15:32
gooooooooooooooooooogle!!

830 :デフォルトの名無しさん:02/05/14 15:47
汎用系→汎用機。
オープン系→UNIX、Linux、Windows

831 :デフォルトの名無しさん:02/05/14 17:21
>>825
逆ギレ?

832 :デフォルトの名無しさん:02/05/14 23:30
char mes[256];
int num=100;

このnumをmesに文字列としていれたいのですが,一番適切な方法とはどういうのでしょうか?

833 :デフォルトの名無しさん:02/05/14 23:31
boost::lexical_cast<>()

834 :デフォルトの名無しさん:02/05/14 23:32
832sprintf

833ヲイヲイ

835 :デフォルトの名無しさん:02/05/14 23:33
>>832
#include <stdio.h>
sprintf(mes,"%d",num);

836 : :02/05/14 23:36
Hyouji( 3, Onigiri.uni, 26, 21 );
Hyouji( 3, Onigiri.irura, 62, 21 );
Hyouji( 3, Onigiri.kaiware, 12, 21 );
Hyouji( 3, Onigiri.ninnniku, 1, 21 );
こういう場合
Hyouji( 3, Onigiri.uni, 26, 21 );
Hyouji( 3, Onigiri.irura, 62, 21 );
Hyouji( 3, Onigiri.kaiware, 12, 21 );
Hyouji( 3, Onigiri.ninnniku, 1, 21 );
こうしますか?

837 :デフォルトの名無しさん:02/05/14 23:37
>>836
ウニおにぎりとは贅沢な!!!

838 :デフォルトの名無しさん:02/05/14 23:39
>>836
どう違うの?(^_^;)

839 : :02/05/14 23:40
Hyouji( 3, Onigiri.uni, 26, 21 );
Hyouji( 3, Onigiri.irura, 62, 21 );
Hyouji( 3, Onigiri.kaiware, 12, 21 );
Hyouji( 3, Onigiri.ninnniku, 1, 21 );
こういう場合
Hyouji( 3, Onigiri.uni,   26, 21 );
Hyouji( 3, Onigiri.irura,  62, 21 );
Hyouji( 3, Onigiri.kaiware, 12, 21 );
Hyouji( 3, Onigiri.ninnniku, 1, 21 );
こうしますか?

840 :デフォルトの名無しさん:02/05/14 23:41
>838
ワラタ

841 :デフォルトの名無しさん:02/05/14 23:41
なんだ。ただの荒らしかよ。

842 :838:02/05/14 23:43
あぁ、、半角スペースが一つにまとめられていたのね・・・・
私はしないな。

843 :デフォルトの名無しさん:02/05/14 23:43
名前のない構造体を関数に渡すなにかよい、できれば移植性のある方法を教えてください。

844 :デフォルトの名無しさん:02/05/14 23:45
>>843
名前つけるかtypedefしろよ(ワラ
なんで名前をつけないんだよ(ワラ

845 :デフォルトの名無しさん:02/05/14 23:45
>>839
なんとなくわかった。
引数の列をそろえたいのね


846 :デフォルトの名無しさん:02/05/14 23:46
名前を付けると愛着がわいちゃって誰にも渡したくないじゃないですか

847 :デフォルトの名無しさん:02/05/14 23:46
>>844
 構造体がイパーイあるからです
 よろしくおねがいします

848 :デフォルトの名無しさん:02/05/14 23:47
>839
いかに無駄な努力かということがよくわかるな。
>843
名前くらいつけてやれ。減るものじゃないし。

849 :デフォルトの名無しさん:02/05/14 23:47
>>843は幼少の頃、孤児院にいたんだろ。
んで、名前が無い。そうなんだろ?
ネタは読めてるっつーの。

850 :デフォルトの名無しさん:02/05/14 23:55
>>843
union NAMAE{
struct{
int i;
char str[2222];
} hensu;
};

これでどうだ。
共用体の中に入れているから関数に渡せるぞ。

851 :デフォルトの名無しさん:02/05/14 23:59
>>843
void *で渡して、型キャストさせる。

852 :デフォルトの名無しさん:02/05/15 00:02
>>851
型名は?

853 :デフォルトの名無しさん:02/05/15 00:03
typedef
struct {
 char type_name[0xffffffff];
 void* p_struct;
} Type;

これでどうだ?

854 :デフォルトの名無しさん:02/05/15 00:04
>>847
俺もさ、関数が1000個とか2000個とかあると、こいつらにいちいち名前つけずに
すめばなーと思うことはあるよ。でもな、世の中そんなにうまくできてねーんだ。
名前つけなきゃ関数を区別する手段がないんだよ。
構造体だって同じことだ。
名前自動生成ツールでも作るなり、連番で名前付けるなりしてがんがれ。

なお、英和辞典の見出し語を頭から順番に使ってゆくという方法は、
予約語等とぶつかる可能性があるのでおすすめできない。

855 :デフォルトの名無しさん:02/05/15 00:05
lambda

856 :デフォルトの名無しさん:02/05/15 00:08
>>854
関数ならかんすうポインタでいいじゃん。
(*func[2000])();

857 : :02/05/15 00:16
結局 名前はいるじゃん


858 :デフォルトの名無しさん:02/05/15 00:58
マシン語埋め込めば名前は要らないと思われ

859 :デフォルトの名無しさん:02/05/15 01:15
>>854
「xより大きいなら非ゼロを返す関数」
(xは実行時に決まる)とか、
「行のn番目のフィールドを比較する関数」
(nは実行時に決まる)とか、動的に関数を
作りたいことがあるけど、Cなら名前つけざ
るを得ないなー。

関数型言語なら無名関数が作れるし、
オブジェクト指向言語ならインスタン
スを使えば良いけど。


860 :デフォルトの名無しさん:02/05/15 01:42
ttp://chizuru.bunkasha.co.jp/~yui/feb02.html#0226_3

「Cでは NULL == (void *)0 とは限らない」だそうですが、そうなんですか?

861 :843:02/05/15 01:43
>>858
じつは僕もハナからそれがいちばん強力な解だとは思いますが移植性が限り無くゼロなのでためらいます。ふと、みんなはどう考えるかと思って。
すみませんヒマつぶしノ質問だとおもって忘れてください>答えてくれたひとたち

862 :デフォルトの名無しさん:02/05/15 01:50
variantみたいなのにしてもいいが、
vtblっぽいのもたせて全部オブジェクトにするって手もある。

メンバを動的に追加する(この場合メンバに名前かIDをつける必要があるが)とか、
DBにデータを全部もたせてアクセスメソッドだけを提供するのも、有りだとは思う。

マクロを多用すれば品雑・定型的な処理も楽に書ける場合があるしね。
数が多いとはいっても、それぞれに意味はあるんだろう?


863 :342の初心者:02/05/15 05:15
この間は皆様にお世話になりました。
またまた質問です。
下のようなプログラムを作ってキーボードの入力をアスキーコードに変換して確認してみました。
半角英数記号はいいのですが、バックスペースやCtl + Cのようなものはどのようにして扱われているのでしょう?
下の場合、右矢印→もバックスペースも8として出力されてしまいます。

#include <stdio.h>

main()
{
int i;

for(;;) {
i = getch();
printf("%d\n", i);
}
}

864 :デフォルトの名無しさん:02/05/15 05:29
>>860
過去ログ読んでくれ。
3スレに一度はその手の論争が起きてるから。

865 :デフォルトの名無しさん:02/05/15 05:53
>>849
誹謀中傷になってて笑えない。

866 :デフォルトの名無しさん:02/05/15 06:35
>>843
 構造体を malloc で作って、そのポインタを渡すのは?
 参照渡しではなくなってしまうけど、渡せるよ。

 でも、移植性とか可読性考えると、無理にそんな方法取るのは馬鹿かと・・・アホかと・・・(^^;
 ネーミングは本当に大変だけど、考えてあげようよ?


867 :デフォルトの名無しさん:02/05/15 06:51
>>866
じゃあ私のソースを見ても笑わないでね(;_;)

868 :デフォルトの名無しさん:02/05/15 06:56
>>863
>>863
getchってなんじゃ〜
getcharだろ〜


(getchはMS-DOS専用の文字入力待機関数じゃなかった?入力した文字は読みとらなかったような・・・・)

869 :デフォルトの名無しさん:02/05/15 07:13
>>868
Win32でもサポートはされている。移植性は無いが。

870 :デフォルトの名無しさん:02/05/15 07:35
>>863
cursesにもgetchあるよ〜ん(by UNIX

# ローカルっちゃぁローカルかもしれんけどな

871 :870:02/05/15 07:37
あうち・・・>>863向けじゃくて>>868向けね(>>870)
寝ぼけてもうた:-P

872 :869:02/05/15 09:11
>>870
cursesかー。そりゃ知らんかった。FDcloneだと
・ttyからのread(2)でgetch()
・stdinのselect(2)でkbhit()
とかやってたから自前で実装するしか無いのかと思ってた。

873 :デフォルトの名無しさん:02/05/15 09:31
>>872
cursesのgetchは端末から文字を得る関数
>>868のそれとは振る舞いは別物
呼び名が一緒ってだけですな

874 :デフォルトの名無しさん:02/05/15 10:44
>>873
Windowsとかだとgetcheだよね?

875 :デフォルトの名無しさん:02/05/15 12:44
OpenFileMappingでマッピングしたデータは
fgetとかfreadとか利用して読んだりできますか?

876 :デフォルトの名無しさん:02/05/15 12:49
>>875
何のためのマッピングだと小一時間ほど問いたい。

877 :デフォルトの名無しさん:02/05/15 13:12
>>874
そうですね
気になってヘルプ引いたらgetchとgetcheは近似なようです
getch - キーボードから一文字読み込む エコーバック無し
getche - キーボードから一文字読み込む エコーバック有り
注・両方ともWindows conio関数のはなしです

878 :デフォルトの名無しさん:02/05/15 13:37
すいません、Cはじめてまだ数ヶ月の若造です。

MS-DOS で、キーボードからの入力が一定時間ないと
終了するプログラムを作成したいのですが、やりかたが分かりません。
どなたか分かる方、教えていただけないでしょうか?

879 :デフォルトの名無しさん:02/05/15 14:15
int型をchar型に変換してchar型の変数に入れたいんですが
int p = 1;
char s;
s = (char)p;
上みたいなことは出来ませんでした。
atoiのようなint型をchar型に変換する関数ってないのでしょうか?

880 :デフォルトの名無しさん:02/05/15 14:17
>>879
別にそのコードで出来るんじゃない?

881 :デフォルトの名無しさん:02/05/15 14:19
ひょっとして、
s = p + '0';
みたいなことがやりたいのか……?

882 :デフォルトの名無しさん:02/05/15 14:35
>>879
C++使え。
s = char (p);
ってな具合にint型をchar型に変換するchar()関数がある。

883 :879:02/05/15 14:38
構造体のメンバに入れたいんですが
typedef struct{
char code[15];
char name[30];
}syouhin;

syouhin data[50];

↓main関数外にて
int i;
for(i=0;i<50;i++){
(data + i)->code[0] = ()i;
}
大体やりたいこと書くとこんな幹事です。
構造体だからまずいとかですかね?

884 :879:02/05/15 14:40
>>882
C++は使えないんですよ。
事情が合ってLinuxでC言語使ってmす。
もしかしてLinux板で聞けってやつですか?

885 :デフォルトの名無しさん:02/05/15 14:41
ハァ?

886 :デフォルトの名無しさん:02/05/15 14:43
>>879
つーかできねーって言い張るんならその根拠(エラー、出力内容とか)を説明しろよ。

887 :256:02/05/15 14:47
sprintf(data[i].code, "%d", i);
だろ。↑文字列が閉じてない。


888 :デフォルトの名無しさん:02/05/15 15:01
typedef struct {
double re;
double im;
} complex;

complex SUMofCOMP(x,y)
complex x,y;
{
complex t;
t.re = x.re + y.re;
t.im = x.im + y.im;
return(t);
}

main()
{
double a,b;
complex c1,c2,c3;
scanf("%f%f",&c1.re,&c1.im);
scanf("%f%f",&c2.re,&c2.im);

c3 = SUMofCOMP(c1,c2);
printf("%f,%f\n",c3.re,c3.im);
}

これを実行して適当に値を入力すると
Floating point exception (core dumped)
が、返って来る。

なぜじゃ・・・

889 :デフォルトの名無しさん:02/05/15 15:02
doubleに%fって問題ないの?

890 :888:02/05/15 15:11
あ。
%lfにすればできるかも。

鬱死

891 :デフォルトの名無しさん:02/05/15 15:12
complex SUMofCOMP(x,y)
complex x,y;
{
...
}
懐かしいような気が

892 :デフォルトの名無しさん:02/05/15 15:12
>>879
>>887がほしかった答ならば、iを10進表記した文字列を取得するには?
と、きけばよかったようですな。
元の質問をそのまま素直に解釈するとたしかにああいう答が返ってくる。

ところで>>882のは関数じゃなくて、C++のキャストの記述法だったと思うが?もちろんC++でも従来の記述法も可能。

893 :デフォルトの名無しさん:02/05/15 15:20
>>892
よく分からんのだけど>>882はcharのコンストラクタじゃないかな

894 :デフォルトの名無しさん:02/05/15 15:21
型変換関数

895 :デフォルトの名無しさん:02/05/15 15:25
typecast?

896 :デフォルトの名無しさん:02/05/15 16:19
>>893
ただの cast。

897 :デフォルトの名無しさん:02/05/15 17:20
C言語の標準入力のバッファを直接参照できるような
関数ないし手段がありましたらぜひとも教えてください。


898 :デフォルトの名無しさん:02/05/15 17:22
>>897
stdin開いてメモリマッピング。

899 :デフォルトの名無しさん:02/05/15 18:04
>>898
そういえば、stdin とかは FILE 構造体でしたね。
ありがとうございます。

900 :デフォルトの名無しさん:02/05/15 18:07
(・∀・)900!
今日中に1000に逝くぞ!

901 :デフォルトの名無しさん:02/05/15 18:15
ともっち!


902 :デフォルトの名無しさん:02/05/15 18:16
ともっちのこと大好き!


903 :デフォルトの名無しさん :02/05/15 18:17
ともっちって確か絵を書くのが好きなんだよね。
筆でかり裏の辺りをちょこちょことしたりして、
いろりろ遊びたい。。

904 :デフォルトの名無しさん:02/05/15 18:18
お前ら来るスレ間違ってるよ(w

905 :デフォルトの名無しさん:02/05/15 18:18
仕事中なのに妄想だけがどんどんいっちゃうよー

906 :デフォルトの名無しさん:02/05/15 18:20
ともっちの棒、おいしそう!
ともっちの棒、ぺろぺろしたい。

907 :デフォルトの名無しさん:02/05/15 18:21
>>904
どうせ1000ゲットまでいいかげんな書き込みしかねぇんだろうが

908 :デフォルトの名無しさん:02/05/15 18:22
ともっち!はずかしがらなくていいんだよ!
ともっちにきたないところなんてないんだから。
おじさんがともっちのすみからすみまでぺろぺろしてあげるからね。


909 :デフォルトの名無しさん:02/05/15 18:23
ぺろぺろ!


910 :デフォルトの名無しさん:02/05/15 18:23
かわいい男子高校生

911 :デフォルトの名無しさん:02/05/15 18:23
>>906>>908
きもっ!

912 :デフォルトの名無しさん:02/05/15 18:23
純粋でちょっと恥ずかしがり屋な男子高校生、ともっち。

913 :デフォルトの名無しさん:02/05/15 18:24
次スレもともっちでよろしこ!

914 :デフォルトの名無しさん:02/05/15 18:24
>>911
きもいとかいうな!
ともっちのことを愛している気持ちを純粋に表現している
だけじゃないか!


915 :デフォルトの名無しさん:02/05/15 18:24
>>913
激しく同意。

916 :デフォルトの名無しさん:02/05/15 18:25
なんかこうしてるとともっちを大勢で回してるような
気分になれるから不思議だ。。

917 :デフォルトの名無しさん:02/05/15 18:26
>>916
一度みんなでそういうことを本当に
やってみたいね。


918 :ともっち:02/05/15 18:26
どうもはじめまして、ともっちといいます。
このたび僕はプログラミング言語というのを覚えてゲームでも
作ってみようかと思ったんですけど何をすればいいのか全く分かりません。
いろんな言語があるらしいんですが何かおすすめはアリマセンか?
それからよろしければ一から教えてもらえないでしょうか





919 :デフォルトの名無しさん:02/05/15 18:27

こっちが本当のともっち!

920 :デフォルトの名無しさん:02/05/15 18:27
おれは世間一般じゃノンケで通してるけど、
やっぱり男の子が好きなんだよね。
日頃のたまりに溜まった願望がこうして出てきちゃう。
ともっちは酷い人です・・・

921 :デフォルトの名無しさん:02/05/15 18:27
1がうかつにともっちなんか使うから・・・

922 :デフォルトの名無しさん:02/05/15 18:28
高校生って、ティムポの方はしっかりと大人なんだけど、
外見や考え方にはまだ幼さがのこっているよね。
そういうあどけなさがだーい好き!

923 :デフォルトの名無しさん:02/05/15 18:29
>>1
次スレも使ってください。
「ともっち」というハンドル。


924 :デフォルトの名無しさん:02/05/15 18:29
ハァハァ

925 :デフォルトの名無しさん:02/05/15 18:30
ゲイはちゃんとルールを守ります。
スレをのっとることはあるかもしれませんが、
スレを荒らすことはやりません。
なのでこんどもちゃんと「ともっち」をしようしてくださいね。

926 :デフォルトの名無しさん:02/05/15 18:30
ともっちたん!


927 :デフォルトの名無しさん:02/05/15 18:31
ゲイっていい人だったんだな。
一方で炉利は全く持って駄目だな。


928 :デフォルトの名無しさん:02/05/15 18:32
とこで、男子高校生と知り合うにはどうしたらいいんだろう・・・
ともっちのことを考えてたら自分がゲイであることを自覚
しだしたんだけど。やっぱりともっちみたいなかわいいこがいいな。

929 :デフォルトの名無しさん:02/05/15 18:33
カワイイ男子高校生、求む!

930 :デフォルトの名無しさん:02/05/15 18:34
男子校にはどういうきっかけをつくれば入り込むことができるのかなぁ。


931 :デフォルトの名無しさん:02/05/15 18:34
ともっち自身がダメならだれか友達紹介してくれないかな

932 :デフォルトの名無しさん:02/05/15 18:35
>>931
俺は友達のほうよりともっち自身じゃなきゃだめだ!!


933 :デフォルトの名無しさん:02/05/15 18:35
次スレ

934 :デフォルトの名無しさん:02/05/15 18:35
>>933
URLは?


935 :デフォルトの名無しさん:02/05/15 18:36
ともっちは酷い人です・・・

936 :デフォルトの名無しさん:02/05/15 18:37
立てれ

937 :デフォルトの名無しさん:02/05/15 18:37
その気にさせといて独りおれをおいていくなんて

938 :デフォルトの名無しさん:02/05/15 18:39
あと、関係ないんだけど同性愛板、ブラクラとグロ多すぎ
高校生関連の書き込みは殆どそうじゃん!やれやれ

939 :デフォルトの名無しさん:02/05/15 18:39
>>936
俺がたてていいのなら、ゲイに染めたやつを立てるぞ!


940 :デフォルトの名無しさん:02/05/15 18:40
>>938
だからこっちでもゲイようのスレの需要があるんだよ。

941 :デフォルトの名無しさん:02/05/15 18:41
お前ら、間違ってもタイーホだけは気をつけてください

942 :デフォルトの名無しさん:02/05/15 18:42
やっぱりいるよね。
プログラム板に、ゲイ用のスレ!!!


943 :デフォルトの名無しさん:02/05/15 18:43
>>941
ともっちの話で盛り上がっているときに
そういう水を差す話は止めてください。
そういうのは別のところでやってください。


944 :デフォルトの名無しさん:02/05/15 18:44
【カワイイ男子高校生】お兄さんたちが優しく教えるC言語スレ!【専用】

こんなのでどうでしょうか?

945 :デフォルトの名無しさん:02/05/15 18:46
カワイイ童貞の男子高校生専用の方がいいかな?

946 :デフォルトの名無しさん:02/05/15 18:47
駄スレの再利用ならまだしも
普通のスレを乗っ取るのはやめてくれよ。


947 :デフォルトの名無しさん:02/05/15 18:49
>>946
そうね、少し行き過ぎたかも、反省します

948 :デフォルトの名無しさん:02/05/15 18:57
gccリリース間近

949 :デフォルトの名無しさん:02/05/15 18:57
次スレは950が

950 :デフォルトの名無しさん:02/05/15 19:25
gcc3.1リリース間近。ウレシー

951 :デフォルトの名無しさん:02/05/15 21:07
>>946
>>947
このスレはもう次スレがたってしまっているので、
ゲイの書き込みをしたところで、乗っ取りにはなりません。


952 :C言語:02/05/15 22:05
分割コンパイル、make使い始めたのですが
外部変数の定義、再定義ファイルをそれぞれ作ってインクルードするのと
#ifndefを使って再定義をするのとどっちがかっこいいですか
プロフェッショナルな方の意見をお聞かせ下さい
初心者の質問で恐縮です。

953 :デフォルトの名無しさん:02/05/15 22:09
>>952
再定義?
変数の定義は一度しか出来ません。
宣言と定義のことだったらC FAQ嫁姑。

954 :C言語:02/05/15 22:16
>>953
外部変数dす
ひとつのファイルには
#define MAX 40
float A[MAX];
ってやって残りのファイルには
#define MAX 40
extern float A[MAX];
ってやりたいってことです。

955 :デフォルトの名無しさん:02/05/15 22:19
ヘッダファイルに extern float A[MAX]; と書き、それをインクルードする .c ファイルのひとつに float A[MAX]; と書く。

956 :C言語:02/05/15 22:26
>>955
#ifndefを使うのとどっちがオススメですか?

957 :デフォルトの名無しさん:02/05/15 22:26
>>956
ゴルァ!!

958 :デフォルトの名無しさん:02/05/15 22:29
>>956
どう使うつもりなの?

959 :C言語:02/05/15 22:29
>>957
わかりません

960 :C言語:02/05/15 22:31
>>958
こんな感じです
- sample.h -
#ifndef _sample_h
#define _sample_h
int x;
#else
extern int x;
#endief


961 :デフォルトの名無しさん:02/05/15 22:33
>>960
ヘッダーファイルの中じゃなくて、.cファイルの中で宣言しろって。

962 :C言語:02/05/15 22:39
>>961
わかりました、そうします。
ありがとうございました。

963 :デフォルトの名無しさん:02/05/15 23:02
#ifdef EXTRN
#define EXTERN extern
#else
#define EXTERN
#endif

とやり、すべての外部変数にEXTERNとつけておく。
main()のあるファイル(本当はどれか一つならよいが)に
#define EXTRN
と書く。

964 :デフォルトの名無しさん:02/05/15 23:05
今日はじめて関数ポインタというものを知ったのですが、こりゃやみつきになりますね!

965 :デフォルトの名無しさん:02/05/15 23:07
>>964
C言語でもクラスごっこが出来る。w
しかし、時代は関数ポインタを異端だとし始めている罠。

966 :デフォルトの名無しさん:02/05/15 23:08
あと、C++初めて2年になるのですが、今日初めてexternの効果を知りました!こりゃ感動しますね!
いままでの僕がアホみたいに思えました!なにしろ別のファイルから別のファイルの変数にアクセスする方法を知らなかったのですから!
クラスから他のクラスを参照するときなんて、いちいちSetメソッド作ってポインタをメンバに保存してたんですよ!
あーもう!

967 :デフォルトの名無しさん:02/05/15 23:08
>>964
その勢いでC++の仮想関数を学習してしまうとよい罠。

968 :デフォルトの名無しさん:02/05/15 23:09
>>966
一歩間違うと収集付かなくなるぞ。

969 :デフォルトの名無しさん:02/05/15 23:10
>>967
割り込みベクタみたいなテーブルがあるんでしたっけ?確か。

970 :デフォルトの名無しさん:02/05/15 23:10
>967
いやあ。。オブジェクト指向はほとんど学習しましたよ。当然ポリモも。しかし本当に僕は基本的なところができてなかったんですねえ。

971 :デフォルトの名無しさん:02/05/15 23:18
>>970
いや、知らない方が良かった、という事も。(汗

972 :デフォルトの名無しさん:02/05/15 23:19
>>966
で、ポインタと配列は同じもの、という誤解のもとに
a.c:
int a[10];

b.c:
extern int *a;

とやって、悩むわけね。


973 :デフォルトの名無しさん:02/05/15 23:20
>>969
ポインタが親のクラスを使っていても、実際に指しているクラスが派生
クラスならば、オーバーライドされた派生クラスの関数を自動的に
呼び出してくれるよ。これがないとポインタは全滅してたかも。

974 :デフォルトの名無しさん:02/05/15 23:37
>972
まさか!ぼくが読んだポインタの本はそんな勘違いを起こしませんよ。
しかしその場合、どうすればいいのかな?両方ともa[10]で宣言すればいいかな。

975 :デフォルトの名無しさん:02/05/15 23:39
(1 << 2)
これってどういう意味なんですか?

976 :デフォルトの名無しさん:02/05/15 23:39
>>974
>ぼくが読んだポインタの本はそんな勘違いを起こしませんよ。

いや、お前が・・・

977 :デフォルトの名無しさん:02/05/15 23:44
>957
00000000 00000000 00000000 00000001

00000000 00000000 00000000 00000100


978 :デフォルトの名無しさん:02/05/16 00:02
>>977
戻りすぎだろ。。。汗
975か?

979 :デフォルトの名無しさん:02/05/16 00:06
>>961
ネタなのかポカなのかマジなのか分からん…

980 :デフォルトの名無しさん:02/05/16 02:40
新スレ立てました
http://pc.2ch.net/test/read.cgi/tech/1021484276/l50

981 :980:02/05/16 03:00
>>980は、2重で立ててしまったものなので
削除依頼に出しました。正しいスレは
http://pc.2ch.net/test/read.cgi/tech/1021459016/l50

982 :デフォルトの名無しさん:02/05/16 10:05
そしてこっちのスレは最後までゲイネタを語り合うことに使いましょう!!!


983 :デフォルトの名無しさん:02/05/16 10:12
ともっちは今日もおなにしてるんだろうなぁ。

984 :デフォルトの名無しさん:02/05/16 12:27
俺はちゃんと毎日ともっちを想像しながらおなにしてるぞ!!


985 :デフォルトの名無しさん:02/05/16 12:32
みんながともっち、ともっち言うから
俺のモノまで反応しちゃったよ・・・(*-_-)

986 :デフォルトの名無しさん:02/05/16 12:47
>>979
おまえはextern〜だけでなく、変数宣言までヘッダーファイルの中に書き込むのか?

987 :デフォルトの名無しさん:02/05/16 12:57
>>985
やっぱり体のほうは正直なんだね。
いっしょにきもちよくなろう!!


988 :デフォルトの名無しさん:02/05/16 12:59
ともっち!プログラムだけじゃなくて、体の疑問や悩みも
詳しく分かるように教えてあげるよ!


989 :デフォルトの名無しさん:02/05/16 13:04
ともっち!おじさんがいまから具体的な指導してあげるよ。

990 :デフォルトの名無しさん:02/05/16 13:05
次にのっとるのに都合のよいスレはないのか?


991 :デフォルトの名無しさん:02/05/16 13:05
なんだか、プログラマー板にあるスレは
議論の場になってしまっていて、
ともっちのこと好きだ−!
という系統の書き込みがやりづらいんですけど、、、、


992 :デフォルトの名無しさん:02/05/16 13:06
>>991
いろんなスレに書き込もう!

993 :デフォルトの名無しさん:02/05/16 13:06
もうすぐ1000!!


994 :デフォルトの名無しさん:02/05/16 13:07
このスレの1000をとるのはやっぱりともっちなんだろうか、、、


995 :デフォルトの名無しさん:02/05/16 13:08
あと5件

996 :デフォルトの名無しさん:02/05/16 13:08
>>994
ハァ?

997 : ◆inFbM64o :02/05/16 13:08
10000!!!

998 :デフォルトの名無しさん:02/05/16 13:08
dfffffddd

999 :デフォルトの名無しさん:02/05/16 13:08
>>996
ともっちだよ!


1000 :デフォルトの名無しさん:02/05/16 13:08
やったー1000げっと成功!
みなさん今後も指導よろしくおねがいしまーす!
         by ともっち

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

211 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)