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

このエントリーをはてなブックマークに追加
1ともっち
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
ともっちかよ!
>>2
ともっち 38 かよ!
6_:02/05/07 16:46
JAVAとC言語ってどんな違いがあるんですか?
>>6
ほとんど一緒。
天と地ほどの差しかない。
>>6
生ハムと生肉くらいの違いです
9_:02/05/07 16:49
金融系のITでは、どちらが主流なんですか?
なんかコボルというのは前時代のプログラムで
こんなの学んでも食えんと言われてしまいました。
>>9
いやコボルだろ〜
CはUNIX記述用言語として生まれただけあってUNIXと制御系でよく使われる。
11_:02/05/07 16:56
制御系っていうのはウイルスからPCを守ったりする
ソフトを開発する仕事のことですか?

あと、10氏レスを見ると、UNIXを学ぶなら、先にC言語を学んだほうがいいみたいな
感じですね
>>11
一緒でいーんじゃねーの
制御系ってOSとかじゃないの?
Cが使われる制御系ってプロセス(工程)制御とか
エンジン制御とか埋め込み系じゃなか?
C をやる前に Lisp か scheme をやったほうがいいYO
>>15
まじかよ!
Emacs Lispとか?
17デフォルトの名無しさん:02/05/07 17:12
>制御系っていうのはウイルスからPCを守ったりする
>ソフトを開発する仕事のことですか?
違う。

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

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

比較的低水準だからだとオモテタ
制御系と組み込みは同じものだったのか・・・
逝こう・・・
>>17
前橋さんの本でちょこっとかいてあったんですけど、「テレビのリモコンに使う組み込みチップ」
などは実務における、Cのよくある使い方の1つなのですか?
初心者丸出しの質問で申し訳ないですが。
>>18
だからプログラムを小さくできるということでは。
言語仕様が巨大で、処理系も巨大でも、サイズの最適化が強力ならプログラムのサイズ小さくできるんでないの?
>>22
巨大も部分による。
予約後が莫大=巨大というとらえ方もあるし
プログラムサイズがどうのこうのっていうのは、処理系側の話では?
Smalltalkは予約語は無いし文法は最小限だけど、おせじにも言語仕様が小さいとは言えない、とか。

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

というふうにしているのですが、危険でしょうか?
>>26
ぜんぜん平気。
でもダサイ
>>28
ガ━━Σ(゚д゚lll)━━ン
>>26
そう言う風にする危険性より、MainLoop と言うへんてこな変数名や
SecandInit とか言う Manoy に匹敵するスペルミスが、あなたの
プログラムを糞なものにする危険性のほうが高いでしょう。
>>30
ガ━━Σ(゚д゚lll)━━ン

    ∧ ∧        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄ ̄( ゚Д゚) ̄ ̄|   < もう寝るよ。おやすみ。
|\⌒⌒⌒⌒⌒⌒\   \
|  \           \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\  |⌒⌒⌒⌒⌒⌒|
  \ |_______|
>>29 >>31
リアクションに ワラタ
33デフォルトの名無しさん:02/05/07 21:18
>言語仕様が巨大で、処理系も巨大でも、サイズの最適化が強力ならプログラムのサイズ小さくできるんでないの?

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

22にわかりやすく言えばOS(組み込みにOSも何も無いんだけど)に当たる部分も書かなきゃ
いけないということ。
3422:02/05/07 21:25
>>33
ハァ?
チミ、クロス開発って知ってる?
>>33
> 制御系と言うことはOS上で走らせるプログラムじゃないんだから汎用的な
> コンパイラの最適化は無意味じゃん。

ハァ ?

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

ハァ ? (まあ、ない奴もあるけどさ...。)
ハァハァいうな。うみびらきならもうすぐだ。
善意に取れば >>35 は「ソースとオブジェクトが良く対応してた方が
(つまりソースがある程度低レベルな方が)組み込みのデバッグが楽」
といいたいのかも知れん。
3837:02/05/07 21:50
ごめん>>35じゃなくて>>33だった。
39デフォルトの名無しさん:02/05/07 22:02
なんかこう、ちょびっとasmとかm80とかの使い方覚えて
最適化のこと分かった気になって、ついつい2chでかたりはじめちゃう連中、
ほのぼの。
>>37
> つまりソースがある程度低レベル
お前のプログラムみたいだな。(藁)
412:02/05/07 22:19
(藁を(藁)とする>>40は新参
>>41
2ch の古参でうれしいの ?
43デフォルトの名無しさん:02/05/07 22:26
必死な>>42を晒しage
>>42
新 参 者 必 死 だ な ( 藁
√藁
4642(騙り:02/05/07 22:36
そう、よかったわね。
4735: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でそれ以外の方は違う方です。
善意の方も悪意の方もネタの方もそのつもりでお願いします。

#いや善意にとってくれた人が自己弁護しているようにとられているから申し訳なくて、、。
正直、OSが使える人は羨ましい
仕事でブッちぎれたときはHello,world.
標準出力がある幸せ
もろこ!!
5447:02/05/07 22:54
>>48
あらあら、言い訳にしか取れなかっただね。ごめんな、あんたにはちょっと
難しすぎたみたいね。

>>49
まあ、そう言う世界もあるらしいけど、制御系一般の話としてはちょっと
ね。ところで、OS 云々はいざ知らず、そう言うクラスの話だと、
「汎用的なコンパイラの最適化は無意味」なのか ? メモリーが少なそう
だからプログラムサイズを最優先にするとかのことを言ってるのか ?
正直、小規模組み込み系の話はそっち系のスレでやって欲しい。
56デフォルトの名無しさん:02/05/07 23:04
不特定多数が相手なんだから、
相手の解釈がどうのこうの言わずに自分の表現を変えてみたら?
>>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プログラムで、エクスプローラでフォルダを選択して右クリックの[共有]で開く画面(フォルダ共有設定をする画面)を出したいのですが、方法はないものでしょうか。
>>58
一般的に言って足す必要なし。
+4してる本に特殊な状況であることについての説明があるんじゃないの?
もしなければその本がクソ。
理由なんか無いだろ
>>59
C言語じゃ無理だね
>>62
ワラタ
>>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)は
どうしてレジストリいじくっちゃうんですか?
仕組みわかる人教えて
>>65
API。アフォか。
67伊集院光:02/05/08 00:23
突然ですが私は伊集院光です。水曜25時25分
ゲームWAVE見てね。


>>67
前まで見てたけどお前アフォなので見なくなった
>>58
むかしむかし小さなメモリブロックをアロケートすると4だか8だかの倍数の
大きさにメモリブロックのサイズを調整しようとした時にバグになる処理系があった。
もしかしたらそれのトラウマが感染してるんじゃなかろうか?
7058:02/05/08 07:34
>>60,>>61,>>64,>>69
レスありがとうございます。助かりました。
71記念式典国民大会:02/05/08 09:29
なんかこのスレも回数を増すごとに>>1の名前におもしろみが薄れていく・・・
スーパーハイソサエティーハッカー日下部陽一から次はどう来るか楽しみだったのに・・・
俺は糞壁の名前だけでむかつくから使わんで欲しいが。
くだらない質問なんですけど、
TurboC++っていうコンパイラソフトで、
複数のファイルからなるプログラムをコンパイルする時はどうすればいいのでしょうか?
初心者なので優しく教えてね。よろしくお願いします。
>>73
tcc file1 file2 file3...
もしくはmakeを使う。
>>73
IDEからやりたいのなら、プロジェクトにコンパイルしたいファイルを追加する。
しかし、Turbo-C++のIDEのプロジェクトにはバグがあって、よく泣かされたな・・・・
(遠い目)
>>74
レスありがとうございます!

出来ればtcc file1 file2 file3...、メイクの使い方を詳しく教えてください。
たびたびすいません。
>>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
>>77
スマソ。tccのオブジェクトファイル作成は

tcc -c

だったです。
>>77
何回やってもエラーが出ちゃいます(泣

tcc -c file1.c←あんまり意味がわかりません。。。すません。
根本的にどう繋げればいいか教えてくれると嬉しいです!
>>75
レスありがとうございます!
それって単純に複数のプログラムを開いてコンパイルのボタン押すだけのことですよね?
TurboC++ってマニュアルねーのかよ。
なんかみんな親切やねぇ。
83sa:02/05/08 17:33
初心者です。

10     15  
5   →  10
3   を  5
       3

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


どうしたらうまくいくでしょうか?レス頂けるとありがたいです。
ファイルの中身全部読み込んで1行書き込んでから
読み込んだ内容を戻してやったらだめなの?
>>83
いきなりファイルの上で挿入する手段は無い。
>>84のいうとおりメモリ上で挿入してからファイルに書くか、もう1つファイル使え。
86デフォルトの名無しさん:02/05/08 19:02
他スレにも書いたのですが、
VC6.0にてfopen()を発行するとerrnoが12(ENOMEM)でエラーになってしまいます。
また、この現象が起こるPC、起こらないPCがありまして、
エラーとなっていたPCでも電源を切って翌日になると成功し始めたりします。。。
対策方をご存知でしたらおしえてください。おねがいします。
マルチは氏ね
コンパイルエラー?
DLLかなんかがぶっ壊れてるか、マシンの日付が未来になってるとか。
新規インストールのOSと新規インストールのVCで動作確認しる!

再現性がないやつは特定が困難かもなぁ。
ENOMEM・・・本当にメモリが足りないとか?
それとも、ディスクが足りなくなってるとか、リソースが尽きてるとか、ファイルを開きすぎてるとか(閉じてないとか)、それ系のエラーかと。
90デフォルトの名無しさん:02/05/08 19:08
>>88
コンパイル時ではなく、実行時のエラーです。
ちなみに、一度エラーが起こらなくなるともう大丈夫なようです。
91デフォルトの名無しさん:02/05/08 19:10
>>89
同じスペックのマシンでも動く動かないがあるので、メモリは大丈夫なので、
リソースなのかなぁ。。。。?
>>91
CRTのソースのfopen関係のあたりでENOMEM検索してみれば
いいんでない?
雑誌で,
for(i=0;i<20;i++){
 Num[i]=i;
}



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

としたほうが早くなるよ。
都かいてあったのですが,皆さん使ってますか?使ったほうがいい?
>>93
loop unrollingだな。
オプション付ければコンパイラがやってくれるよ。
>>93
この程度はコンパイラが最適化するだろ。
バグを生みやすい意味不明のコーディングは逝ってよし!
無駄。>>93
実際の性能改善だと
そんな細かい小細工以前に
やる事がたくさんある。
関数の戻り値として,文字列を返したいのですが,

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の部分が変な文字で表されます。
どうしたらいいでしょうか?
>>97
それでコンパイルが通るはずが無い。
ちゃんとコンパイル済のソースを賭。
>>97
その方法では無理なので

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



return *buf;
}

な感じで
そもそも、
char Text[256];
Text=ReturnMoji(1);
constの配列にポインタは代入できまへん。
101デフォルトの名無しさん:02/05/08 20:04
>>98
まぁまぁ、コンパイラじゃあるまいし。

>>100
レベルの低い煽りだな。
>>79
亀レスだが・・・・・・・
tlink.cfgとかtcc.cfgの設定はちゃんとできてる?パスが通ってない場合が
ほとんどだよ。
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,-----);
10479:02/05/08 20:17
>>102
レスありがとうございます。

tlink.cfgとかtcc.cfgの設定ってどこでおこなうのですか?
夕方からずーっとやってるんですが、ヘルプ見てもできないんです…
>>103
あ、staticな領域は消えないか・・・ってまぁたトリッキーなw。
>>104
全部教えないと何も出来ないのか?
コンパイラが入ってるbinフォルダにあるだろ
>>104
オプションを記述するだけ
-Ic:\include_file_path\
-Lc:\library_path\
みたいに

懐かしいね
>>103
そんなことする必要はないだろ
文字列リテラルはスタック領域に書き込まれる物じゃないんだから
>>106
.NET SDKのコンパイラ群はなぜか%WINDIR%以下に展開されて死ぬほど悩みましたが?
110デフォルトの名無しさん:02/05/08 20:27
>>108
ハァ?
staticにしないとポインタがスタックにつまれて返せなくなるだろ。
>>103
エラーチェックしろ。
>>110
>>108さんの意見に同意。
char *ret_strは関数の終了と同時に破棄されるが、文字列リテラルの
アドレスは依然として有効。
>>110は勘違いをしている。
ret_str配列は無くなってしまうが、
ret_str[i-1]はただのポインタだから
普通に返せる。
114110:02/05/08 20:30
と思ったがポインタは消えても文字列リテラルのアドレスは残るか
115110:02/05/08 20:31
>>112-113
ああ、勘違いした。スマソ
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;
}

とすれば,文字列へのポインタがなくならないので,大丈夫ということでしょうか?
バカにされた108への謝罪は無かったのでありました(まる)
118デフォルトの名無しさん:02/05/08 20:36
>>116
char *Moji[3]だろ。
普通は添え字は書かない。*Moji[]

