■ 2ちゃんねるは、ここのサーバを使ってるです。。。
 .jp ドメインお持ちのお客様大歓迎。maido3.jp
 .fm 取得代行します。(US) maido3.fm
 .ca 取得代行します。(US) maido3.ca
 .com .net .org 取得代行します。(US) maido3.com
 .cc .to .tv 取得代行はじめました。NEW
人気サイト
月々1,000円からの BinboServer.com 2ちゃんねるも使っている Big-Server.com
>> 2ちゃんねる、サーバ監視所

■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
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を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。



2ちゃんねるは、ここのサーバを使ってるです。。。