ポインタはなくなるが、指していたものは残るので、そのアドレスを返して使っても問題ない。
119デフォルトの名無しさん:02/05/08 20:36
>>117
>>113>>108だからOK
>>118
*Moji[3]にデフォルト値入れると大変なことに。
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);
これ
>>119
勝手に決めるな
123デフォルトの名無しさん:02/05/08 20:39
>>120
なぜ?
int Human; と宣言して,
Humanの第4ビットまでにage=10;を入れて
第5ビットから第8ビットまでtaijyuu=50;を入れて,
第9ビットから第12ビットまでseibetu=1;を入れて扱いたいのですが,
どのように実現したらいいでしょうか?
>>116
それはダメダメ。自動変数に文字列が確保されてしまうので、
関数の終了と同時に文字列が破棄される。
126デフォルトの名無しさん:02/05/08 20:40
>>124
構造体だったか共用体だったか忘れたが、それでできる。
ビットなんとかってやつ。
127デフォルトの名無しさん:02/05/08 20:40
>>125
その前にコンパイルが通らない
>>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> を忘れずに。
130113=98:02/05/08 20:41
>>119
いや108じゃないけどね(にが藁

>>116あのなあ。return文にセミコロンが無きゃエラーになるダロー。
本当に使ってるソースを書かずに間違いだらけのを書かれると、
どの間違いについて聞きたいか分からないから手間がかかって
しょうがないんだよ。
>>124
できない。
どう考えても3bitじゃ50を保持できない
132126:02/05/08 20:43
>>131
そうだな(ワラ
考えなかった。
>>126 >>128
共用体じゃない。ビットフィールドだ
struct {
int x : 4;
int y : 4;
int z : 4;
int w : 4;
};
>>124, >>128
ビットフィールドですね。
ttp://black.sakura.ne.jp/~third/c38.html
>>131
4bitだよね。それでも無理だけど。
136デフォルトの名無しさん:02/05/08 20:45
>>135
10進コンピュータなら出来る。
と言ってみたい。
>>128
ビットフィールドのことだろ。ビットの並びは実装依存なので、何ビット目に
確保されるかとかは保証されないよ。

union uni {
int Human;
struct bit {
unsigned age : 4;
unsigned taijyuu : 6;
unsigned seibetu : 4;
};
};
>>136
bit (<binary digit) n. 【コンピユータ】 ビット ((情報を数量的に表す基本単位)). 
goo 英和辞典より。

つっこもうと思ったが1bitが10のステートをとっても良いんだね。
>>138
そう。
なんかそんなスレがあった。
実現するのかしら。
140デフォルトの名無しさん:02/05/08 20:49
( ´∀`)そーですね
>>138 binaryだから2進に決まってるだろ。
だいいち10ステートあったら最小単位じゃないじゃないか。
ってスレ違い。
142デフォルトの名無しさん:02/05/08 20:50
>>141
ああそうか。
10進だとditか
decimal digit = ditを提唱するぞ!俺は!!
今なら現在の電圧を10分割するくらい・・・。
>>143
各種記憶装置との互換性がなくなりそう・・・
138
それは無理。
アナログ情報を表すnatと言う単位では無限の状態を
取ることが可能。
dit VS nat

Fight!
保持できる情報量が圧倒的に違いすぎるので、natの勝利!
>>143
別にいいけど…ってそれただの「10進ヒトケタ」やん。
わざわざ情報量の単位にする意味なし。
bitが単位になってるのはそれ以上細かい単位が無いからだよ。
int mona=10;
int monao=20;
int a=mona;
a=monao<<4;
printf("mona=$d,monao=%d\n",mona,monao>>4);
こんな感じでできなかったっけ?
漏れは最小単位として
unary digit = ditを提唱することにするぞ!
ditじゃねー、uit(うぃっと)だ
まぁ、量子コンピュータが出たらbitなんて鼻くそポイさ。
>>152
能力がいくら増えても情報量はbitで表されると思われ
154デフォルトの名無しさん:02/05/08 20:58
スレ立て30時間でまだ150とは・・・
量子コンピュータって何だよ!
そんなもん基本概念からして違うんだから
今のコンピュータとリプレースは出来ないだろ
>>155
まぁ、お前はDNAコンピュータの原料にでもなってろってこった。
int mona=10;
int monao=20;
int a=mona;
a=monao<<4;
printf("mona=%d,monao=%d\n",mona,monao>>4);
こんな感じでできなかったっけ?
>>151
その話も10進コンピュータスレで外出
位どり記数法では0しか表せない
>>157
いや、2回も書かんでも・・・。
intが当たり前のように256bitの時代とか来るのかなぁ?
16179:02/05/08 21:05
>>106

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

>>107

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

具体的にどこに記述するものなのか教えて下さい。
>>161
おぃおぃ
tlink.cfgとかってファイル名書いてあるだろ?
>>159
ワラタ
>>161
ガイシュツだけど説明書はないの?
なければHELPの中を隅から隅まで目を皿のようにして探すこと。
int age=50;
int sex=1;
int human=age;
human=sex<<8;
として、ageを参照するときは,human&255とし,
sexを参照するときは,human>>8でどうでしょうか?
>>165
ソレダ!!
167デフォルトの名無しさん:02/05/08 21:18
>>160
くる。
あとCPUも。
>>165
human|=(sex<<8)だろ。つーか、
なぜビットフィールドじゃダメなのか小一時間樋冷たい。
169デフォルトの名無しさん:02/05/08 21:19
>>165
クリックしちゃったじぇねーか!!
ビットをずらしていたのか・・・
170デフォルトの名無しさん:02/05/08 21:20
>>168
おけつめたい
17179:02/05/08 21:20
>>162
TCW5→BIN
で、この中にtlink.cfgっていうファイルがあるんですよね?

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

>>169
printfで>>4を表示させても仕方ないだろう・・・w
>>169
8 :デフォルトの名無しさん :02/05/07 16:47
>>6
生ハムと生肉くらいの違いです
>>172
リンクがあるとついクリックするくせが(恥
>>161
turboc.cfg
だか
tcc.cfg
だかのファイルをカレントディレクトリに作る
166
128ビットのunsigned 型はint以外でどう表記するのですか。
unsigned lo--ng ・・・
もしかして、borland.comに落ちてるtc201.zipですか?
helpが無いみたいだし
>>171
いや、ないなら作ればよい。tcc.cfgもお忘れなく。もう少しだね。
THELP.COMを常駐させればヘルプが見れるはず
>>176
つぅかそろそろlong shortは終わらせた方が。。。
初期化したい時に,
human|=(0<<8)
は可能ですか?
移植性も考えればサイズ指定すべき。
>>181
初期化したいときに限ってダメ。
>>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
18679:02/05/08 21:54
>>175,178

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

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

本当にたびたびすいません。
>>186
いや、それは・・・
188デフォルトの名無しさん:02/05/08 21:56
>>185
配列って
int hoge[100]
って宣言すると
hoge[0];
から
hoge[99];
までしか使えないって知ってた?
189デフォルトの名無しさん:02/05/08 21:57
ファイルから日本語全角文字を配列に格納する方法を
教えてください。
>>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が出来るはずです。
>for(i=100;i<=0;i--)

解説して。
>>191
俺も、いったいそのループ(になってない)が何をしたいのかサパーリ
>>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ってなに?
>>195
いなかのフライドポテト。
>>194
なんで入力ストリームと出力ストリームが同じなの?
198194:02/05/08 22:05
わからんぽ
わからんぽ
おしえてぽ
199194:02/05/08 22:06
FILE *country_fp;
>>199
どうやってオープンした?
>>194
こういう事する時は、"r+"で開いておいて、fseekなどで切り替えないと
動作の保証はない。
202初心者:02/05/08 22:11
for(i=100;0<=i;i--)

の間違えでした。
203 :02/05/08 22:11
文字列の行末にある空白を削除するにはどうすればいいでしょうか
20479: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←これはどこのファイルに書けばよいのでしょうか?
>>202
まだ間違ってます。
206194:02/05/08 22:12
ファイルから日本語全角文字を配列に格納する方法を
教えてください。

207446: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文がおかしいのでしょうか?
>>204
tcc test1.c incre.cは、どこにも書かずにそのままコマンドラインから
打ち込むか、またはバッチファイルに書いて実行する。
203
sscanf()
>>204
もしくはmakefileというファイルをエディタで作成し、

test1.exe: test1.obj incre.obj

と書いて、make[enter]とやってもよい。だけど今はやめとけ。
>>208
俺の経験から言わせてもらうと、初心者に分類される人たちは、
プログラムを1行ずつ読むことが出来ていない気がする。
自分で書いたプログラムすら、その挙動が把握できてないというか。
>>212
つぅか丸写し以外でその質問している時点で努力も学力も才能も足りてない気がする。
21479: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の置かれたフォルダに入れればいいんですよね?

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

よろしくおねがいします。
>>214
tcのbinフォルダに入れろ。
>>214
ちょっと待って。今Turbo-Cはどのディレクトリに入ってるの?
そのディレクトリ名をturboc.cfgやtlink.cfgに書くんだよ。
コマンドラインから打ち込んでもだめだったら、バッチファイルに
書いたってだめだよ。
>-IC:\TC\INCLUDE
>-LC:\TC\LIBと書かれた[turboc.cfg or tcc.cfg] のファイルと、
>-LC:\TC\LIB と書かれた[tlink.cfg] のファイルは、

-IC:\TC5W\include

とかじゃないのか?
自分の環境に合わせろ
打ち込んでも出来ない=コマンドまたはファイル名が違います?
それだったらパスを通せ
21979:02/05/08 22:35
>>215
test1.c incre.cの置かれたフォルダにはいれなくていいのですか?

>>216
Turbo-Cは、
C:\TCW5\BIN\tcw.exeです。
>>219
コンパイラの設定ファイルだから、
ソースがあるところに入れる意味がない
221初心者:02/05/08 22:38
C言語でデータ配列の中から最大値を求める方法には
サーチングしかないのでしょうか?
サーチングだと処理に時間がかかっていやなのですが。
何か方法があれば教えてください。
>>221
ソートでも良いけど?
[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です。
サーチングでもソーティングでも処理には
時間がかかるので、一括して処理できるような
ものがあればと思ったのですが。
>>221
じゃあ、ただ配列に入れるんじゃなくて、もっと工夫しろ。
データ構造の本を読んで「半順序木」の勉強を汁
>>224
人間に出来ないものはプログラムでも出来ないと思われ(速度以外
>>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]);
}
}
}
22979:02/05/08 22:50
>>220
わかりました!

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

単純にソースが間違ってるんですかね。。。
でも試食版コンパイラではできたのですが…。
>>228
if(moji[i]==NULL)
{
}
else
{
printf("%c",moji[i]);
}

まず、Cの薄い本でも読んでくれ。アイデアはおもしろい。
じゃぁ、
tcc test1.c incre.c

と入力して、その出力を一切改変せずに、
省略も一切しない状態ですべてここに貼り付けてみろ
>>228
40点
>>229
IDEからわざわざコマンドで実行させているんですか?まあいいけど。
一度、test1.cとincre1.cを別々にコンパイルして、エラーが出ないか
どうか確かめた方がいいですね。
多分incre.cにはmain()が無いというリンカエラーが出ると思うけど、
それは無視して下さい。
>>228
配列を逆さに読む意味は?
そもそも何がしたいんだ?
>>229
俺の所には古いBorland-C++5.02Jがあるけど、これから複数のプログラムを
コンパイルするには、ファイル→新規作成→プロジェクトでやると簡単だよ。
Turbo-C++も多分同じでしょう。
236デフォルトの名無しさん:02/05/08 22:58
>>185にて
文字列を読み込んで逆から表示 例 iptep==>petpi
とかいてあるぞ。>>234

まぁ本来はもちっと難しい方法で解決するんだろうけど、
!=をつかってスリムにしない程の初心者なので良いんではないだろうか。
>>236
あれだと妙な空白が初めに出ない?
>>237
if(moji[i]==NULL)
{
}
だから出ないんじゃない?
>>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]);
}
}

とするのはどうかな。
>>240
>>239じゃだめなんか?
>>242
無駄に再帰使ってるね。。。
24479: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
おめっと。
でも分からず屋ってこういうときに使う言葉か?(汗
>>231
ICじゃなくて
-Iがインクルードパス
-Lがライブラリのパス
C:\TC5W〜がディレクトリ
-Iと-Lでディレクトリを指定している。

しかし、水を差すようで悪いが、
bcc32を使った方がいいと思う
>>243
入力される文字列の長さが100文字限定というのはアレだからな
TurboC++ for Windows 5 って、Windows専用コンパイラじゃなかったっけ?
コマンドラインツールって含まれてるの?
コンソールアプリもEasyWindow(s?)でウインドウアプリにしちゃった気が・・。

エラーってさ、、、
 「コマンドまたはファイル名が違います」
じゃないよね?
24979:02/05/08 23:12
>>245
あっ、使い方間違ってますね(汗

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

#include <stdio.h>

int main(void)
{
char ch = getchar();
if ( ch!='\n' ) main();
putchar( ch );
}
>>250
returnがありませんw。
ワラタ
はっきり言ってなんかのコンパイラの設定聞いてる奴がうざい。
>>253
湧くな。
>>251
returnいるのか?
他のやつも省略してるし、コンパイラは警告もエラーもはかないし。
まぁ、戻り値無視してるからなんでも適当に付け足せば。
>>249
1のリンクくらいは見ようよ
>>256
main()
ならreturn省略してもいいが(よくないけど)
intと書いたのならきっちり値を変えそうよ
25979:02/05/08 23:19
>>253
すいませんでした。これからは自粛します…。

>>254
早速DLしてます!これからどっちが使いやすいか試します!
>>256
関数の型がintだからいるだろ。
>>258,260
省略時もintだろ?
>>258
int main()のreturnを省略していいのはC++だよ。
>>79がまず覚えるべきなのはgoogleの使い方だとオモフ。
>>259
多分今日味わった苦労が、BCC32のセットアップの時に役立つはず。
>>262
ん〜〜VC++でCとしてコンパイルしてるが、
まぁVC++の警告の出し漏れか。
>>259
おめでとさんついでに、もう一つ書いておいてあげます。
BCC32にはこれをペアで使うと楽だよ。
http://hp.vector.co.jp/authors/VA017148/pages/cpad.html
>>261
だから、よくないけどって書いてあるだろ。
心情的にはわかるってことだ
268初心者:02/05/08 23:28
185ですけど
241さんのやだと見た人がわかりずらいので
やめました。はじめはそうしてたのですが・・

250
これは僕の実力をはるかに超えた解答でした。
1つの問題で多くの解答が出ることにプログラミング
に楽しさがあるのではと実感しています
>265
VC++でCとしてコンパイルしたら、returnがなくても警告でないんだ。
>>269
どうやらmain関数だけはそうらしい。
>>270
C++みたいですね。でもC++としてコンパイルすると、return 0;がないと
警告出ません?
241のも、NULLと'\0'を混同している点で、減点は必至。
>>272
どっちも0じゃん!
と、いつぞやの紛争をぶり返す俺。
>>271
C++でもmainだけは警告でなかった。
他の関数ではエラーになる。(VC.NET)
>>274
cppなら出るぞ(VC6SP4)。
なんだ、その、つまり、荒れてるのか?
>>274
C++で出ないのは標準だからね。Cででないのは仕方ないかな。規格書の
中にreturn省略時のmainが何を返すかまでは書いてないから。
278デフォルトの名無しさん:02/05/09 00:27
main関数までプロトタイプ宣言している奴はいる?
いない
>>278
C始めて1ヶ月くらいまでしてた(w
>>273
NULLは ((void*)0) と定義されてあることもあるという
どうしようもないツッコミを入れてみる。
>>281
C++じゃNULLは0だよ

>>xxx
ここはCスレだ
283 :02/05/09 01:17
たとえ動作上何の問題がないとしても
NULLマクロをヌルポインタ以外の意味で使うのは恥かしい
>>282
ここがC言語スレだと分かってるなら


C++の話を無意味に持ち出す?
発展前に釘を刺しただけだと思われ
>>278
前橋和弥
287sa:02/05/09 09:40
初心者です。
テキストファイルをオープンして、そのテキストファイルに何行のデータがあるか
知りたいんですが、どうすればいいんでしょう?
wc -l
改行の数を数える。
>>287
fgetsでループしる。
29191: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スレ
マジレスするとケースバイケース
>>292
ぶっちゃけた話、両方をやっておくべき。
>>291

 ディスプレイとかモニタとか画面とかとも言うね。
 人によっては、TVとか言う人も(笑)。
>>292
 Cでは、前者は一切使わない。
 無理して頑張って努力すれば出来ない事ない鴨しれないけど、ワシは知らん。
297sage:02/05/09 12:20
>>295
ってことは、ディスプレイが原因なのか?
>>292
前者はほとんど使ったこと無い。
C++のオーバーロードの(悪い)例程度に見てる。
299299:02/05/09 14:45
int c;
scanf("%d",&c);
これで間違って文字を入力された場合の対処法はどうすればよいのでしょうか?

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

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

>>291 C RunTimeルーチンのこと? crt0.sとかをGoogleで検索.
scanf を使わない。
誤った入力に対処できないから scanf() は使うな、なんて言われて
何も考えずに使わないようにしていました。 fgets() と sscanf()
を組み合わせて使う方法は今でも常道なんでしょうか。少し脱線すまそ。
>>300
atoi()はatoi("a")とatoi("0")も0を返すので
0が入力されたのか文字を入力されたのかの区別が付かない


  
>>303
fgetsとstrtodでどうでしょう?
>>304
駄目、一見よさそうに見えるが指数形式も扱えてしまう為、
strtod("1e", &p);が正常終了する。

isdigitで1文字づつチェックするのが一番安全
>>305
fgetsとstrtolでどうでしょう?
307カス野郎:02/05/09 16:17
>>292
だけど、秋に基本情報技術者の試験控えてるんですけど
どちらにしろ、たしか基本情報ではcout<<タイプはないよね。
printfの方だよね。

さらにVC++やってても変数とか出すときにsprintf使うけど
coutなんてまったく使わないし、printfタイプの方がいいという
ことでいい?みんなこっちつかってるよね。
>>307
「cout<<」を使えるのはC++だからね…
>>307
stringstreamは便利だyo!

cout<<の存在意義って何?
==で文字列が同じかどうか判断できたり、+で文字列を連結できるC++はまじですごい・・・・・
というか文字列型自体すごいのだが。
>>310
coutっちゅーか、streamに対する<<の意義は:
型に対する処理の選択が実行時ではなくコンパイル時に行われる。
operator <<(stream&, 〜)を実装しさえすれば後からどんなデータでも統一的に追加対応できる。
%dなどの書式文字についていちいち覚えなくても、<<で出るとだけ覚えれば使える。

しかし、こと書式の詳細指定に関しては冗長かつ結局実行時ステートなのがアレだ。
313デフォルトの名無しさん:02/05/09 16:57
>>312
C++全然知らないんだけど、cout <<の<<はビットシフトの<<じゃないよね?
>>313
<<演算子はiostream等のクラスでオーバーロードされて、まるで出力用に
作られたかのように動きます。よくできすぎとるわ。
>>314
臨機応変に変えるんだ!?
すごいね。
でもコンパイラを作るのが大変そう・・・
316デフォルトの名無しさん:02/05/09 17:09
>>311
それは言語の機能として型に対する演算子の処理を自分で作れるように
なっていて、ライブラリがそれを利用して作られているからということ。
文字列型というものはC++の言語そのものにあるんじゃなくてライブラリの
中にある。
>>316
そそ。なるべく本体は小さく保とうという精神がC++になっても受け継がれている。
しかし、内部が小さくてもC++では外部がばかでかくなり、今まで一番言語仕様
が大きいと言われていたAdaをもしのいでしまった。
>>315
その結果として、現在(多分)標準C++準拠と銘打っていても実際はbuggyな
処理系だらけです。
>なるべく本体は小さく保とうという精神がC++になっても受け継がれている。

うそつけ
あのクソ汚い文法のどこを見てそんなことがいえるんだ
>>319
出たな!「C++の文法は汚い」厨!
「汚い」は「小さい」の反意語なのか?
322C++房:02/05/09 18:11
C++の文法は世界一キレイです。
諸君、ここはCスレだということを忘れていないかい?
>>323
CとC++が渾然一体となったスレもこうなると欲しいな。両者を切り離して
考えないスレを。
それはC++スレじゃダメなのかい?
>>325
C++スレでCの話するとスレ違いだと叩かれる。
ad-hoc polymorphismのどこがきれいなんだ?
ただad hocなだけなのに。
328デフォルトの名無しさん:02/05/09 20:33
>>324
必要性を感じた人間が自ら実行するべき。

Cしかやらない私にはC++の話は邪魔なだけです。
>>328
了解。しばらく様子を見ます。
>>324
必要性を感じた人間が自ら実行するべき。

Cしかできない私にはC++の話は理解できなくていらいらするだけです。
今マウスの座標の取り方を GetCursorPos(&MousePos);
としているのですが,これではウィンドウ上の座標ではなく,
ディスプレイの画面上の座標を取るらしく困っています。
ウィンドウ上の座標をどうやったらえることができるのでしょうか?
>>331
ScreenToClient
ScreenToClient
>>332-333
それはクライアント座標しかとれないんですけど?
GetWindowRectして適当に変換すれば?
>>335
グッジョブ
できました
ありがとうございました
api集とかこれから買いに行ってきます
ESCコードを使ってコマンドプロンプト上に
色つきの文字を出力したいんです。ただし
OSはWindowsXP,コンパイラはLSI-C86(試食)。
(Win98の方は確認済)
実際にやってみると

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

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

>>337
氏ねクソマルチ。
339337:02/05/09 23:10
>>338
すみません。スレ16は間違いです。
(スレの進みに気づかなかったので。)
#include <conio>
textcolor(YELLOW);
cprintf("(・∀・)マンコー");
>>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);
}
> scanf("%s", string);

stringが7文字分しか確保していないのに、
scanfは入力された文字(1000文字なら1000文字)全部詰め込もうとする。
344初心者:02/05/10 01:55
>>343
即レスありがとうです。

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

ということはscanfがいけないということですね?
代わりに使うには何があるのでしょう?
教えてくれたらうれしいです。
そうじゃなくて
取りあえず
char string[8];

char string[1000];
とか
getchar();
を改行が来るまで最大7回ループ。
347346:02/05/10 02:04
345に同意だ。346は忘れたほうがいい。
348初心者:02/05/10 02:05
>>345
それですと無駄に領域を確保してしまう気がするのですが。
それはそれでありなんでしょうか?
できるだけコンパクトにまとめたいです。
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でスレ立てする時にタイトル長くすると怒られますよね。
あんな風にしたいのです。
351349:02/05/10 02:14
スマソ、よくソースミテナカッタ・・・
>>350
ifのあとにelseで警告出せばいいのではないだろうか・・・?
>>348
プログラム始めて三日ならそれでいいと思う。
一週間たてば動的に確保する方法も理解できるはず。
354初心者:02/05/10 02:19
さらに今気付いてしまったのですが、8文字以内は大丈夫だと思ってたら、
8文字目でもエラー発生がしますね…(T-T)
やはり配列を長くしておくのが一番なんでしょうか…
でも1万字コピペして貼り付ける輩がいないとも限らないし。
355初心者:02/05/10 02:24
>>352
その方法なら一応わかるんです。
あ、でも2chのスレタイに一万字貼り付けた事がないからどうなるかは分かりませんが。

>>353
それはどんな方法なのですか?
といっても今の私には理解できなさそうな気がしますが。
>>354
なんで8文字だとダメなのか、よーく調べてみよう。
>>354
細かいところにこだわりたいなら、自力で349を改造するのがいいと思う。
それが無理なら、今はそんなことにはこだわらないほうがいいと思う。
358初心者:02/05/10 02:34
>>356
はい、調べてみる事にします。

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

これからも独学で逝くつもりなので頑張ってみます。
お騒がせしますた。
また来るかも知れませんが。
Cの勉強系スレに常駐するといいかも。
最近寂れてるし。

独学もいいけど、コンピュータの基礎(プログラミング意外のね)の本も
併読するといいよ。
>>358
fgets後sscanf
3日目でバッファオーバーフローの問題に気付くなんてなかなか才能あるカモね。
こんなんでどう?
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;
}
/*
表示だけ。表示だけじゃいやーんなら、>>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 文字分という罠。
>>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;
}
ループ継続条件の不等号の向きを全部逆にしてほすぃ
> for(i = 0; i < len; ++i)
ここは逆にしないほうがいぃ
369366:02/05/10 15:31
いつも不等号の向き固定(大小関係固定)でやってるから。
一般的でないのはわかってるけど、対象固定だと気持ち悪くて。
370370:02/05/10 15:49
>>354
この問題!!!
配列の領域以上に文字をぶち込まれた場合の処理どうやるんですか?
C言語初めて1ヶ月だけど、未だに出来ない・・・.
>>370
fgets()で一度に読み込める文字数を制限してしまえばよい。
>>370
スレ読めばわかると思うけど、ぶち込まれた場合のことを考えるんじゃなくて、ぶち込まれないようにがんばるんだよ。
373370:02/05/10 15:57
>>371
fgets()はファイル読み込みじゃないの?
stdinからもOK?

>>372
頑張ってるんだけどさ・・・.
上司が「じゃあこれは?」とか言ってぶち込みやがるんだよ〜
fgetc( fd ) で地道にやろう。
>上司が・・・〜
当然だ。
>>373
「入力される」のと「配列に入れられる」のはぜんぜん違うよ。
入力されたときのことを考えて、
配列からはみ出ないようににがんばるんだよ。
>>373
もちろんstdinでもOKだよ。openされてるFILE*型なら大丈夫。
char string[10000];
とかにしちゃえば?
さすがに1万文字も入れられることはないし、
スタックの無駄遣いではあるけど。10KB程度全体から見たら微々たる物じゃないかと。
378370: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];
}

・・自信ないなあ
>>378
for(i = 0; i < 7; i++) a[i] = str[i];
str[i] = '\0';
じゃなかったゴメソ
for(i = 0; i < 7; i++) a[i] = str[i];
a[i] = '\0';
三年後,>>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
stdinからの入力なら、単にテキストファイルをリダイレクトするだけの
話では。
385383:02/05/10 16:35
>>384
私の使っているOSはリダイレクトをサポートしていません。
>>385
> 私の使っているOSはリダイレクトをサポートしていません。
えっ?リダイレクトってOSがサポートするものなの?
シェルがサポートするもんだと思ってた。
387385:02/05/10 16:41
>>386
いわれると思った・・・(笑)
やっぱりシェルが提供しているのか。

ちなみに385!=383です。
>>384
えーと、そのプログラムを実行した後に
何度か対話式に引数の入力が求められるんですけど、
それら全ての引数をファイルから入力したいんです。
例えばdos窓とかでだと、
実行後に
実行しますか?
y/n:y
本当に実行しますか?
y/n:
こんな感じの入力画面になりますよね?
これはリダイレクトするだけで、出来るものなのですか?
勉強不足なら本当に済みません。
389デフォルトの名無しさん:02/05/10 16:46
>>388
いちいち「本当に実行しますか?」と聞いてこないようにプログラムすればよい。
390383:02/05/10 16:46
385さんは多分勉強不足の僕をからかっているんでしょう。。。
ほんとにすいません、もうちょっと調べてきます。
391385:02/05/10 16:47
>>390
違うぞ。勉強不足は>>385の方だぞ(ワラ
392383:02/05/10 16:47
>>389
いえ、実際は数値とかの入力なんですけど。。。
393デフォルトの名無しさん:02/05/10 16:48
>>392
コマンドライン引数を使って計算するプログラムじゃないの?
394393:02/05/10 16:49
対話的って書いてあるじゃない(汗
>>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
さっさと答えろおめーら。
>>378だと100文字以上ぶちこまれたときにコケる。
>>396-397
その前の質問しろ
s/その前の/その前に/
>>397
グヒヒ
402 ◆GpSwX8mo :02/05/10 17:05
質問です。
396で
(1)形の違う波が衝突してすり抜けるようにする方法
(2)固定端や自由端にする方法
はどうすればいいんでしょうか。
これはコンパイルしても浮動小数点のエラーは出ますが問題なく実行できます。
いろいろ考えてみたのですが、
(1)は初期条件をうまいこといじればできそうな気がしますが、どうも
すり抜けるというか干渉しあいながらすれ違うみたいな図ができてしまいます。
(2)は周期条件をいじればできそうな気がしますが、もとの図と同じように
ただ往復する波の図ができてしまいます。
どなたか心当たりのある方、レスお願いします。
自分も新たなことがわかり次第、書き込んでいこうと思います。
403 ◆reqfwMkc :02/05/10 17:06
>>397に偽者が出たのでトリップ変えます。
ちなみに#1でした。
subback.htmlを更新
405383:02/05/10 17:09
>>395
そうなのかもしれませんけど、そのプログラムのソースが手に入らないんですよ。
厚かましい事この上ないですけど、実際に僕が質問した事は初心者レベルで実行可能かどうかだけdめお教えて下さい。

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

>>393
で、出来そうでしょうか?
>>388
> これはリダイレクトするだけで、出来るものなのですか?
できる。
407383: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言語のプログラム書くのに便利なソフトって何がありますか?
コンパイラするソフトではなく、プログラムを書くソフトでお願いします
>>409
vi
>>409
須れ違いの鼬買い
412デフォルトの名無しさん:02/05/10 17:42
スレ違いって、では、どこで聞けばいいんでしょうか?
>>409
notepad
edlin
414デフォルトの名無しさん:02/05/10 17:46
>>413
ありがとうございます
ねたのつもりなんだが・・・
416デフォルトの名無しさん:02/05/10 17:50
>>415
他にどんなのがいいでしょうか?
emacs
マジレス
根っからのWinnerと限定してvi,emacsはじゃ排除

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

SAKURAはフリー
統合環境はそれ以外ではほとんど使い物にならないから特殊用途
viviと秀丸はシェア
マジレス
type con >source.txt
>>419
立派なエディタだねw
421デフォルトの名無しさん:02/05/10 19:07
>>396
つーか、ここで聞かないでシミュレーション板で聞けば?
あと、その近似法だと波が干渉するのは当然だ。
>>419
DOS時は、数行で終わるファイルはそれで作ってた。
なつかしぃ。
423 ◆reqfwMkc :02/05/10 19:54
>>421
レスどもです。m(_ _)m
板移ることにします。
>copy con test.c
だべ?

つーか、ソースなんか
#include <con>
の一行で済ませろ
>>424
冷静に考えると可能なのよね・・・。
426342の初心者:02/05/10 20:37
皆様いろいろとありがとうございました。
いろいろと調べた結果、根本的解決にはなっていませんが以下のようにする事で解決しました。

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

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

ただ、調べていくうちに、解決策としてポインタとやらが有効なのではないかと考えています。
>353様のおっしゃられたメモリの動的確保を勉強中です。
入力された分だけメモリを確保するようにしようと思っています。
char string[9] = {0};
にしといた方がいいよ。
428scanf推進派: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);
}

は、どうでしょうか?コンパイルしてないのでうまく動作するかはわかりませんが...
また、質問の内容とずれていたらスマソ
UNIX環境でプログラムから自分が実行されてる
ウィンドウのサイズ(文字数)を調べる方法知ってる人教えてくれ。
>>429
取りあえず寝ろ。
とりあえず意味が分からない。
>>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);
}

こんな事してるんですが、もっと早い方法ってありますか?
curses使え
>>428
そのscanf()の使い方だと振り出しに戻ってるような…
CPUにそういう専用命令があるかも。
あと、unsigned shortとしておけば、
&は要らないとおもう。
>>434
ありがとう。
curses
ってさ"かーしぃす"って読んだらいいの?
>>433
激しく機種依存だけど、union使ったら?
>>439
どんな感じに?
>>433
環境を特定しないような一般的なレベルでは、それがいいのでは?
それ以上気にするなら、メモリアクセスのスループットを最大化するこ
とを重視して最適化するのがよいと思う。組み込みプロセッサとかは知
らんけど。
>438
最後は ず の方がかっこいい。
443433:02/05/10 23:07
皆さんアドバイスありがとうございます。
ところで、どのように共有体を使ったらいいのでしょうか>>439
興味あります。
444名無しさん:02/05/10 23:08
printfなどの出力は、今では簡単にできますがもともとは誰かが設定した関数printfを使っているわけですよね。
そう考えて、どんどん根底まで突き詰めていくと(つまり、printf関数を作成した人はその関数内で別の関数を利用していたと考えられます。
が、その関数を定義した人は?というループ)、C言語のライブラリにある関数をプログラミングしている人は、こちらから見れば作成環境がどんどん悪くなっていきます。
どのような方法でプログラミングをしていたのでしょうか?
それとも、C言語というプログラミング言語は、ほかのプログラミング言語で定義されたものなのでしょうか?
>>444
>>443

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

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

アバウトにこんな感じ
447439じゃないけど: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++;
}
つーよーな感じでわ。
>>444
一度、printfのソースを眺めてみればいいと思う。
>>439
実行時間計ってみれ。
コンパイラが最適化してビット操作に置き換えちゃったりすることがあ
るので、コードを確認してみても面白い。
>>444 ソース読めば?
451433:02/05/10 23:22
>>446,447
なるほど。共有体なんて使った事がなかったからそんな発想はありませんでした。
さんきゅうです。
>>446-447,451
構造体のパッキング・・・
>>444
わかりませんか?おかしいですね。
特に、初心者の方はよくわかると思うのですが・・・

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

それがアレですよ、ええと、そうそうstrlen()
こんな調子であなたがやってることをライブラリ制作者はやっているんです
>>444
だいたいそんな感じですが、最終的には OS の機能を呼び出して文字を出力するわけですな。
>>454
もしくはVGAとかBIOS叩く〜
>>454
飛躍しすぎ
誤爆
>>455宛て
458433:02/05/11 00:13
構造体のぱつきんぐって何?
それつおいの?
>>444
基本的にはアセンブラ
まぁ、機械語を書ける兵もいるかも知れんが…
近頃unionを共有体と呼ぶヤシが多いのはなぜだ?
共用体じゃないのか?
462 :02/05/11 01:09
ファイル共有ソフトの関係じゃない?
昔は労働体と言ってたものじゃが…
464C勉強中:02/05/11 01:26
なにやら評判がいいのでK&R本でC言語を勉強してます。

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

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

printf("%d\n", getchar() != EOF);
>>465
それはアドヴァイスではなく答えだ
467C勉強中:02/05/11 01:33
{
int c;

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

}
で、testと入力して実行すると
t1
s1
って結果になるんですがこれでOKです?結果が理解できないです。
>>467
それでOKです。"test"のうち2文字目の'e'と4文字目の't'がprintf内のgetchar()
によって食われ、1になっているからです。
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);
470C勉強中:02/05/11 01:51
>>468
食われて?w;
まず拾ってきた1文字めがEOFじゃないからtをプットしますよね?
プットした=真だから次に1プリントアウトさるのは分かるのですが
eはいずこえ?つぎにeを拾ってこないの?

>>469
理解するにしばし時間を。
while ((c = getchar()) != EOF){ //tをゲト
putchar(c);
printf("%d\n", getchar() != EOF); //eをゲト
}

getchar()使う、読み出す位置、次へ移る
これプログラムの定説ある(´A`)
>eはいずこえ?つぎにeを拾ってこないの?
printf内のgetcharで拾ったよ。出力してないだけで。
>>470
食われてという表現はまずかったかもしれないけど、'e'がEOFではない
もんだから、getchar() != EOFの式が1になって、それがprintfで表示
される罠。
その後またwhileの条件文に戻って、's'をgetchar()してputchar()し、
最後の't'もまた例によって1になる罠。
>>470
ああわかった。どこで悩んでおられるのか。
getchar() != EOFという式が、char型を返すと思いこんでおられるようだ。
この式は1か0しか返さんよ。
475C勉強中:02/05/11 01:58
なるほど。二つ目のgetchar() != EOFでも文字ゲットしてきますよね。
二つ目のgetchar() != EOFを一つ目のときの数字の1とだけしか見てませんでした。
やっと理解できました。ありがとうございますた。
476デフォルトの名無しさん:02/05/11 02:07
>>474
ハァ?
標準入力から一文字読んでその文字を返す関数ですが。
477476:02/05/11 02:08
おっと、式のことか。スマソ
起きたばかりでねぼけてしまった。
478383:02/05/11 02:56
>>406
手持ちの参考書調べてみましたが、やっぱり分かりません。
なんか、一個目の入力で止まってしまって、目的のプログラムが終了するまで
残りの引数が入力されないような状態になってしまうんですけど。。。
なんか、ヒントとか参考になる書籍とかだけで良いので教えてくださいませんかね?
>>478
fgets(...);
fgets(...);
としてユーザの入力を得るなら、
y
y
n
と記述したテキストを用意して、

executable < commands.txt

これで出来る
設問が「確認せよ」だから、答えとしては

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

という記述の方がふさわしいような気がする。
printf("%d\n", getchar() != EOF);
これだとあらゆる入力を試さないと確認したことにならないし。
>>478
何でもいいから次の参考書を買え。参考書はいっぱいあるから尽きるこ
とはない。安心しろ。
>>481
時間が尽きると思われ
>>478
キーワードが幾つか出てるけど、それで検索掛けてみた?
>>479
>>405でソースが入らないと言ってるのに
fgetsならと言いきってしまう所が素敵

>>383
一通り、試してみて駄目だったら諦めた方が良いよ
>>481
482さんの仰る通りそんな事してたら時間が幾らあっても足りません。
意地悪な事は言わないで良書(出きればソース付きの)を教えてくださいませんか?

>>483
リダイレクト以外で何かキーワードが出てきたでしょうか?
リダイレクトでは検索かけてみたんですけど、
どうも参考書に書いてあることと変わらない内容ばかりで…
僕は応用が利かないんでしょうね。。。
けど、もう少し頑張ってみます。
>>484
>一通り、試してみて駄目だったら諦めた方が良いよ
とは一体どういう意味なのでしょうか?
出来るには出来るけど、僕には無理という事なのか、
実質的に無理なのか、どっちなんでしょうか?
多分前者だと思うんですけど。。。忌憚無き意見をお願いします。
ソースが手に入らないでプログラム的に解決する事じゃないなら、
そもそも板違いだろ?
とりあえず、環境は何なんだよ
それによって解答も違うだろ
489デフォルトの名無しさん:02/05/11 07:45
char str[20];

fgets(str,sizeof str,stdin);

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

調べてみたところfflush(stdin)とすればできると書いてあったのですが、Linux+gccの環境ではできないようなんです。
>>489
規格ではfflush()は出力用にしか定義されてない。
>>490
環境依存でも構わないので、何かよい方法はないでしょうか。
>>489
scanf("%*s");
>>489
どういう組み方をしたいのかは知らないが、普通fgetsに標準入力は使わないと思うが・・・
>>493
よく使ってますが何か?
>>494
getsじゃダメダメ?
単にwarning回避したいだけ?
496デフォルトの名無しさん:02/05/11 11:49
>>493
gets() がバッファサイズ指定できるならそっちを使うだが、
現状では fgets() するしかないような。
> 普通fgetsに標準入力は使わないと思うが・・・
常道じゃないの?
>>496
ああ、fgetsってバッファサイズ渡せるのね。
freadしか使ったこと無いよ。。。たしか。
499デフォルトの名無しさん:02/05/11 12:02
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> fgets
>>499
いや、意味わからんて。
stdinのバッファをフラッシュするのって、難しいね。いろいろやってみたけど、
やっぱり直接FILE構造体の中身をいじるしかないみたい。
502デフォルトの名無しさん:02/05/11 12:33
fseek(stdin,0L,SEEK_END);

これはまずいよな・・・・一応VC++ではできるみたいだけど。
503502:02/05/11 12:38
しかも別にフラッシュしているわけじゃないし。
>>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'))
    ;
こんな感じか。
>>485
君はどんな参考書でも役に立つレベルかと思われ。たくさん読め。
つーか問題も分かっててソースも必要と、具体的な要求があるんだから本屋で
探せばいいじゃん。できないなら読解能力不足だ。たくさん読んで読解能力を
身につけよう。
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;
}
こんなんいっこつくればいいやん。
n < bufsize -1
じゃないとまずいね。
if (n < bufsize - 1)
  buf[n++] = c;
じゃないとまずいね。
charが8ビットでない環境(自分は見たことないけど)では、
uint8_t とかはどのように定義されるのだろう???
>>505
んな事は分かってる。
レベルの低さからしても確かにどんな参考書でも多少は役に立つだろうよ。
でも、どんな本にも良い者と悪い物があるだろう、目的の技術が載っていない本だってあるだろう。
俺は何冊も本が買えるほど裕福じゃないし全部読めるほど暇でもないんだ。
また本屋でぱっと見たくらいじゃ分からないレベルだから、ここでお薦めの本がないか聞いているんだ。
昨日からの話の流れで、そのくらい判断できるだろう。
出来なかったんなら君こそ読解力を身につけた方が良いんじゃないか?それとも初めから答える気なんてないのか?
どんな本でも沢山読めっつうようなアドバイスなんて、別にC言語知らなくても出来るだろう。
もしも、一冊か二冊読んだくらいでどうこうなるような問題じゃないのなら謝罪するよ。
だが、もしそうなら君は一体何冊くらいの本を読んだんだ?そのくらいの情報はあっても良いと思うんだが。
質問しといてこういう事を言うのは非常に大人気無いが、君の発言にはちょっとカチンときたよ。

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

>>510
俺はCの本は1冊読んだだけだけど、何を読むべきかなんて他人にはわからない問題かもしれない。
K&Rを激しく勧めるやつもいればK&Rは糞だと言うやつもいる。
>>510
ネットで調べれば?俺はそうしたよ
本のことです
charは決まってるね。
515デフォルトの名無しさん:02/05/11 15:36
>>511
charは1byte。
でも1byteが8bitという決まりはない。
この前、charもintも32bitという環境で開発しているという人がいたな。
使いにくそう・・・・
517デフォルトの名無しさん:02/05/11 15:45
>>510
相手が自分の期待したとおりの回答を出さなかったからといって切れるのはどうかと思うが。

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

1冊だけと言うなら K&R を勧める。
続けるなら推薦図書スレでどうぞ。
>>517
アフォは放置。それがベスト。
>>571
アフォ3級に認定されました おめでとう!!
次は2級をめざしてがんばってね
>>519
アフォ2段の方は言うことが違うわ。
>>571の人!がんばってくれ!!
>>519のアフォ度は測定不能です。
522_ :02/05/11 16:07
a[0] = 0;    // a is int*
a[1] = 1;

*a++ = 0;
*a = 1;
って基本的にどっちが速いの?
gccではほとんど変わらないみたいだけど・・・(最適化激しすぎ)
変わらないなら上のほうが分かりやすいな。
おまえら>>571にプレッシャーかけるなよ。
どんなふうにボケようか困るだろ。

あと約50か……(ドキドキ
ところで>>518が放置したのは>>510だと思うが。
>>519はその辺どう思う?
525デフォルトの名無しさん:02/05/11 16:21
>>519は恥ずかしくてもう出てこれないそうです。
>>522
ケースバイケースで使い分ける。速度と可読性を秤にかけること。大抵の
場合は可読性を取った方がよい。
527デフォルトの名無しさん:02/05/11 16:28
>>571 取り合戦などというめずらしい会場はここですか?
528デフォルトの名無しさん:02/05/11 16:31
C言語ってなんでDOS窓で出てくるんですか?
>>522
前者じゃねぇのかなぁ。なんとなく。
サイズってどっちが小さいのかね。
>>528
たまたまprintfが標準出力に出力する仕様で
たまたま標準出力がコンソール(DOS窓)を指しているだけです。
>>528
EXEを作る際にリンカの設定でそうしているだけです。
>522
その程度だと、どんな環境でも差が出にくいんじゃないか?
aが構造体へのポインタで、更に同様の記述が多くなると
差が出そうだが(後者が速くなりそうだ)、それさえも大抵は
最適化でほぼ同じになってしまう。基本的に読みやすい方で
いいだろうな。
533デフォルトの名無しさん:02/05/11 16:56
おーい。だれか構造体のパッキングって何かおしえてくれー。
>>533
水道の蛇口んところとかで水漏れ防ぐやつ?
>>533
ハッキング?
>>533
中途半端な大きさだとCPUが取得できなかったり非常に効率が悪くなったりする。
それを防ぐために構造体はある境界までサイズを増大させる。
それが嫌ならpackedさせる。
>>536
packedはpascalだね。
538デフォルトの名無しさん:02/05/11 17:01
>>それが嫌ならpackedさせる。
えーと、手元にある参考書(独習C)には特に何も書いていないんですけどどういうことなんですか?
>>537
ごめんなさい、ほんとはDel厨です。

>>538
Cでpackedに対応するキーワードを付ければ構造体のサイズはメンバの合計サイズとなる。
知らないならしゃしゃり出ないでくれる?
541!>>539:02/05/11 17:07
>>540
で、お前は何も答えられないのな。
>>539
C言語自体にはないけど、#pragma packで構造体をパックする処理系も
あるよ。説明書をよく読んでみそ。
>>517
ああいう反応をしたのは大人気無かったと自覚している。
言い訳になるけど、あれ以上ループを繰り返したくなかったんだよ。
昨日は肝心の質問内容には殆ど触れられずに終わっていまっていたから。
なにも言わずに諦めて去るという選択あったんだろうけど。
なんにせよ、ご回答には感謝する、ありがとう。
参考にさせてもらいます。

>511
そりゃ、一般的な技術を学ぶんだったら人それぞれかもしれないけど
今はこちらが問題点をここに書いて、それに合った技術が詳しく解説されている本を求めているわけで。
自分に合う合わないは二の次なんですよ、今回は。
>ああいう反応をしたのは大人気無かったと自覚している。
おこちゃまは背伸びしてみなくてもよいですよ
(最適化激しすぎ)
>>543
redhatつかってんだろ?
なんでリダイレクトしないんだよ?
redhatっていってもLinuxじゃない特殊な環境があるのか?
つか、リダイレクトごときでこんだけひっぱって、
あげくにソース付きの本紹介しろとか言っちゃったら、
なに言われても文句言えないだr(略
549HHH:02/05/11 18:48
四次方程式の解を求めるプログラムを示して頂けないでしょうか
0〜4次の五つの係数を代入するヤシです
検索でアプリケーションは見つかったのですがソースが見れませんでしたッp
>>549
解の公式があればそれをコーディングするだけで終わると思うんだけどいかが?
これっておかしいでしょうか?

KOU *Kou;

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

すみませんでした

数行抜けてました

KOU *Kou;

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


ReadFile(hFile,&Kou,sizeof(KOU)*17,&byteCount,NULL);
>>551
可笑しいです。たぶん
>ReadFile(hFile,&Kou,sizeof(KOU)*17,&byteCount,NULL);
ここを
ReadFile(hFile,Kou,sizeof(KOU)*17,&byteCount,NULL);
こうしたいんだと思う。
×ReadFile(hFile,&Kou,sizeof(KOU)*17,&byteCount,NULL);
○ReadFile(hFile,Kou,sizeof(KOU)*17,&byteCount,NULL);
555554:02/05/11 19:07
ぎゃーかぶったー。
556553:02/05/11 19:08
>>555
ふ・・・世の中考えることは皆同じなのさ。
>>553-556
説法ありがとうです
5時間悩んでいましたが,やっとうまくいきました
558デフォルトの名無しさん:02/05/11 20:14
locateがうまくいかないんです。カーソル移動したいのに。何で出来ないの?
locateって何ですかー。ANSI C にそのような識別子は規定されておりません。
>>559
BASICか・・・。

ANSI.sys入れてエスケープシーケンスとか。
__WIN32__ とか __linux__ とか __MSDOS__ みたいに、
MacOS X を識別できる定義済みマクロってなんか無いでしょうか??
X で定義されて 9 以下では定義されないようなやつ。
>>561
>>1 C FAQ 10.19

9以下の環境とXの両方で試して比較すれ。
563デフォルトの名無しさん:02/05/11 21:14
皆さん、K&Rの例題解いてます?
いまやってるんですが、1問につき1日費すこともあります。
これって遅いですか?
>>563
まあ焦らずゆっくりやれや。ペースはひとそれぞれだし。
565デフォルトの名無しさん:02/05/11 21:19
>>563
心配するな。
俺の場合、5章、6章当たりは3日で1問とかだった。
>>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);
例えばこれで何が出力されるか実際に試さないとなかなかわからないと思うが。
あと関数内にマクロを書いた場合、ソース上のどの範囲で有効になるかとか。

マクロの解釈アルゴリズム具体的にわかる人いる?
>>567
printf("%d", a + b);
に展開されるし、定義した位置から#undefするまでスコープ外でも有効
569567:02/05/11 21:38
>>568
スコープについてはありがとう。
実際にやってみたら意外と4になった。
実際作るとしたらどういうアルゴリズムで展開したらよいのだろうか?
>>569
マクロ a の展開中にマクロ a は展開されない。
マクロ b の展開中にマクロ b は展開されない。
だから
a → a + b → a + a + b
で終わり。・・・のはず。
上で #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
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では無理でした。)
なにか方法はないでしょうか?よろしくおねがいします。
>>572
改めて考えると結構無茶苦茶な言語だな C って(w
最初のプリプロセッサの実装の都合に仕様が引きづられてそうだ。

>>573
scanf の返り値が何かくらい調べろ。
getsしたあとで sccanfして戻り値を調べろ。
576567: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が定義されていないと出た。この場合どういう展開したかわかる?
577567:02/05/11 22:10
すいません。567は勘違いです。わすれて。
578567:02/05/11 22:11
↑567はじゃなくて576ね
>>576

#define b a
の時点でaは展開されるんじゃないの?
#define b b
の意味になるから、bはそれ以上展開されないで未定義。
ってゆうかcppすれ。
アホども、議論する前に参考書でも読め
>>579
>>572を眺めてみよう。
582573:02/05/11 23:15
>>574 >>575

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

読み込みをgetsでやって、その後scanfするというのは
エンターの入力をgetsなら文字として判定できるということですか??
583デフォルトの名無しさん:02/05/11 23:27
>>571
あなたアフォ3級だって。
真面目に答えたのにご愁傷様。
>>582
*scanfの戻り値は実際に代入できた数でしょ?

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

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

返るはず。
いちいちきかねえでライブラリのマニュアル見ろバか
586584:02/05/11 23:32
>>585
私に言っているの・・・・?
聞いているのとはちょっと違うんだけど。
このやり方であっているんでしょうか?

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の中は,あっているんでしょうか?
まちがいました

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の中は,あっているんでしょうか?
APIの話をするならWin32スレに逝け。
590デフォルトの名無しさん:02/05/11 23:57
なんでココの奴らは、

それは〜〜だよ。
すれ違いだから、今後は〜スレで聞けよ。

ぐらいできないのが多いの?
分からないから他にまわすってこと?
板違いだつーのがわからないならもう来んな
592588:02/05/12 00:00
解決しました
板違いすんませんでした
>>591
板違いとスレ違いの違いがわからないならもう来んな
>>574
>改めて考えると結構無茶苦茶な言語だな C って(w
>最初のプリプロセッサの実装の都合に仕様が引きづられてそうだ。

プリプロセッサの動作は旧いCとANSI-Cではかなり違う。
旧いCの方は小技がかなり効きそうだけど、頑張った他人のソースを読むのは
嫌になるに違いない。
>>587コイツ、スゲー馬鹿
>>551
http://pc.2ch.net/test/read.cgi/tech/1017072275/685
参照
596567: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準拠)に依存せずに使えるんでしょうか。
>>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 (終わり)
になりそうな気がして。
>>597
うぃ。 %lu は ANSI 準拠です。 unsigned long で使えます。
Cは死滅言語です。きっぱりやめましょう
>>600
あなたもさっさとプログラマやめましょう。
>>601
やめるも何も>>600はプログラマじゃないよ。
Cを使えないがためにプログラマになれなかったの。
ああ、そうだったわね。
604デフォルトの名無しさん:02/05/12 04:06
最近cを始めたばかりなのですが

int c;

while((c=getchar())!=EOF)

とありますが、何を入力してEOFなのでしょうか?
EOFの値は-1と表示されますが、駄目元で-1と入力しましたが
やはり駄目でした。
申し訳ありませんが教えていただけると嬉しいです。
EOFはcharの範囲外の任意の値
従って、直接EOFを入力することは不可能
キターーー!!

>>604
キーボードのCtrl + Zよ
Windows系ならね
>>604
WindowsのコンソールならばCtrl+Z
UNIX、もしくはWindowsでもcygwinならばCtrl+D
608604:02/05/12 04:12
>>606
できました〜!!
ありがとうございます。
>>605
(TДT)
610604:02/05/12 04:15
>>607
ありがとうございます。
>>610
OSは何使っているの?
612デフォルトの名無しさん:02/05/12 04:18
既出や板違いだったらすいません。
私はプログラミング知識ゼロの超ド素人です。
最近C言語でゲームを作りたいと思いまして、C言語を覚えようと思ってます。
覚えながら作る(作りながら覚える?)ようにしたいんですが、
必要なモノ、あると良いモノがあったらお教え下さい。
あとわかりやすい書籍なんかも教えていただけると幸いです。
>>612
コンパイラは>>2-3をみて。
エディタはなんでもいい・・・・と思う。強調表示できれば尚よいけど。
>最近C言語でゲームを作りたいと思いまして、C言語を覚えようと思ってます。

気のせいだかわからんがこういう台詞を聞くのは50回目くらいだな
いや、別にいんだけどね。
615613:02/05/12 04:32
強調表示よりも自動的に字下げしてくれる機能の方が便利だな。
>>614
50回か・・・年季が入ってるね。
俺はまだ10回くらいかな。
C 言語でゲームというと数当てなどだろうか。
1スレッド2回半くらいで50回になっちゃうよ、<19>までくると。
C言語まではいいがWin32、C++、DirectXと
進むにつれて挫折すること請け合いだ。
620デフォルトの名無しさん:02/05/12 04:51
ココで聞いてみていいものかどうか・・

> float 32ビット (IEEE754)浮動小数点数
> ±3.40282347E+38 〜 ±1.4E-45と0, ±無限大Infinity、非数NaN

つまり float の最大値最小値て幾らなんですか?
C言語勉強しててふと疑問に思ったんですが・・・
上に引用した説明がつまりよくわかりません。
>>620
表現したい値による
>>620
floatに最大値、最小値はあまり意味がない。
有効桁数のほうが重要。
623わーい:02/05/12 05:17
>>612
C言語を独学でやるつもりなら、
大きな本屋に行って「〜入門」系の本を立ち読みでもして、
自分でこれなら良いかもって思うくらいのやつが見つかるまで買わない
っていうのが良いと思うけど。最初は本屋で勉強するつもりで。高いしね。
このスレの最初の方に良いのが書いてあるのかもしれないけど…
>>620
なにが知りたいのかよくわからないが、IEEE754のはそのとおり。
あなたの処理系がIEEE754を採用しているかは知らん。
そのC処理系での値なら、採用している表現に関わらずfloat.hに
いろいろ書いてある。limits.hの実数版ですな。引用したのがよくわからないとのことだが、旧2種(なんていうんだか
いまだに覚えられない)についてのページをあたってくれたまい。
>float の最大値最小値
>±無限大
などといまさら言ってみる。
#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)
を追加するのもお勧め♪
627626:02/05/12 06:46
#define XE A(E)
は、ちょっとした勘違いで、そこに至るまでの
過程を別にすれば不思議はありませんでした(汗)
628デフォルトの名無しさん:02/05/12 07:13
まず、visualc++をたちあげてから
うまく使えない。
俺はDQNだ、鬱。
どうやったら
Cが書けるのか。
Borland C Compilerを使え
簡単だ
>>626
コプリセッサって何?
>>630
地球連邦軍が開発したと言われる幻のガンダムのことだ。
>>631
なるほど。
>>620
"浮動"小数点というくらいだから最大値、最小値ともに表現次第で不定なんだろうな。
よく分からないけど。
>>633
けど、ビット数的な制約はあるよね。
>>634
うん。
無限ということは絶対にありえない。でもdoubleなら滅多に桁数が足りなくなるという事態は訪れないよな。
long doubleなんて実際に使うのかしら。
636デフォルトの名無しさん:02/05/12 11:25
複数の文字列を連結しようとするとき、
sprintf(buf, "%s%s%s", str0, str1, str2);
とした場合、str0〜str2の中に漢字が含まれ、その漢字に%を表すバイトが
含まれていると期待した結果にはならないと聞きました。
漢字を含む文字列を連結する定石を教えてください。
一つずつstrcatするのでしょうか…
初耳です・・・。
>>636
>一つずつstrcatするのでしょうか…
取りあえずこっちの方が絶対安全だね。
こっちの方が早いだろうし
>>636
まあ確かに%と同じ文字コードが含まれていたらだめだねぇ・・・・
ひとつずつstrcatするしかないんじゃない?
640639: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 というわけではない。
642639:02/05/12 11:31
ん?
%が含まれているとまずいのはフォーマット文字列だけだよね?
>>642
俺もそう思ったけど取りあえずstrcatは確実だから奨めた。
確認するの面倒かつコンパイラ無い。
>>636
キミは嘘を教えられています!要注意!
str0〜2の中に % が含まれていても全然普通に動作します。

それはそれとして、連結後の文字列が buf のサイズより長くならないように注意すれ。
645639:02/05/12 11:36
>>644
だよね。
危ない危ない・・・間違うところだったよ。
646637:02/05/12 11:36
良かった(;´ー`)無知をさらけ出したかと思ったよ。
sprintfする時に必要なバッファのサイズが実行してみるまで分からないってことがありますよね?
そういうときはどうするのが最も良いのでしょうか。

私は、tmpfileしてからそれにfprintfで書き込み、返ってきた値に1足した数分、mallocするという方法を
考えたのですが、はっきり言って無駄が多すぎると思うんです。
>>647
strncat()
>>648
それは単に連結するだけですよね・・・?
650636:02/05/12 11:49
あ、、こうやれば漢字じゃなくても自分で確認できた…
sprintf(buf, "%s%s%s", "hoge", "%%", "hoge");
すいません、お騒がせしました。
(聞いたというのはたしかC系のスレで見たということなんですが、
どこだったかな…この過去スレか、Win32APIスレあたりだと思うんですが。)
>>648
そりゃまずい。例えば%18.16fなどで桁数がどばっと増える時のことを
>>647さんは言っているんじゃない?
_scprintfはダメなの?
>>647
> 私は、tmpfileしてからそれにfprintfで書き込み、返ってきた値に1足した数分、mallocする
の部分を、ファイルに書き込まずに初めからmallocすれば・・・?
>>653
mallocでいくら確保すればいいかわからないってことでしょ?
文字列だけなら簡単なんだけどね。
/dev/nullかNULに(v)fprintfで書き込めば
サイズくらい分かるだろう
656652:02/05/12 12:02
_scprintfじゃダメなのか教えてくれよ(;´Д`)
確か前にも同じような話してたし、
もし_scprintfが移植性無いんなら使わないようにしなきゃジャン。
_で始まる名前の関数は*すべからく*環境依存の関数。
>>657
わぉ!マジでWin95が入ってない!
>>658
たとえば>>657のリンク先の互換性にANSIとあっても、
動かないことはありうるってことですね。

どちらもサンクス。
>>659
ANSI準拠の関数には_から始まるものはないだろ?
POSIX準拠の関数にもなさそう。
>>656
なんだよ_scprintfって。思い切りVC++専用じゃねえかよぅ。
アマチュア10年プロ10年、様々な環境下でC/C++でプログラムを書いてきたが
正直言って_scprintfは初めて聞いた。

なんだそりゃ
>>647
int size = snprintf(NULL, 0, "%d", i);
char* buf = malloc(size+1);
sprintf(buf, "%d", i);
free(buf);
_で始まる名前は処理系依存だとANSIで定められている。
よってANSIに対する互換性アリ、ってことか?(w
>>664
ANSI互換と書いてないものもある。
何を基準に決めてるのかはM$に聞いておくれ。
>>664
.NETのunmanageみたいなもんかね。
>>663
snprintfもANSI規格ではないが、Windows系では標準のようだ。でも
UNIXではどうなの?
668デフォルトの名無しさん:02/05/12 12:38
>>667
ISOなんとかに準拠でしょ?
snprintf は C99 標準のライブラリ関数です。 gcc にもあります。
MFCとかはsprintfの結果文字列長は自力計算してるね。
>>669
C99・・・・・時期早々だな
sprintf()で用意するバッファのサイズについては
C FAQでも取り上げられていましたね。

あと、かんけいないが、すべからくの意味は
すべて*ではない*です>>658
時期尚早。。。
exit(0)てどういう意味ですか?
>>671
いいのだ!自分はそんなこと気にしないのだ!
snprintf も uint32_t も __func__ も使いまくり!
可変長配列も使いたいところだが、gccにしか実装されてなくて・・・
677674:02/05/12 16:29
>>676
ありがとうございます。でもなに書いてるのかわかりません。
678デフォルトの名無しさん:02/05/12 16:43
コンパイラのgccとccって違うんですか?
>>677
正常にmain関数を終了した事と同じになると思われ。
どうでもいいけど
>>672
すべからくは*すべて*という意味で、
その後ろに否定の言葉を欲しがるだけでは?
このスレは*すべからく*の意味を考えるスレになりますた。
すべからく[須らく] 意味:ぜひとも
全てという字ではないよ。
では知ったか>>672>>680はすべからく逝ってください。
このあたり、岸田自らが立脚する
「唯幻論」そのものという感じであるがもっとズサンな所は他にもある。
岸田はケンカについて、こう言う。
「日本人のけんかというのは、すべからく『怨みを晴らす』という形」。
意味不明の日本語だ。
岸田は「すべからく」を「すべて」の高級表現だと思っているのである。
「すべからく」は漢字で書けば「須らく」で、意味は「ぜひ(〜をせよ)」であり、
つまり「すべからず」の反対語である。
早大文学部卒、和光大数授(「教授」の誤植だろうな、単なる)の岸田センセは、
本書の中で日本語の動詞の語尾変化についても論じていらっしやるが、
「ク語法」(高校古文で習う)については御存知ないらしい。
否、センセだけを非難してはいけない。
管見の範囲では、評論家・上野昂志、同・川本三郎、演劇家・唐十郎、
詩人・鈴木志郎康などが「須らく」を「全て」の高級表現と思い込んで使っている。
この四人に共通することは、いわば反権威・反規範主義である。
そういった人たちが文法規範に無知であること自体はかまわないとしても、
「全て」と平易に言えばすむものを、高級表現だと思って誤用する心は
皇室と縁組したがる成金のようで、卑しい。
その卑しさがファシズムを生んだとするのが、単純化して言えば、
心理学者・フロムの説である。
そこまで見すえた時、初めて、個別科学である心理学が、説明原理を支える一柱となりうるのだ。
頭痛が痛いでふ。
頭が割れるようにかゆいでふ。
こ「岸「意岸「つ早・・・??
意味わからんぞ、ゴルァ!
うーむ、さすが言語スレだなぁ
と、スレ違いを受け入れてみるテスト。
もとい板違いを
わからないとき、ヘルプを読む癖はついてても
国語辞書を引く癖はついてないのかな?
英和は引くけど国語はねぇ。
なまじわかってるつもりなだけにはまると痛いよねぇ。
#define nelem(x) (sizeof(x)/sizeof ((x)[0])) って配列にしか使えないんですよね。 ポインタだと確か駄目ですよね。 どうも好きになれないんですが良く使われている物なんでしょうか。
#define nelem(x) (sizeof(x)/sizeof ((x)[0]))
って配列にしか使えないんですよね。
ポインタだと確か駄目ですよね。
どうも好きになれないんですが良く使われている物なんでしょうか。
#define lengthof(arr)
という形で使ってるけど、わりとよく使われるのでは?
695デフォルトの名無しさん:02/05/12 17:47
初心者ですが、
getpwnam()とかで確保されたstruct passwdの領域って解放しなくていいの?
696695:02/05/12 18:08
getpwnam()じゃなくてもいいんですが、内部的にstaticで記憶されてる
領域なので、使わなくなっても確保されたままになってしまいますよね。
これがメモリリークというか無駄使いになってしまうように思うんですが。
どうなんでしょう。
sizeof(x) って配列にしか使えないんですよね。 ポインタだと確か駄目ですよね。 どうも好きになれないんですが良く使われている物なんでしょうか。
698デフォルトの名無しさん:02/05/12 18:10
>>697
ポインタでも使えるけど・・・・?
ところで、括弧をつけるのは型の大きさを得る時だけだよ。
>>696
メモリリークとは、動的に確保した領域を指すポインタが失われる事を指すから、
静的な領域ならメモリリークとはならないと思うよ。
printf("Hello world.\n") の "Hello world.\n"の部分は内部的にstaticで記憶されてる
領域なので、使わなくなっても確保されたままになってしまいますよね。
これがメモリリークというか無駄使いになってしまうように思うんですが。
どうなんでしょう。
>>697
int *p;とあって、

sizeof(p);
sizeof(*p);

の意味は違うよ。注意。
>>700
をいをい、それがメモリリークだとしたら、実際のプログラムのほとんどが
メモリリークだらけになってしまうじゃないか。
>>700
メモリリークは開放できなくなった領域のことでしょ?
mallocで得た領域へのポインタをfreeする前に見失うとか。
ところでなんで君らはマジレスしてるんですか?
705697,700:02/05/12 18:16
俺はわかってるよ。頼むから、>>692>>696に言ってくれよ。
>>700
それがどうしても無駄に感じるのなら、文字列はすべてファイルに入れておき、
必要になったらmallocした領域に読み込み、不要になったらすぐfreeするしか
ないぞ。それこそ時間の無駄。
このスレはピュアな心のやつが多いのか・・・
>>705
ああ、答える代わりに、揶揄していたのか。
>>705
質問してる人にその内容で質問返しするともっとわかりやすかったかも。
710695:02/05/12 18:30
レスくれた皆さん、どうもです。
staticな領域の解放なんて考えなくていいんですね。
>>710
そうそう。でも一度も使わなかったら警告を出すコンパイラがあるから、
一度は使うようにね。
712デフォルトの名無しさん:02/05/12 18:55
getch って何て読むんデスカ?
713デフォルトの名無しさん:02/05/12 18:56
>>712
げっち
>>712
ゲットチ(藁
ゲチ
げっちゅう
717わーい:02/05/12 20:10
>>716に一票
>>717はユンピョウ
むしろ>>716を無理矢理標準的な読み方として広めたい
2,3年世間とずれてるスレはここですか?
なんだかヴォエーな人を思い出した
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でエラー?
俺は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
画面に出力した文字って消せる?
一文字だけ。
*data[] -> **data
だとすると、

*data[i] = malloc();//つぅかキャストしてやれよ。
なのかなぁ?
スレ違いのような気もするが

>>724
sqrt()の返り値を使っていない、とか。
あるいはgcc -O3だとsqrt()が定数の場合はコンパイル時に
解の定数に置き換えている、とか。
>>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);
}
はできないのはなんでですか?
>>729
だってアレ初期化時のみに有効だし。
初期化終わればただのBYTE型の配列と等価。
731  :02/05/12 22:13
プログラムする時に口には出さないけど頭の中で「printf」や「int」などって何て読んでますか?
アホか・・・
>>731
ぷりんとふ
いんと

口に出すときは

ぷりんとえふ
いんと
734デフォルトの名無しさん:02/05/12 22:19
intっていんと以外に読み方あるのか?汗
いんてじゃ〜
736デフォルトの名無しさん:02/05/12 22:21
画面に出力した文字って消せる?
一文字だけ。
>>734
>>731の周り(もしくは本人)に

「ここのアイエヌティー変数が変なんだよ。ここをアイエヌティーのポインタ変数にしなくちゃ。」

と調子こいているバカがいるのでしょう。
>>729
char a[]="oha";は、char a[]={'o','h','a','\0'};を手っ取り早く書くための特例。
>>734
インテジャー
740デフォルトの名無しさん:02/05/12 22:22
>>737
インテジャーと読む人がいると思うけど・・・
俺もたまにそう言う。
>>736
putchar('\b');
できるとは限らないけど。
イントでもインテジャでもどっちでもいいだろ。好きな方で読め。
743729:02/05/12 22:36
>>730
>>738
ええと、char a[10]="ohayou"; ていうのが特例であって
pa="oha"; やb="ohayou"; は
配列の先頭アドレスを代入しているという事ですか?
bはポインタじゃないからできないと。

""を使うと配列の宣言なしに配列が使えるわけですか?
>>743
char型の配列は主として文字列を表すのに使うから、配列宣言時の初期化のみ、
="aaa"が={'a','a','a','\0'}と同じものだと見なされるの。あくまでも特例。

それ以外の時は文字列リテラルの先頭アドレスを代入することになるので、
配列名には代入できない。
745729:02/05/12 22:42
>>744
ありがとうございました。
もっと勉強します。
746744:02/05/12 22:43
代入したかったらstrcpyを使うこと。
<=>
>>722
一行の文字数がMAX - 1文字を超えているとか。その場合は
fgets(temp, MAX, fp);で。
>>736
改行してなかったら、printf("\b \b");
でいけると思う。
i = i++; は「未定義」らしいですが、「未定義」というのは、例えばこの文に対して abort を呼び出すようなコードを生成しても構わないってことで解釈合ってるでしょうか。
751750:02/05/12 23:28
・・・ふと思ったんですが、どうせならコンパイル時にエラーにしちゃったらダメなんでしょうか?
>>750
i = i;
i = i + 1;

って解釈されないの?それ。
>>752
そうとは限らない。=演算子の右辺と左辺はどちらを先に評価しても構わない
から、i = i;となってもよい。
>>736
printf("\t\b\b");
>>750
OSが壊れたりHDDから煙が吹いたりする処理系を出したとしても
とりあえずANSI準拠、K&R準拠をうたうことはできます。
756デフォルトの名無しさん:02/05/13 00:41
Regetなどの最近のダウンローダーのように、レジュームや、ファイルの分割ダウンロードによる高速化について
書かれた書籍や、Webサイトありませんか?
757デフォルトの名無しさん:02/05/13 00:42
>>756
なんでここで聞くんじゃーー!!
>>756
>Regetなどの最近のダウンローダーのように、レジュームや、ファイルの分割ダウンロードによる高速化について

曲がりなりにもプログラマなら推測できるだろ。
分割すると速くなるのだろうか・・・・
ウェブサイトでも時々無意味に画像をスライスしているところをみかけるが。
c言語でcgiプログラムを作るのはどうでしょうか?
メリット・デメリットなどがありましたら教えてください。
>>760
メリット:高速。
デメリット:文字列操作が大変。可変長文字列対応してないし。
>>760
スクリプト言語に比べてインタープリタを起動しないのでその分の負荷は減る。
>>759
サーバがこちらの通信速度未満に帯域制限している
場合有利。
>>763
ああ、なるほどね。
この前Cでチャットを作ってみたけど、確かに速かった。
でもそれは機能が少ないからのような気がする・・・・
766デフォルトの名無しさん:02/05/13 00:52
つか未だにCのcgiに非対応な鯖もあるので注意
>>766
無料ならほとんど使えない。
768767:02/05/13 00:54
鯖と全く同じ環境をつくって、ローカルでコンパイルしてからアップすれば使えるかもしれんが・・・・
xreaはLinuxでコンパイル済み(これも曖昧だが)のファイルが使える。
とくとくはtelnetでcc使えたはず。
>>766
Cだとシステムの弱点をついたウィルスを簡単に作れるので、鯖会社も
嫌がる罠。
>>770
というか、コマンドを実行できるようにするのが嫌なんでしょ。
コンパイルにはコマンド実行が必須だからねぇ。。
>>771
adminの権限を乗っ取ったらやりたい放題だもんね。
>>772
頼む、rootと言ってくれ。。。
ルート16ターボ
>>773
UNIX鯖とは限らないし〜と言ってみるテスト。
Win鯖なんか使いたくないけどな。
則巻ターボ
777デフォルトの名無しさん:02/05/13 01:31
fw3
bcc32 languageC.cpp glibw32.lib
779デフォルトの名無しさん:02/05/13 21:27
すいません教えてください。
バイナリファイルにデータを入力する際に
ソートして入れたいんですが(比較するのは入っているデータ
バイナリファイル上でひとつずつ比較していくのと
比較するデータとされるデータをメモリに格納してから
計算するのではどちらが効率的なのでしょうか?

>>779
ファイル + に 

だと出力するものだと思う。
比較しながらメモリに格納してそのまま書き出すのが早いと思う
782やばいっすよ!!:02/05/13 21:59
整数を3つ入力→数の小さい順に出力
これはif文を使って作るものなんですか??
>>782
つぅかお前は誰だ?
784やばいっすよ!!:02/05/13 22:04
>>783
明日プログラムのテストを控えた者です。工房です。
ならネットで遊んでないで勉強しなさい。
>>782
そんなお前に大ヒントだ。

クイックソートと言うキーワードで検索だ!
これで友達よりlogx分速いプログラムが書けるぞ!
>>779
メモリ領域があまりとれないなら、データを順方向に探索するだけでソート
できる、マージソート法というのがあります。一時的にランファイルという
作業ファイルを作成する必要がありますが、ほとんどメモリを食わずに
クイックソートと同じオーダーでソートできます。

ただし、ファイルの入出力を伴うので、ファイルキャッシュが効かないと激遅
になりますが。
まさに牛刀をもって鶏を割くってやつだな(笑)
別にメモリに作業領域を持ってもいいと思うんだが。
それから、平均的にクイックソートより遅いです
唯一の利点は安定である事だけ。

>整数を3つ入力→数の小さい順に出力
入力時に並び換えろ
791やばいっすよ!!:02/05/13 22:40
>>785
はい。頑張りまっす。
>>786
クイックソートって良さげっす!!テスト終わったらじっくり勉強したい。

・・・・・ということで
792やばいっすよ!!:02/05/13 22:42
>>790
それって詐欺ではないですか・・??
>>792
アホか。基本的な事だぞ。
>>789
もちろんメモリに全部読み込んでqsortかけるのが多分一番速いですね。
795ななし:02/05/13 22:52
>>782
3行で書かないと減点される罠
796COMPILER:02/05/13 22:54
16ビットのDOS汎用コンパイラの入手方法を教えてください。
>>796
google
LSI-Cを検索
799やばいっすよ!!:02/05/13 22:56
ぐおおおおおおおおおおおおお!!!!!!!!!!!!まじでやばすっぎる!!!!!!!
プログラムは高得点あきらめて英語じゃ。
ということで世話になりました。テスト終わったらまた来ます。
がんばれ
つーか、そんなのは小学生のときにすでにやってたけど
当時はテストの点につながらなかったからなぁ。

あーでもあれか。今はテストの点につながるから
逆にプログラミングが苦痛になってたかも。
802COMPILER:02/05/13 23:02
>デフォルトの名無しさん

Micosoft C コンパイラの入手方法があれば教えてください。
洒落だったんだが。。。 <クイックソート
そんな3つでクイックソートなんてしても得られるのはオーバーヘッドだけ・・・。
骨董屋で買うとか
夢の島をひたすら探索するとか
M$の16ビットのコンパイラってまだあったっけ?
MS-C7.0('94)あたりで終わってたような。
>>802
持ってるけど君とは連絡手段が無いので無理だな。
開き直ってMXとかで探せや。
VC1.52じゃなかったか?<最新
しかし、こんな骨董品エムエクースでも落ちてないと思われ
>>805
M$は諦めてBC++Suiteでも拾いなされ。BC++5.02Jは16ビット対応だぞよ。
809デフォルトの名無しさん:02/05/13 23:36
LSICでいいじゃん
C初心者です。
CでRDBのプログラム作ってます。
そこで、射影はできたんですけど選択、結合が作れません。
助言ください!よろしくおねがいします。
811デフォルトの名無しさん:02/05/14 00:42
質問はageましょう。
>>802
WinME DDK を落としてくれば 16bit な MS-C が手に入る。

というか Micosoft って何よ。
バージョンは?
814612:02/05/14 02:08
みなさん、ありがとうございます。
今のところ最高の目標としては「P/ECE」のソフトを作りたいと思ってます。
皆さんの助言をもとに頑張ります。
P/ECEならLSICでもいいと思うんだが
Digital Mars
Watcom
も16bitのコンパイラあるし。
それから米BorlandのサイトにTurboC 2.01が落ちてるよ
ファイル名はTC201.zipかな
WinME DDK 同梱の cl.exe のバージョンは 8.00x と表示された。
817デフォルトの名無しさん:02/05/14 06:26
巫女ソフトage
818デフォルトの名無しさん:02/05/14 13:59
ポインタのポインタの参照渡しってのちょっとわからないんです。
なんかコツのようなものってあるんですか?
strtolの第二引数のように使えば
818
呼び出し側にポインタを返すときつかう。
(関数へのポインタとかstaticな領域とかOSが割り当てた領域など
アドレス不変なポインタを返す)
821_:02/05/14 14:24
凡用系とオープン系の違いってなんですか?
これらの言葉意味って人によってまちまちですよね。
822デフォルトの名無しさん:02/05/14 14:34
>>821
ぼんようじゃない。汎用。は・ん・よ・う
823_:02/05/14 14:50
すみません・・・
汎用系でしたね。

特定のプログラムを組み込んで、ソフトを作ることですか?
Cすれでホスト系聞くなよ
>>824
じゃあどこで聞けばいいんだよ!
個簿留スレか?
そもそも言語スレで聞くべきか?
827825:02/05/14 15:06
ちなみにあたいは>>821じゃないから。
情シ板に逝こう
ム板なら初心者質問スレぐらいか
gooooooooooooooooooogle!!
汎用系→汎用機。
オープン系→UNIX、Linux、Windows
>>825
逆ギレ?
char mes[256];
int num=100;

このnumをmesに文字列としていれたいのですが,一番適切な方法とはどういうのでしょうか?
boost::lexical_cast<>()
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 );
こうしますか?
>>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 );
こうしますか?
>838
ワラタ
なんだ。ただの荒らしかよ。
842838:02/05/14 23:43
あぁ、、半角スペースが一つにまとめられていたのね・・・・
私はしないな。
843デフォルトの名無しさん:02/05/14 23:43
名前のない構造体を関数に渡すなにかよい、できれば移植性のある方法を教えてください。
>>843
名前つけるかtypedefしろよ(ワラ
なんで名前をつけないんだよ(ワラ
>>839
なんとなくわかった。
引数の列をそろえたいのね
名前を付けると愛着がわいちゃって誰にも渡したくないじゃないですか
847デフォルトの名無しさん:02/05/14 23:46
>>844
 構造体がイパーイあるからです
 よろしくおねがいします
>839
いかに無駄な努力かということがよくわかるな。
>843
名前くらいつけてやれ。減るものじゃないし。
>>843は幼少の頃、孤児院にいたんだろ。
んで、名前が無い。そうなんだろ?
ネタは読めてるっつーの。
>>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
型名は?
typedef
struct {
 char type_name[0xffffffff];
 void* p_struct;
} Type;

これでどうだ?
>>847
俺もさ、関数が1000個とか2000個とかあると、こいつらにいちいち名前つけずに
すめばなーと思うことはあるよ。でもな、世の中そんなにうまくできてねーんだ。
名前つけなきゃ関数を区別する手段がないんだよ。
構造体だって同じことだ。
名前自動生成ツールでも作るなり、連番で名前付けるなりしてがんがれ。

なお、英和辞典の見出し語を頭から順番に使ってゆくという方法は、
予約語等とぶつかる可能性があるのでおすすめできない。
lambda
856デフォルトの名無しさん:02/05/15 00:08
>>854
関数ならかんすうポインタでいいじゃん。
(*func[2000])();
857 :02/05/15 00:16
結局 名前はいるじゃん
マシン語埋め込めば名前は要らないと思われ
>>854
「xより大きいなら非ゼロを返す関数」
(xは実行時に決まる)とか、
「行のn番目のフィールドを比較する関数」
(nは実行時に決まる)とか、動的に関数を
作りたいことがあるけど、Cなら名前つけざ
るを得ないなー。

関数型言語なら無名関数が作れるし、
オブジェクト指向言語ならインスタン
スを使えば良いけど。
ttp://chizuru.bunkasha.co.jp/~yui/feb02.html#0226_3

「Cでは NULL == (void *)0 とは限らない」だそうですが、そうなんですか?
861843:02/05/15 01:43
>>858
じつは僕もハナからそれがいちばん強力な解だとは思いますが移植性が限り無くゼロなのでためらいます。ふと、みんなはどう考えるかと思って。
すみませんヒマつぶしノ質問だとおもって忘れてください>答えてくれたひとたち
variantみたいなのにしてもいいが、
vtblっぽいのもたせて全部オブジェクトにするって手もある。

メンバを動的に追加する(この場合メンバに名前かIDをつける必要があるが)とか、
DBにデータを全部もたせてアクセスメソッドだけを提供するのも、有りだとは思う。

マクロを多用すれば品雑・定型的な処理も楽に書ける場合があるしね。
数が多いとはいっても、それぞれに意味はあるんだろう?
863342の初心者:02/05/15 05:15
この間は皆様にお世話になりました。
またまた質問です。
下のようなプログラムを作ってキーボードの入力をアスキーコードに変換して確認してみました。
半角英数記号はいいのですが、バックスペースやCtl + Cのようなものはどのようにして扱われているのでしょう?
下の場合、右矢印→もバックスペースも8として出力されてしまいます。

#include <stdio.h>

main()
{
int i;

for(;;) {
i = getch();
printf("%d\n", i);
}
}
>>860
過去ログ読んでくれ。
3スレに一度はその手の論争が起きてるから。
>>849
誹謀中傷になってて笑えない。
>>843
 構造体を malloc で作って、そのポインタを渡すのは?
 参照渡しではなくなってしまうけど、渡せるよ。

 でも、移植性とか可読性考えると、無理にそんな方法取るのは馬鹿かと・・・アホかと・・・(^^;
 ネーミングは本当に大変だけど、考えてあげようよ?
867デフォルトの名無しさん:02/05/15 06:51
>>866
じゃあ私のソースを見ても笑わないでね(;_;)
>>863
>>863
getchってなんじゃ〜
getcharだろ〜


(getchはMS-DOS専用の文字入力待機関数じゃなかった?入力した文字は読みとらなかったような・・・・)
>>868
Win32でもサポートはされている。移植性は無いが。
>>863
cursesにもgetchあるよ〜ん(by UNIX

# ローカルっちゃぁローカルかもしれんけどな
871870:02/05/15 07:37
あうち・・・>>863向けじゃくて>>868向けね(>>870)
寝ぼけてもうた:-P
872869:02/05/15 09:11
>>870
cursesかー。そりゃ知らんかった。FDcloneだと
・ttyからのread(2)でgetch()
・stdinのselect(2)でkbhit()
とかやってたから自前で実装するしか無いのかと思ってた。
>>872
cursesのgetchは端末から文字を得る関数
>>868のそれとは振る舞いは別物
呼び名が一緒ってだけですな
874デフォルトの名無しさん:02/05/15 10:44
>>873
Windowsとかだとgetcheだよね?
875デフォルトの名無しさん:02/05/15 12:44
OpenFileMappingでマッピングしたデータは
fgetとかfreadとか利用して読んだりできますか?
>>875
何のためのマッピングだと小一時間ほど問いたい。
>>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型に変換する関数ってないのでしょうか?
>>879
別にそのコードで出来るんじゃない?
ひょっとして、
s = p + '0';
みたいなことがやりたいのか……?
>>879
C++使え。
s = char (p);
ってな具合にint型をchar型に変換するchar()関数がある。
883879: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;
}
大体やりたいこと書くとこんな幹事です。
構造体だからまずいとかですかね?
884879:02/05/15 14:40
>>882
C++は使えないんですよ。
事情が合ってLinuxでC言語使ってmす。
もしかしてLinux板で聞けってやつですか?
885デフォルトの名無しさん:02/05/15 14:41
ハァ?
>>879
つーかできねーって言い張るんならその根拠(エラー、出力内容とか)を説明しろよ。
887256: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)
が、返って来る。

なぜじゃ・・・
doubleに%fって問題ないの?
890888:02/05/15 15:11
あ。
%lfにすればできるかも。

鬱死
complex SUMofCOMP(x,y)
complex x,y;
{
...
}
懐かしいような気が
>>879
>>887がほしかった答ならば、iを10進表記した文字列を取得するには?
と、きけばよかったようですな。
元の質問をそのまま素直に解釈するとたしかにああいう答が返ってくる。

ところで>>882のは関数じゃなくて、C++のキャストの記述法だったと思うが?もちろんC++でも従来の記述法も可能。
>>892
よく分からんのだけど>>882はcharのコンストラクタじゃないかな
型変換関数
typecast?
>>893
ただの cast。
897デフォルトの名無しさん:02/05/15 17:20
C言語の標準入力のバッファを直接参照できるような
関数ないし手段がありましたらぜひとも教えてください。
>>897
stdin開いてメモリマッピング。
>>898
そういえば、stdin とかは FILE 構造体でしたね。
ありがとうございます。
900デフォルトの名無しさん:02/05/15 18:07
(・∀・)900!
今日中に1000に逝くぞ!
901デフォルトの名無しさん:02/05/15 18:15
ともっち!
902デフォルトの名無しさん:02/05/15 18:16
ともっちのこと大好き!
ともっちって確か絵を書くのが好きなんだよね。
筆でかり裏の辺りをちょこちょことしたりして、
いろりろ遊びたい。。
お前ら来るスレ間違ってるよ(w
仕事中なのに妄想だけがどんどんいっちゃうよー
ともっちの棒、おいしそう!
ともっちの棒、ぺろぺろしたい。
907デフォルトの名無しさん:02/05/15 18:21
>>904
どうせ1000ゲットまでいいかげんな書き込みしかねぇんだろうが
908デフォルトの名無しさん:02/05/15 18:22
ともっち!はずかしがらなくていいんだよ!
ともっちにきたないところなんてないんだから。
おじさんがともっちのすみからすみまでぺろぺろしてあげるからね。
909デフォルトの名無しさん: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
激しく同意。
なんかこうしてるとともっちを大勢で回してるような
気分になれるから不思議だ。。
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
おれは世間一般じゃノンケで通してるけど、
やっぱり男の子が好きなんだよね。
日頃のたまりに溜まった願望がこうして出てきちゃう。
ともっちは酷い人です・・・
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
男子校にはどういうきっかけをつくれば入り込むことができるのかなぁ。
ともっち自身がダメならだれか友達紹介してくれないかな
932デフォルトの名無しさん:02/05/15 18:35
>>931
俺は友達のほうよりともっち自身じゃなきゃだめだ!!
次スレ
934デフォルトの名無しさん:02/05/15 18:35
>>933
URLは?
ともっちは酷い人です・・・
立てれ
その気にさせといて独りおれをおいていくなんて
938デフォルトの名無しさん:02/05/15 18:39
あと、関係ないんだけど同性愛板、ブラクラとグロ多すぎ
高校生関連の書き込みは殆どそうじゃん!やれやれ
939デフォルトの名無しさん:02/05/15 18:39
>>936
俺がたてていいのなら、ゲイに染めたやつを立てるぞ!
940デフォルトの名無しさん:02/05/15 18:40
>>938
だからこっちでもゲイようのスレの需要があるんだよ。
お前ら、間違ってもタイーホだけは気をつけてください
942デフォルトの名無しさん:02/05/15 18:42
やっぱりいるよね。
プログラム板に、ゲイ用のスレ!!!
943デフォルトの名無しさん:02/05/15 18:43
>>941
ともっちの話で盛り上がっているときに
そういう水を差す話は止めてください。
そういうのは別のところでやってください。
【カワイイ男子高校生】お兄さんたちが優しく教えるC言語スレ!【専用】

こんなのでどうでしょうか?
945デフォルトの名無しさん:02/05/15 18:46
カワイイ童貞の男子高校生専用の方がいいかな?
駄スレの再利用ならまだしも
普通のスレを乗っ取るのはやめてくれよ。
>>946
そうね、少し行き過ぎたかも、反省します
948デフォルトの名無しさん:02/05/15 18:57
gccリリース間近
次スレは950が
gcc3.1リリース間近。ウレシー
951デフォルトの名無しさん:02/05/15 21:07
>>946
>>947
このスレはもう次スレがたってしまっているので、
ゲイの書き込みをしたところで、乗っ取りにはなりません。
952C言語:02/05/15 22:05
分割コンパイル、make使い始めたのですが
外部変数の定義、再定義ファイルをそれぞれ作ってインクルードするのと
#ifndefを使って再定義をするのとどっちがかっこいいですか
プロフェッショナルな方の意見をお聞かせ下さい
初心者の質問で恐縮です。
>>952
再定義?
変数の定義は一度しか出来ません。
宣言と定義のことだったらC FAQ嫁姑。
954C言語:02/05/15 22:16
>>953
外部変数dす
ひとつのファイルには
#define MAX 40
float A[MAX];
ってやって残りのファイルには
#define MAX 40
extern float A[MAX];
ってやりたいってことです。
ヘッダファイルに extern float A[MAX]; と書き、それをインクルードする .c ファイルのひとつに float A[MAX]; と書く。
956C言語:02/05/15 22:26
>>955
#ifndefを使うのとどっちがオススメですか?
957デフォルトの名無しさん:02/05/15 22:26
>>956
ゴルァ!!
>>956
どう使うつもりなの?
959C言語:02/05/15 22:29
>>957
わかりません
960C言語:02/05/15 22:31
>>958
こんな感じです
- sample.h -
#ifndef _sample_h
#define _sample_h
int x;
#else
extern int x;
#endief
>>960
ヘッダーファイルの中じゃなくて、.cファイルの中で宣言しろって。
962C言語:02/05/15 22:39
>>961
わかりました、そうします。
ありがとうございました。
#ifdef EXTRN
#define EXTERN extern
#else
#define EXTERN
#endif

とやり、すべての外部変数にEXTERNとつけておく。
main()のあるファイル(本当はどれか一つならよいが)に
#define EXTRN
と書く。
964デフォルトの名無しさん:02/05/15 23:05
今日はじめて関数ポインタというものを知ったのですが、こりゃやみつきになりますね!
>>964
C言語でもクラスごっこが出来る。w
しかし、時代は関数ポインタを異端だとし始めている罠。
966デフォルトの名無しさん:02/05/15 23:08
あと、C++初めて2年になるのですが、今日初めてexternの効果を知りました!こりゃ感動しますね!
いままでの僕がアホみたいに思えました!なにしろ別のファイルから別のファイルの変数にアクセスする方法を知らなかったのですから!
クラスから他のクラスを参照するときなんて、いちいちSetメソッド作ってポインタをメンバに保存してたんですよ!
あーもう!
>>964
その勢いでC++の仮想関数を学習してしまうとよい罠。
>>966
一歩間違うと収集付かなくなるぞ。
>>967
割り込みベクタみたいなテーブルがあるんでしたっけ?確か。
970デフォルトの名無しさん:02/05/15 23:10
>967
いやあ。。オブジェクト指向はほとんど学習しましたよ。当然ポリモも。しかし本当に僕は基本的なところができてなかったんですねえ。
>>970
いや、知らない方が良かった、という事も。(汗
972デフォルトの名無しさん:02/05/15 23:19
>>966
で、ポインタと配列は同じもの、という誤解のもとに
a.c:
int a[10];

b.c:
extern int *a;

とやって、悩むわけね。
>>969
ポインタが親のクラスを使っていても、実際に指しているクラスが派生
クラスならば、オーバーライドされた派生クラスの関数を自動的に
呼び出してくれるよ。これがないとポインタは全滅してたかも。
974デフォルトの名無しさん:02/05/15 23:37
>972
まさか!ぼくが読んだポインタの本はそんな勘違いを起こしませんよ。
しかしその場合、どうすればいいのかな?両方ともa[10]で宣言すればいいかな。
(1 << 2)
これってどういう意味なんですか?
>>974
>ぼくが読んだポインタの本はそんな勘違いを起こしませんよ。

いや、お前が・・・
977デフォルトの名無しさん:02/05/15 23:44
>957
00000000 00000000 00000000 00000001

00000000 00000000 00000000 00000100
978デフォルトの名無しさん:02/05/16 00:02
>>977
戻りすぎだろ。。。汗
975か?
>>961
ネタなのかポカなのかマジなのか分からん…
981980:02/05/16 03:00
>>980は、2重で立ててしまったものなので
削除依頼に出しました。正しいスレは
http://pc.2ch.net/test/read.cgi/tech/1021459016/l50
982デフォルトの名無しさん:02/05/16 10:05
そしてこっちのスレは最後までゲイネタを語り合うことに使いましょう!!!
ともっちは今日もおなにしてるんだろうなぁ。
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 ともっち
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。