4 :
デフォルトの名無しさん :02/05/07 16:38
JAVAとC言語ってどんな違いがあるんですか?
金融系のITでは、どちらが主流なんですか? なんかコボルというのは前時代のプログラムで こんなの学んでも食えんと言われてしまいました。
>>9 いやコボルだろ〜
CはUNIX記述用言語として生まれただけあってUNIXと制御系でよく使われる。
制御系っていうのはウイルスからPCを守ったりする ソフトを開発する仕事のことですか? あと、10氏レスを見ると、UNIXを学ぶなら、先にC言語を学んだほうがいいみたいな 感じですね
制御系ってOSとかじゃないの?
Cが使われる制御系ってプロセス(工程)制御とか エンジン制御とか埋め込み系じゃなか?
C をやる前に Lisp か scheme をやったほうがいいYO
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 そう言う風にする危険性より、MainLoop と言うへんてこな変数名や
SecandInit とか言う Manoy に匹敵するスペルミスが、あなたの
プログラムを糞なものにする危険性のほうが高いでしょう。
>>30 ガ━━Σ(゚д゚lll)━━ン
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄ ̄( ゚Д゚) ̄ ̄| < もう寝るよ。おやすみ。
|\⌒⌒⌒⌒⌒⌒\ \
| \ \  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\ |⌒⌒⌒⌒⌒⌒|
\ |_______|
33 :
デフォルトの名無しさん :02/05/07 21:18
>言語仕様が巨大で、処理系も巨大でも、サイズの最適化が強力ならプログラムのサイズ小さくできるんでないの? スレの流れを読んでよ。制御系の話でしょ。 制御系と言うことはOS上で走らせるプログラムじゃないんだから汎用的なコンパイラの 最適化は無意味じゃん。 22にわかりやすく言えばOS(組み込みにOSも何も無いんだけど)に当たる部分も書かなきゃ いけないということ。
>>33 > 制御系と言うことはOS上で走らせるプログラムじゃないんだから汎用的な
> コンパイラの最適化は無意味じゃん。
ハァ ?
> 組み込みにOSも何も無いんだけど
ハァ ? (まあ、ない奴もあるけどさ...。)
ハァハァいうな。うみびらきならもうすぐだ。
善意に取れば
>>35 は「ソースとオブジェクトが良く対応してた方が
(つまりソースがある程度低レベルな方が)組み込みのデバッグが楽」
といいたいのかも知れん。
39 :
デフォルトの名無しさん :02/05/07 22:02
なんかこう、ちょびっとasmとかm80とかの使い方覚えて 最適化のこと分かった気になって、ついつい2chでかたりはじめちゃう連中、 ほのぼの。
>>37 > つまりソースがある程度低レベル
お前のプログラムみたいだな。(藁)
43 :
デフォルトの名無しさん :02/05/07 22:26
√藁
そう、よかったわね。
>>37 そんな変な取り方すんなよ。
別に制御系と言ったって、特殊なコンパイラ使ってるわけじゃない。まあ、
CPU が普通と違うとか、いろんな領域のアドレスがちゃんと指定できる
(どっちかってーと、リンカの仕事もあるけど) 等の機能はあるけど、
最適化に関しては、普通のコンパイラと同じだよ。
「組込に OS も何も無いんだけど」に至っては、何年前の話だ ? って感じが
する。まあ、俺もテレビのリモコンなんかは手がけたこと無いから、そのクラス
だとそう言うこともあるとは思うが、ちょっと大き目の LBP とか、銀行の端末
とかなら最近は、OS 乗せるのが普通。特に、GUI と Net (.NET では無いぞ。
TCP/IP とかのことだよ。) と ファイルシステムを備えるものなら、まず OS は
載っている。ちなみに、携帯電話用の OS もあるのは、知ってるよね。
>>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. 標準出力がある幸せ
もろこ!!
>>48 あらあら、言い訳にしか取れなかっただね。ごめんな、あんたにはちょっと
難しすぎたみたいね。
>>49 まあ、そう言う世界もあるらしいけど、制御系一般の話としてはちょっと
ね。ところで、OS 云々はいざ知らず、そう言うクラスの話だと、
「汎用的なコンパイラの最適化は無意味」なのか ? メモリーが少なそう
だからプログラムサイズを最優先にするとかのことを言ってるのか ?
正直、小規模組み込み系の話はそっち系のスレでやって欲しい。
56 :
デフォルトの名無しさん :02/05/07 23:04
不特定多数が相手なんだから、 相手の解釈がどうのこうの言わずに自分の表現を変えてみたら?
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などしているのですが、これは なぜでしょうか?何のためでしょうか?教えていただけませんか? いずれにしてもコンパイルは出来ますし、実行も正常にできます。
どなたか、ぜひ教えて下さい。 Windowsプログラムで、エクスプローラでフォルダを選択して右クリックの[共有]で開く画面(フォルダ共有設定をする画面)を出したいのですが、方法はないものでしょうか。
>>58 一般的に言って足す必要なし。
+4してる本に特殊な状況であることについての説明があるんじゃないの?
もしなければその本がクソ。
理由なんか無いだろ
>>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)は どうしてレジストリいじくっちゃうんですか? 仕組みわかる人教えて
突然ですが私は伊集院光です。水曜25時25分 ゲームWAVE見てね。
>>67 前まで見てたけどお前アフォなので見なくなった
>>58 むかしむかし小さなメモリブロックをアロケートすると4だか8だかの倍数の
大きさにメモリブロックのサイズを調整しようとした時にバグになる処理系があった。
もしかしたらそれのトラウマが感染してるんじゃなかろうか?
なんかこのスレも回数を増すごとに
>>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++ってマニュアルねーのかよ。
なんかみんな親切やねぇ。
初心者です。 10 15 5 → 10 3 を 5 3 というふうにファイル(.txt)の先頭に書き込みしたいのですが、 fseekでストリームのファイルの位置をを先頭にもってきて書き込みすると、 15 5 と2行目が削除されてしまいます。 3 どうしたらうまくいくでしょうか?レス頂けるとありがたいです。
ファイルの中身全部読み込んで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
>>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,-----);
>>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にしないとポインタがスタックにつまれて返せなくなるだろ。
>>110 >>108 さんの意見に同意。
char *ret_strは関数の終了と同時に破棄されるが、文字列リテラルの
アドレスは依然として有効。
>>110 は勘違いをしている。
ret_str配列は無くなってしまうが、
ret_str[i-1]はただのポインタだから
普通に返せる。
と思ったがポインタは消えても文字列リテラルのアドレスは残るか
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
>>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);
これ
123 :
デフォルトの名無しさん :02/05/08 20:39
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
>>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> を忘れずに。
>>119 いや108じゃないけどね(にが藁
>>116 あのなあ。return文にセミコロンが無きゃエラーになるダロー。
本当に使ってるソースを書かずに間違いだらけのを書かれると、
どの間違いについて聞きたいか分からないから手間がかかって
しょうがないんだよ。
>>124 できない。
どう考えても3bitじゃ50を保持できない
>>126 >>128 共用体じゃない。ビットフィールドだ
struct {
int x : 4;
int y : 4;
int z : 4;
int w : 4;
};
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
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しか表せない
intが当たり前のように256bitの時代とか来るのかなぁ?
>>106 すいません…BIN見たのですがどれがどのファイルかわかりません…
>>107 >>オプションを記述するだけ
>>-Ic:\include_file_path\
>>-Lc:\library_path\
具体的にどこに記述するものなのか教えて下さい。
>>161 おぃおぃ
tlink.cfgとかってファイル名書いてあるだろ?
>>161 ガイシュツだけど説明書はないの?
なければHELPの中を隅から隅まで目を皿のようにして探すこと。
int age=50;
int sex=1;
int human=age;
human=sex<<8;
として、ageを参照するときは,human&255とし,
sexを参照するときは,human
>>8 でどうでしょうか?
167 :
デフォルトの名無しさん :02/05/08 21:18
>>165 human|=(sex<<8)だろ。つーか、
なぜビットフィールドじゃダメなのか小一時間樋冷たい。
169 :
デフォルトの名無しさん :02/05/08 21:19
>>165 クリックしちゃったじぇねーか!!
ビットをずらしていたのか・・・
170 :
デフォルトの名無しさん :02/05/08 21:20
>>162 TCW5→BIN
で、この中にtlink.cfgっていうファイルがあるんですよね?
探してもないのですが…
なんでこんな簡単なことできないのだろ…(泣
>>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) は可能ですか?
移植性も考えればサイズ指定すべき。
>>176 long long long int。C2003で対応予定。
教えてください。エラーもないのに実行できません #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
>>175 ,178
だんだん理解できてきました。
tcc.cfgって名前のファイルをカレントディレクトリに作ったのですが、まだできません。
ちなみにtest1.c incre.cってファイルを繋げてコンパイルしたいのですが、
tcc.cfgの中身は、tcc-c test1.c incre.cだけでいいのでしょうか?
本当にたびたびすいません。
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ってなに?
>>194 なんで入力ストリームと出力ストリームが同じなの?
わからんぽ わからんぽ おしえてぽ
FILE *country_fp;
>>194 こういう事する時は、"r+"で開いておいて、fseekなどで切り替えないと
動作の保証はない。
for(i=100;0<=i;i--) の間違えでした。
文字列の行末にある空白を削除するにはどうすればいいでしょうか
>>190 [turboc.cfg or tcc.cfg]
-IC:\TC\INCLUDE
-LC:\TC\LIB
ファイルの中身に記入。
[tlink.cfg]
-LC:\TC\LIB
ファイルの中身に記入。
tcc test1.c incre.c←これはどこのファイルに書けばよいのでしょうか?
ファイルから日本語全角文字を配列に格納する方法を 教えてください。
>>194 country_fpをfopen()したやり方にも夜が、
wとかwbとしたなら、オープンした時にファイルの長さが0になる。
aとかabとかa+bとかしたなら、ファイルの最後に追加することしかできない。
ちゃんとr+とかr+bでオープンしたとしても、
入力した直後に出力してはいけない。間にfflush()かfseek()をはさめ。
このfor文がおかしいのでしょうか?
>>204 tcc test1.c incre.cは、どこにも書かずにそのままコマンドラインから
打ち込むか、またはバッチファイルに書いて実行する。
203 sscanf()
>>204 もしくはmakefileというファイルをエディタで作成し、
test1.exe: test1.obj incre.obj
と書いて、make[enter]とやってもよい。だけど今はやめとけ。
>>208 俺の経験から言わせてもらうと、初心者に分類される人たちは、
プログラムを1行ずつ読むことが出来ていない気がする。
自分で書いたプログラムすら、その挙動が把握できてないというか。
>>212 つぅか丸写し以外でその質問している時点で努力も学力も才能も足りてない気がする。
>>209 -IC:\TC\INCLUDE
-LC:\TC\LIBと書かれた[turboc.cfg or tcc.cfg] のファイルと、
-LC:\TC\LIB と書かれた[tlink.cfg] のファイルは、
test1.c incre.cの置かれたフォルダに入れればいいんですよね?
コマンドラインから打ち込んでもできなかったので、
バッチファイルに書く方法も教えてください。
よろしくおねがいします。
>>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 とかじゃないのか? 自分の環境に合わせろ
打ち込んでも出来ない=コマンドまたはファイル名が違います? それだったらパスを通せ
>>215 test1.c incre.cの置かれたフォルダにはいれなくていいのですか?
>>216 Turbo-Cは、
C:\TCW5\BIN\tcw.exeです。
>>219 コンパイラの設定ファイルだから、
ソースがあるところに入れる意味がない
C言語でデータ配列の中から最大値を求める方法には サーチングしかないのでしょうか? サーチングだと処理に時間がかかっていやなのですが。 何か方法があれば教えてください。
[turboc.cfg or tcc.cfg] -IC:\TCW5\INCLUDE -LC:\TCW5\LIB [tlink.cfg] -LC:\TCW5\LIB これらをC:\TCW5\BINに置いてやってみ。
221です。 サーチングでもソーティングでも処理には 時間がかかるので、一括して処理できるような ものがあればと思ったのですが。
>>221 じゃあ、ただ配列に入れるんじゃなくて、もっと工夫しろ。
データ構造の本を読んで「半順序木」の勉強を汁
>>224 人間に出来ないものはプログラムでも出来ないと思われ(速度以外
>>224 2分探索ならxlogx
バカサーチならx
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]); } } }
>>220 わかりました!
>>223 やってみたのですけど、まだできません…。
コマンドはスクリプト→コマンドで入力ですよね?
単純にソースが間違ってるんですかね。。。
でも試食版コンパイラではできたのですが…。
>>228 if(moji[i]==NULL)
{
}
else
{
printf("%c",moji[i]);
}
まず、Cの薄い本でも読んでくれ。アイデアはおもしろい。
じゃぁ、 tcc test1.c incre.c と入力して、その出力を一切改変せずに、 省略も一切しない状態ですべてここに貼り付けてみろ
>>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 よ
まぁ本来はもちっと難しい方法で解決するんだろうけど、
!=をつかってスリムにしない程の初心者なので良いんではないだろうか。
>>237 if(moji[i]==NULL)
{
}
だから出ないんじゃない?
>>185 宿題スレからコピペ
#include <stdio.h>
rev_put(ch)
{
if (ch != '\n') {
rev_put(getchar());
putchar(ch);
}
}
main()
{
rev_put(getchar());
}
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]); } } とするのはどうかな。
>>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?)でウインドウアプリにしちゃった気が・・。 エラーってさ、、、 「コマンドまたはファイル名が違います」 じゃないよね?
>>245 あっ、使い方間違ってますね(汗
>>246 ありがとうございます!
また質問で悪いのですが、bcc32とは何でしょうか?
#include <stdio.h> int main(void) { char ch = getchar(); if ( ch!='\n' ) main(); putchar( ch ); }
ワラタ
はっきり言ってなんかのコンパイラの設定聞いてる奴がうざい。
>>251 returnいるのか?
他のやつも省略してるし、コンパイラは警告もエラーもはかないし。
まぁ、戻り値無視してるからなんでも適当に付け足せば。
>>256 main()
ならreturn省略してもいいが(よくないけど)
intと書いたのならきっちり値を変えそうよ
>>253 すいませんでした。これからは自粛します…。
>>254 早速DLしてます!これからどっちが使いやすいか試します!
>>258 int main()のreturnを省略していいのはC++だよ。
>>79 がまず覚えるべきなのはgoogleの使い方だとオモフ。
>>259 多分今日味わった苦労が、BCC32のセットアップの時に役立つはず。
>>262 ん〜〜VC++でCとしてコンパイルしてるが、
まぁVC++の警告の出し漏れか。
>>261 だから、よくないけどって書いてあるだろ。
心情的にはわかるってことだ
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 C++で出ないのは標準だからね。Cででないのは仕方ないかな。規格書の
中にreturn省略時のmainが何を返すかまでは書いてないから。
278 :
デフォルトの名無しさん :02/05/09 00:27
main関数までプロトタイプ宣言している奴はいる?
いない
>>273 NULLは ((void*)0) と定義されてあることもあるという
どうしようもないツッコミを入れてみる。
>>281 C++じゃNULLは0だよ
>>xxx
ここはCスレだ
たとえ動作上何の問題がないとしても NULLマクロをヌルポインタ以外の意味で使うのは恥かしい
>>282 ここがC言語スレだと分かってるなら
な
ぜ
C++の話を無意味に持ち出す?
発展前に釘を刺しただけだと思われ
初心者です。 テキストファイルをオープンして、そのテキストファイルに何行のデータがあるか 知りたいんですが、どうすればいいんでしょう?
wc -l
改行の数を数える。
>>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では、前者は一切使わない。
無理して頑張って努力すれば出来ない事ない鴨しれないけど、ワシは知らん。
>>295 ってことは、ディスプレイが原因なのか?
>>292 前者はほとんど使ったこと無い。
C++のオーバーロードの(悪い)例程度に見てる。
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でどうでしょう?
>>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++になっても受け継がれている。 うそつけ あのクソ汚い文法のどこを見てそんなことがいえるんだ
「汚い」は「小さい」の反意語なのか?
C++の文法は世界一キレイです。
諸君、ここはCスレだということを忘れていないかい?
>>323 CとC++が渾然一体となったスレもこうなると欲しいな。両者を切り離して
考えないスレを。
それはC++スレじゃダメなのかい?
>>325 C++スレでCの話するとスレ違いだと叩かれる。
ad-hoc polymorphismのどこがきれいなんだ? ただad hocなだけなのに。
328 :
デフォルトの名無しさん :02/05/09 20:33
>>324 必要性を感じた人間が自ら実行するべき。
Cしかやらない私にはC++の話は邪魔なだけです。
>>324 必要性を感じた人間が自ら実行するべき。
Cしかできない私にはC++の話は理解できなくていらいらするだけです。
今マウスの座標の取り方を GetCursorPos(&MousePos); としているのですが,これではウィンドウ上の座標ではなく, ディスプレイの画面上の座標を取るらしく困っています。 ウィンドウ上の座標をどうやったらえることができるのでしょうか?
ScreenToClient
GetWindowRectして適当に変換すれば?
>>335 グッジョブ
できました
ありがとうございました
api集とかこれから買いに行ってきます
ESCコードを使ってコマンドプロンプト上に 色つきの文字を出力したいんです。ただし OSはWindowsXP,コンパイラはLSI-C86(試食)。 (Win98の方は確認済) 実際にやってみると printf("\x1b[34m hoge"); /* blue */ printf("\x1b[2J"); /* clear */ ESCの部分が改行記号(半角)になって しまいますが、やはり不可でしょうか? (どれかのWin Ver. 以降, DOSが変わったと 聞いたことがあるんですが。) よろしくお願いします。
>>338 すみません。スレ16は間違いです。
(スレの進みに気づかなかったので。)
#include <conio> textcolor(YELLOW); cprintf("(・∀・)マンコー");
プログラミング初心者です。 三日前に突然思い立って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文字)全部詰め込もうとする。
>>343 即レスありがとうです。
>stringが7文字分しか確保していないのに、
>scanfは入力された文字(1000文字なら1000文字)全部詰め込もうとする。
ということはscanfがいけないということですね?
代わりに使うには何があるのでしょう?
教えてくれたらうれしいです。
そうじゃなくて 取りあえず char string[8]; を char string[1000]; とか
getchar(); を改行が来るまで最大7回ループ。
345に同意だ。346は忘れたほうがいい。
>>345 それですと無駄に領域を確保してしまう気がするのですが。
それはそれでありなんでしょうか?
できるだけコンパクトにまとめたいです。
char str[9]; int i,c; for(i = 0;i < 8 && (c=getchar()) != '\n';i++) str[i] = c; str[i] = '\0'; とか
例えば2chでスレ立てする時にタイトル長くすると怒られますよね。 あんな風にしたいのです。
スマソ、よくソースミテナカッタ・・・
>>350 ifのあとにelseで警告出せばいいのではないだろうか・・・?
>>348 プログラム始めて三日ならそれでいいと思う。
一週間たてば動的に確保する方法も理解できるはず。
さらに今気付いてしまったのですが、8文字以内は大丈夫だと思ってたら、 8文字目でもエラー発生がしますね…(T-T) やはり配列を長くしておくのが一番なんでしょうか… でも1万字コピペして貼り付ける輩がいないとも限らないし。
>>352 その方法なら一応わかるんです。
あ、でも2chのスレタイに一万字貼り付けた事がないからどうなるかは分かりませんが。
>>353 それはどんな方法なのですか?
といっても今の私には理解できなさそうな気がしますが。
>>354 なんで8文字だとダメなのか、よーく調べてみよう。
>>354 細かいところにこだわりたいなら、自力で349を改造するのがいいと思う。
それが無理なら、今はそんなことにはこだわらないほうがいいと思う。
>>356 はい、調べてみる事にします。
>>357 >349に未知のモノがあってまだ改造どころではなさそうです。
これからも独学で逝くつもりなので頑張ってみます。
お騒がせしますた。
また来るかも知れませんが。
Cの勉強系スレに常駐するといいかも。 最近寂れてるし。 独学もいいけど、コンピュータの基礎(プログラミング意外のね)の本も 併読するといいよ。
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) ここは逆にしないほうがいぃ
いつも不等号の向き固定(大小関係固定)でやってるから。 一般的でないのはわかってるけど、対象固定だと気持ち悪くて。
>>354 この問題!!!
配列の領域以上に文字をぶち込まれた場合の処理どうやるんですか?
C言語初めて1ヶ月だけど、未だに出来ない・・・.
>>370 fgets()で一度に読み込める文字数を制限してしまえばよい。
>>370 スレ読めばわかると思うけど、ぶち込まれた場合のことを考えるんじゃなくて、ぶち込まれないようにがんばるんだよ。
>>371 fgets()はファイル読み込みじゃないの?
stdinからもOK?
>>372 頑張ってるんだけどさ・・・.
上司が「じゃあこれは?」とか言ってぶち込みやがるんだよ〜
fgetc( fd ) で地道にやろう。 >上司が・・・〜 当然だ。
>>373 「入力される」のと「配列に入れられる」のはぜんぜん違うよ。
入力されたときのことを考えて、
配列からはみ出ないようににがんばるんだよ。
>>373 もちろんstdinでもOKだよ。openされてるFILE*型なら大丈夫。
char string[10000]; とかにしちゃえば? さすがに1万文字も入れられることはないし、 スタックの無駄遣いではあるけど。10KB程度全体から見たら微々たる物じゃないかと。
>>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からの入力なら、単にテキストファイルをリダイレクトするだけの
話では。
>>384 私の使っているOSはリダイレクトをサポートしていません。
>>385 > 私の使っているOSはリダイレクトをサポートしていません。
えっ?リダイレクトってOSがサポートするものなの?
シェルがサポートするもんだと思ってた。
>>386 いわれると思った・・・(笑)
やっぱりシェルが提供しているのか。
ちなみに385!=383です。
>>384 えーと、そのプログラムを実行した後に
何度か対話式に引数の入力が求められるんですけど、
それら全ての引数をファイルから入力したいんです。
例えばdos窓とかでだと、
実行後に
実行しますか?
y/n:y
本当に実行しますか?
y/n:
こんな感じの入力画面になりますよね?
これはリダイレクトするだけで、出来るものなのですか?
勉強不足なら本当に済みません。
389 :
デフォルトの名無しさん :02/05/10 16:46
>>388 いちいち「本当に実行しますか?」と聞いてこないようにプログラムすればよい。
385さんは多分勉強不足の僕をからかっているんでしょう。。。 ほんとにすいません、もうちょっと調べてきます。
>>389 いえ、実際は数値とかの入力なんですけど。。。
393 :
デフォルトの名無しさん :02/05/10 16:48
>>392 コマンドライン引数を使って計算するプログラムじゃないの?
対話的って書いてあるじゃない(汗
>>383 これが「プログラマは楽をするためならどんな努力でもする。」って奴ですか?
#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文字以上ぶちこまれたときにコケる。
s/その前の/その前に/
402 :
◆GpSwX8mo :02/05/10 17:05
質問です。 396で (1)形の違う波が衝突してすり抜けるようにする方法 (2)固定端や自由端にする方法 はどうすればいいんでしょうか。 これはコンパイルしても浮動小数点のエラーは出ますが問題なく実行できます。 いろいろ考えてみたのですが、 (1)は初期条件をうまいこといじればできそうな気がしますが、どうも すり抜けるというか干渉しあいながらすれ違うみたいな図ができてしまいます。 (2)は周期条件をいじればできそうな気がしますが、もとの図と同じように ただ往復する波の図ができてしまいます。 どなたか心当たりのある方、レスお願いします。 自分も新たなことがわかり次第、書き込んでいこうと思います。
403 :
◆reqfwMkc :02/05/10 17:06
>>397 に偽者が出たのでトリップ変えます。
ちなみに#1でした。
subback.htmlを更新
>>395 そうなのかもしれませんけど、そのプログラムのソースが手に入らないんですよ。
厚かましい事この上ないですけど、実際に僕が質問した事は初心者レベルで実行可能かどうかだけdめお教えて下さい。
>>391 前のレスを見逃していました、申し訳ないです。
それと勉強不足はやはり違いなく僕の方だと思います。
シェルが何なのかさえ明確には分からないんですから。
>>393 で、出来そうでしょうか?
>>388 > これはリダイレクトするだけで、出来るものなのですか?
できる。
>>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言語のプログラム書くのに便利なソフトって何がありますか? コンパイラするソフトではなく、プログラムを書くソフトでお願いします
412 :
デフォルトの名無しさん :02/05/10 17:42
スレ違いって、では、どこで聞けばいいんでしょうか?
414 :
デフォルトの名無しさん :02/05/10 17:46
ねたのつもりなんだが・・・
416 :
デフォルトの名無しさん :02/05/10 17:50
emacs
マジレス 根っからのWinnerと限定してvi,emacsはじゃ排除 秀丸 vivi SAKURA cpad等の簡易統合環境 SAKURAはフリー 統合環境はそれ以外ではほとんど使い物にならないから特殊用途 viviと秀丸はシェア
マジレス type con >source.txt
421 :
デフォルトの名無しさん :02/05/10 19:07
>>396 つーか、ここで聞かないでシミュレーション板で聞けば?
あと、その近似法だと波が干渉するのは当然だ。
>>419 DOS時は、数行で終わるファイルはそれで作ってた。
なつかしぃ。
>>421 レスどもです。m(_ _)m
板移ることにします。
>copy con test.c だべ? つーか、ソースなんか #include <con> の一行で済ませろ
皆様いろいろとありがとうございました。 いろいろと調べた結果、根本的解決にはなっていませんが以下のようにする事で解決しました。 char string[8]; scanf("%s", string); ↓ char string[9]; scanf("%8s", string); ただ、調べていくうちに、解決策としてポインタとやらが有効なのではないかと考えています。 >353様のおっしゃられたメモリの動的確保を勉強中です。 入力された分だけメモリを確保するようにしようと思っています。
char string[9] = {0}; にしといた方がいいよ。
>>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環境でプログラムから自分が実行されてる ウィンドウのサイズ(文字数)を調べる方法知ってる人教えてくれ。
とりあえず意味が分からない。
>>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としておけば、 &は要らないとおもう。
curses ってさ"かーしぃす"って読んだらいいの?
>>433 激しく機種依存だけど、union使ったら?
>>433 環境を特定しないような一般的なレベルでは、それがいいのでは?
それ以上気にするなら、メモリアクセスのスループットを最大化するこ
とを重視して最適化するのがよいと思う。組み込みプロセッサとかは知
らんけど。
>438 最後は ず の方がかっこいい。
皆さんアドバイスありがとうございます。
ところで、どのように共有体を使ったらいいのでしょうか
>>439 興味あります。
444 :
名無しさん :02/05/10 23:08
printfなどの出力は、今では簡単にできますがもともとは誰かが設定した関数printfを使っているわけですよね。 そう考えて、どんどん根底まで突き詰めていくと(つまり、printf関数を作成した人はその関数内で別の関数を利用していたと考えられます。 が、その関数を定義した人は?というループ)、C言語のライブラリにある関数をプログラミングしている人は、こちらから見れば作成環境がどんどん悪くなっていきます。 どのような方法でプログラミングをしていたのでしょうか? それとも、C言語というプログラミング言語は、ほかのプログラミング言語で定義されたものなのでしょうか?
>>443 union
{
struct
{
char a;
char b;
} c;
short s;
} r;
r.s = 数字;
swap(r.c.a,r.c.b);
アバウトにこんな感じ
>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 実行時間計ってみれ。
コンパイラが最適化してビット操作に置き換えちゃったりすることがあ
るので、コードを確認してみても面白い。
>>446 ,447
なるほど。共有体なんて使った事がなかったからそんな発想はありませんでした。
さんきゅうです。
>>444 わかりませんか?おかしいですね。
特に、初心者の方はよくわかると思うのですが・・・
たとえば、文字列の長さを調べるのに
int i;
char *s = ...
for (i = 0; s[i] != '\0'; i++)
;
i += 1;
とかやってませんか?
それがアレですよ、ええと、そうそうstrlen()
こんな調子であなたがやってることをライブラリ制作者はやっているんです
>>444 だいたいそんな感じですが、最終的には OS の機能を呼び出して文字を出力するわけですな。
構造体のぱつきんぐって何? それつおいの?
>>444 基本的にはアセンブラ
まぁ、機械語を書ける兵もいるかも知れんが…
近頃unionを共有体と呼ぶヤシが多いのはなぜだ?
共用体じゃないのか?
ファイル共有ソフトの関係じゃない?
昔は労働体と言ってたものじゃが…
なにやら評判がいいのでK&R本でC言語を勉強してます。 p22の演習1-6で getchar() !=EOF という式の値が0か1であることを 確認せよっていうのがどうすれば確認できるか分かりません。 アドバイスお願いします。
>>464 printf("%d\n", getchar() != EOF);
{ 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);
>>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しか返さんよ。
なるほど。二つ目のgetchar() != EOFでも文字ゲットしてきますよね。 二つ目のgetchar() != EOFを一つ目のときの数字の1とだけしか見てませんでした。 やっと理解できました。ありがとうございますた。
476 :
デフォルトの名無しさん :02/05/11 02:07
>>474 ハァ?
標準入力から一文字読んでその文字を返す関数ですが。
おっと、式のことか。スマソ 起きたばかりでねぼけてしまった。
>>406 手持ちの参考書調べてみましたが、やっぱり分かりません。
なんか、一個目の入力で止まってしまって、目的のプログラムが終了するまで
残りの引数が入力されないような状態になってしまうんですけど。。。
なんか、ヒントとか参考になる書籍とかだけで良いので教えてくださいませんかね?
>>478 fgets(...);
fgets(...);
としてユーザの入力を得るなら、
y
y
n
と記述したテキストを用意して、
executable < commands.txt
これで出来る
設問が「確認せよ」だから、答えとしては 規格のこの部分で「〜」と定義されている。 よって、getchar() != EOF という式の値は0か1になる。 という記述の方がふさわしいような気がする。 printf("%d\n", getchar() != EOF); これだとあらゆる入力を試さないと確認したことにならないし。
>>478 何でもいいから次の参考書を買え。参考書はいっぱいあるから尽きるこ
とはない。安心しろ。
>>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 どういう組み方をしたいのかは知らないが、普通fgetsに標準入力は使わないと思うが・・・
>>494 getsじゃダメダメ?
単にwarning回避したいだけ?
496 :
デフォルトの名無しさん :02/05/11 11:49
>>493 gets() がバッファサイズ指定できるならそっちを使うだが、
現状では fgets() するしかないような。
> 普通fgetsに標準入力は使わないと思うが・・・ 常道じゃないの?
>>496 ああ、fgetsってバッファサイズ渡せるのね。
freadしか使ったこと無いよ。。。たしか。
499 :
デフォルトの名無しさん :02/05/11 12:02
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> fgets
stdinのバッファをフラッシュするのって、難しいね。いろいろやってみたけど、 やっぱり直接FILE構造体の中身をいじるしかないみたい。
502 :
デフォルトの名無しさん :02/05/11 12:33
fseek(stdin,0L,SEEK_END); これはまずいよな・・・・一応VC++ではできるみたいだけど。
しかも別にフラッシュしているわけじゃないし。
>>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は糞だと言うやつもいる。
本のことです
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 を勧める。
続けるなら推薦図書スレでどうぞ。
>>571 アフォ3級に認定されました おめでとう!!
次は2級をめざしてがんばってね
a[0] = 0; // a is int* a[1] = 1; と *a++ = 0; *a = 1; って基本的にどっちが速いの? gccではほとんど変わらないみたいだけど・・・(最適化激しすぎ) 変わらないなら上のほうが分かりやすいな。
おまえら
>>571 にプレッシャーかけるなよ。
どんなふうにボケようか困るだろ。
あと約50か……(ドキドキ
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 中途半端な大きさだとCPUが取得できなかったり非常に効率が悪くなったりする。
それを防ぐために構造体はある境界までサイズを増大させる。
それが嫌ならpackedさせる。
538 :
デフォルトの名無しさん :02/05/11 17:01
>>それが嫌ならpackedさせる。 えーと、手元にある参考書(独習C)には特に何も書いていないんですけどどういうことなんですか?
>>537 ごめんなさい、ほんとはDel厨です。
>>538 Cでpackedに対応するキーワードを付ければ構造体のサイズはメンバの合計サイズとなる。
知らないならしゃしゃり出ないでくれる?
>>539 C言語自体にはないけど、#pragma packで構造体をパックする処理系も
あるよ。説明書をよく読んでみそ。
>>517 ああいう反応をしたのは大人気無かったと自覚している。
言い訳になるけど、あれ以上ループを繰り返したくなかったんだよ。
昨日は肝心の質問内容には殆ど触れられずに終わっていまっていたから。
なにも言わずに諦めて去るという選択あったんだろうけど。
なんにせよ、ご回答には感謝する、ありがとう。
参考にさせてもらいます。
>511
そりゃ、一般的な技術を学ぶんだったら人それぞれかもしれないけど
今はこちらが問題点をここに書いて、それに合った技術が詳しく解説されている本を求めているわけで。
自分に合う合わないは二の次なんですよ、今回は。
>ああいう反応をしたのは大人気無かったと自覚している。 おこちゃまは背伸びしてみなくてもよいですよ
(最適化激しすぎ)
>>543 redhatつかってんだろ?
なんでリダイレクトしないんだよ?
redhatっていってもLinuxじゃない特殊な環境があるのか?
つか、リダイレクトごときでこんだけひっぱって、 あげくにソース付きの本紹介しろとか言っちゃったら、 なに言われても文句言えないだr(略
四次方程式の解を求めるプログラムを示して頂けないでしょうか 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);
ぎゃーかぶったー。
>>555 ふ・・・世の中考えることは皆同じなのさ。
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するまでスコープ外でも有効
>>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して戻り値を調べろ。
ありがとう。ついでにもうひとつだけ、 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が定義されていないと出た。この場合どういう展開したかわかる?
すいません。567は勘違いです。わすれて。
↑567はじゃなくて576ね
>>576 #define b a
の時点でaは展開されるんじゃないの?
#define b b
の意味になるから、bはそれ以上展開されないで未定義。
ってゆうかcppすれ。
アホども、議論する前に参考書でも読め
>>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が */
返るはず。
いちいちきかねえでライブラリのマニュアル見ろバか
>>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
なんでココの奴らは、 それは〜〜だよ。 すれ違いだから、今後は〜スレで聞けよ。 ぐらいできないのが多いの? 分からないから他にまわすってこと?
板違いだつーのがわからないならもう来んな
解決しました 板違いすんませんでした
>>591 板違いとスレ違いの違いがわからないならもう来んな
>>574 >改めて考えると結構無茶苦茶な言語だな C って(w
>最初のプリプロセッサの実装の都合に仕様が引きづられてそうだ。
プリプロセッサの動作は旧いCとANSI-Cではかなり違う。
旧いCの方は小技がかなり効きそうだけど、頑張った他人のソースを読むのは
嫌になるに違いない。
>>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
>>606 できました〜!!
ありがとうございます。
612 :
デフォルトの名無しさん :02/05/12 04:18
既出や板違いだったらすいません。 私はプログラミング知識ゼロの超ド素人です。 最近C言語でゲームを作りたいと思いまして、C言語を覚えようと思ってます。 覚えながら作る(作りながら覚える?)ようにしたいんですが、 必要なモノ、あると良いモノがあったらお教え下さい。 あとわかりやすい書籍なんかも教えていただけると幸いです。
>>612 コンパイラは
>>2-3 をみて。
エディタはなんでもいい・・・・と思う。強調表示できれば尚よいけど。
>最近C言語でゲームを作りたいと思いまして、C言語を覚えようと思ってます。 気のせいだかわからんがこういう台詞を聞くのは50回目くらいだな いや、別にいんだけどね。
強調表示よりも自動的に字下げしてくれる機能の方が便利だな。
>>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 floatに最大値、最小値はあまり意味がない。
有効桁数のほうが重要。
>>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) を追加するのもお勧め♪
#define XE A(E) は、ちょっとした勘違いで、そこに至るまでの 過程を別にすれば不思議はありませんでした(汗)
628 :
デフォルトの名無しさん :02/05/12 07:13
まず、visualc++をたちあげてから うまく使えない。 俺はDQNだ、鬱。 どうやったら Cが書けるのか。
Borland C Compilerを使え 簡単だ
>>630 地球連邦軍が開発したと言われる幻のガンダムのことだ。
>>620 "浮動"小数点というくらいだから最大値、最小値ともに表現次第で不定なんだろうな。
よく分からないけど。
>>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するしかないんじゃない?
文字コードが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 俺もそう思ったけど取りあえずstrcatは確実だから奨めた。
確認するの面倒かつコンパイラ無い。
>>636 キミは嘘を教えられています!要注意!
str0〜2の中に % が含まれていても全然普通に動作します。
それはそれとして、連結後の文字列が buf のサイズより長くならないように注意すれ。
>>644 だよね。
危ない危ない・・・間違うところだったよ。
良かった(;´ー`)無知をさらけ出したかと思ったよ。
sprintfする時に必要なバッファのサイズが実行してみるまで分からないってことがありますよね? そういうときはどうするのが最も良いのでしょうか。 私は、tmpfileしてからそれにfprintfで書き込み、返ってきた値に1足した数分、mallocするという方法を 考えたのですが、はっきり言って無駄が多すぎると思うんです。
>>648 それは単に連結するだけですよね・・・?
あ、、こうやれば漢字じゃなくても自分で確認できた… 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で書き込めば サイズくらい分かるだろう
_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
snprintf は C99 標準のライブラリ関数です。 gcc にもあります。
MFCとかはsprintfの結果文字列長は自力計算してるね。
sprintf()で用意するバッファのサイズについては
C FAQでも取り上げられていましたね。
あと、かんけいないが、すべからくの意味は
すべて*ではない*です
>>658
時期尚早。。。
exit(0)てどういう意味ですか?
>>671 いいのだ!自分はそんなこと気にしないのだ!
snprintf も uint32_t も __func__ も使いまくり!
可変長配列も使いたいところだが、gccにしか実装されてなくて・・・
>>676 ありがとうございます。でもなに書いてるのかわかりません。
678 :
デフォルトの名無しさん :02/05/12 16:43
コンパイラのgccとccって違うんですか?
>>677 正常にmain関数を終了した事と同じになると思われ。
どうでもいいけど
>>672 すべからくは*すべて*という意味で、
その後ろに否定の言葉を欲しがるだけでは?
このスレは*すべからく*の意味を考えるスレになりますた。
すべからく[須らく] 意味:ぜひとも 全てという字ではないよ。
このあたり、岸田自らが立脚する 「唯幻論」そのものという感じであるがもっとズサンな所は他にもある。 岸田はケンカについて、こう言う。 「日本人のけんかというのは、すべからく『怨みを晴らす』という形」。 意味不明の日本語だ。 岸田は「すべからく」を「すべて」の高級表現だと思っているのである。 「すべからく」は漢字で書けば「須らく」で、意味は「ぜひ(〜をせよ)」であり、 つまり「すべからず」の反対語である。 早大文学部卒、和光大数授(「教授」の誤植だろうな、単なる)の岸田センセは、 本書の中で日本語の動詞の語尾変化についても論じていらっしやるが、 「ク語法」(高校古文で習う)については御存知ないらしい。 否、センセだけを非難してはいけない。 管見の範囲では、評論家・上野昂志、同・川本三郎、演劇家・唐十郎、 詩人・鈴木志郎康などが「須らく」を「全て」の高級表現と思い込んで使っている。 この四人に共通することは、いわば反権威・反規範主義である。 そういった人たちが文法規範に無知であること自体はかまわないとしても、 「全て」と平易に言えばすむものを、高級表現だと思って誤用する心は 皇室と縁組したがる成金のようで、卑しい。 その卑しさがファシズムを生んだとするのが、単純化して言えば、 心理学者・フロムの説である。 そこまで見すえた時、初めて、個別科学である心理学が、説明原理を支える一柱となりうるのだ。
頭痛が痛いでふ。
頭が割れるようにかゆいでふ。
こ「岸「意岸「つ早・・・?? 意味わからんぞ、ゴルァ!
うーむ、さすが言語スレだなぁ と、スレ違いを受け入れてみるテスト。
もとい板違いを
わからないとき、ヘルプを読む癖はついてても 国語辞書を引く癖はついてないのかな?
英和は引くけど国語はねぇ。 なまじわかってるつもりなだけにはまると痛いよねぇ。
#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の領域って解放しなくていいの?
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する前に見失うとか。
ところでなんで君らはマジレスしてるんですか?
>>700 それがどうしても無駄に感じるのなら、文字列はすべてファイルに入れておき、
必要になったらmallocした領域に読み込み、不要になったらすぐfreeするしか
ないぞ。それこそ時間の無駄。
このスレはピュアな心のやつが多いのか・・・
>>705 ああ、答える代わりに、揶揄していたのか。
>>705 質問してる人にその内容で質問返しするともっとわかりやすかったかも。
レスくれた皆さん、どうもです。 staticな領域の解放なんて考えなくていいんですね。
>>710 そうそう。でも一度も使わなかったら警告を出すコンパイラがあるから、
一度は使うようにね。
712 :
デフォルトの名無しさん :02/05/12 18:55
getch って何て読むんデスカ?
713 :
デフォルトの名無しさん :02/05/12 18:56
ゲチ
げっちゅう
>>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型の配列と等価。
プログラムする時に口には出さないけど頭の中で「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'};を手っ取り早く書くための特例。
740 :
デフォルトの名無しさん :02/05/12 22:22
>>737 インテジャーと読む人がいると思うけど・・・
俺もたまにそう言う。
>>736 putchar('\b');
できるとは限らないけど。
イントでもインテジャでもどっちでもいいだろ。好きな方で読め。
>>730 >>738 ええと、char a[10]="ohayou"; ていうのが特例であって
pa="oha"; やb="ohayou"; は
配列の先頭アドレスを代入しているという事ですか?
bはポインタじゃないからできないと。
""を使うと配列の宣言なしに配列が使えるわけですか?
>>743 char型の配列は主として文字列を表すのに使うから、配列宣言時の初期化のみ、
="aaa"が={'a','a','a','\0'}と同じものだと見なされるの。あくまでも特例。
それ以外の時は文字列リテラルの先頭アドレスを代入することになるので、
配列名には代入できない。
>>744 ありがとうございました。
もっと勉強します。
代入したかったらstrcpyを使うこと。
<=>
>>722 一行の文字数がMAX - 1文字を超えているとか。その場合は
fgets(temp, MAX, fp);で。
>>736 改行してなかったら、printf("\b \b");
でいけると思う。
i = i++; は「未定義」らしいですが、「未定義」というのは、例えばこの文に対して abort を呼び出すようなコードを生成しても構わないってことで解釈合ってるでしょうか。
・・・ふと思ったんですが、どうせならコンパイル時にエラーにしちゃったらダメなんでしょうか?
>>750 i = i;
i = i + 1;
って解釈されないの?それ。
>>752 そうとは限らない。=演算子の右辺と左辺はどちらを先に評価しても構わない
から、i = i;となってもよい。
>>750 OSが壊れたりHDDから煙が吹いたりする処理系を出したとしても
とりあえずANSI準拠、K&R準拠をうたうことはできます。
756 :
デフォルトの名無しさん :02/05/13 00:41
Regetなどの最近のダウンローダーのように、レジュームや、ファイルの分割ダウンロードによる高速化について 書かれた書籍や、Webサイトありませんか?
757 :
デフォルトの名無しさん :02/05/13 00:42
>>756 >Regetなどの最近のダウンローダーのように、レジュームや、ファイルの分割ダウンロードによる高速化について
曲がりなりにもプログラマなら推測できるだろ。
分割すると速くなるのだろうか・・・・ ウェブサイトでも時々無意味に画像をスライスしているところをみかけるが。
c言語でcgiプログラムを作るのはどうでしょうか? メリット・デメリットなどがありましたら教えてください。
>>760 メリット:高速。
デメリット:文字列操作が大変。可変長文字列対応してないし。
>>760 スクリプト言語に比べてインタープリタを起動しないのでその分の負荷は減る。
>>759 サーバがこちらの通信速度未満に帯域制限している
場合有利。
この前Cでチャットを作ってみたけど、確かに速かった。 でもそれは機能が少ないからのような気がする・・・・
766 :
デフォルトの名無しさん :02/05/13 00:52
つか未だにCのcgiに非対応な鯖もあるので注意
鯖と全く同じ環境をつくって、ローカルでコンパイルしてからアップすれば使えるかもしれんが・・・・
xreaはLinuxでコンパイル済み(これも曖昧だが)のファイルが使える。 とくとくはtelnetでcc使えたはず。
>>766 Cだとシステムの弱点をついたウィルスを簡単に作れるので、鯖会社も
嫌がる罠。
>>770 というか、コマンドを実行できるようにするのが嫌なんでしょ。
コンパイルにはコマンド実行が必須だからねぇ。。
>>771 adminの権限を乗っ取ったらやりたい放題だもんね。
ルート16ターボ
>>773 UNIX鯖とは限らないし〜と言ってみるテスト。
Win鯖なんか使いたくないけどな。
則巻ターボ
777 :
デフォルトの名無しさん :02/05/13 01:31
fw3
bcc32 languageC.cpp glibw32.lib
779 :
デフォルトの名無しさん :02/05/13 21:27
すいません教えてください。 バイナリファイルにデータを入力する際に ソートして入れたいんですが(比較するのは入っているデータ バイナリファイル上でひとつずつ比較していくのと 比較するデータとされるデータをメモリに格納してから 計算するのではどちらが効率的なのでしょうか?
>>779 ファイル + に
だと出力するものだと思う。
比較しながらメモリに格納してそのまま書き出すのが早いと思う
整数を3つ入力→数の小さい順に出力 これはif文を使って作るものなんですか??
>>783 明日プログラムのテストを控えた者です。工房です。
ならネットで遊んでないで勉強しなさい。
>>782 そんなお前に大ヒントだ。
クイックソートと言うキーワードで検索だ!
これで友達よりlogx分速いプログラムが書けるぞ!
>>779 メモリ領域があまりとれないなら、データを順方向に探索するだけでソート
できる、マージソート法というのがあります。一時的にランファイルという
作業ファイルを作成する必要がありますが、ほとんどメモリを食わずに
クイックソートと同じオーダーでソートできます。
ただし、ファイルの入出力を伴うので、ファイルキャッシュが効かないと激遅
になりますが。
まさに牛刀をもって鶏を割くってやつだな(笑)
別にメモリに作業領域を持ってもいいと思うんだが。 それから、平均的にクイックソートより遅いです 唯一の利点は安定である事だけ。
>整数を3つ入力→数の小さい順に出力 入力時に並び換えろ
>>785 はい。頑張りまっす。
>>786 クイックソートって良さげっす!!テスト終わったらじっくり勉強したい。
・・・・・ということで
>>789 もちろんメモリに全部読み込んでqsortかけるのが多分一番速いですね。
796 :
COMPILER :02/05/13 22:54
16ビットのDOS汎用コンパイラの入手方法を教えてください。
LSI-Cを検索
ぐおおおおおおおおおおおおお!!!!!!!!!!!!まじでやばすっぎる!!!!!!! プログラムは高得点あきらめて英語じゃ。 ということで世話になりました。テスト終わったらまた来ます。
がんばれ
つーか、そんなのは小学生のときにすでにやってたけど 当時はテストの点につながらなかったからなぁ。 あーでもあれか。今はテストの点につながるから 逆にプログラミングが苦痛になってたかも。
802 :
COMPILER :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 って何よ。
バージョンは?
みなさん、ありがとうございます。 今のところ最高の目標としては「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が割り当てた領域など アドレス不変なポインタを返す)
凡用系とオープン系の違いってなんですか? これらの言葉意味って人によってまちまちですよね。
822 :
デフォルトの名無しさん :02/05/14 14:34
>>821 ぼんようじゃない。汎用。は・ん・よ・う
すみません・・・ 汎用系でしたね。 特定のプログラムを組み込んで、ソフトを作ることですか?
Cすれでホスト系聞くなよ
>>824 じゃあどこで聞けばいいんだよ!
個簿留スレか?
そもそも言語スレで聞くべきか?
情シ板に逝こう ム板なら初心者質問スレぐらいか
gooooooooooooooooooogle!!
汎用系→汎用機。 オープン系→UNIX、Linux、Windows
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);
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 :
デフォルトの名無しさん :02/05/14 23:39
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 ワラタ
なんだ。ただの荒らしかよ。
あぁ、、半角スペースが一つにまとめられていたのね・・・・ 私はしないな。
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
typedef struct { char type_name[0xffffffff]; void* p_struct; } Type; これでどうだ?
>>847 俺もさ、関数が1000個とか2000個とかあると、こいつらにいちいち名前つけずに
すめばなーと思うことはあるよ。でもな、世の中そんなにうまくできてねーんだ。
名前つけなきゃ関数を区別する手段がないんだよ。
構造体だって同じことだ。
名前自動生成ツールでも作るなり、連番で名前付けるなりしてがんがれ。
なお、英和辞典の見出し語を頭から順番に使ってゆくという方法は、
予約語等とぶつかる可能性があるのでおすすめできない。
lambda
856 :
デフォルトの名無しさん :02/05/15 00:08
>>854 関数ならかんすうポインタでいいじゃん。
(*func[2000])();
結局 名前はいるじゃん
マシン語埋め込めば名前は要らないと思われ
>>854 「xより大きいなら非ゼロを返す関数」
(xは実行時に決まる)とか、
「行のn番目のフィールドを比較する関数」
(nは実行時に決まる)とか、動的に関数を
作りたいことがあるけど、Cなら名前つけざ
るを得ないなー。
関数型言語なら無名関数が作れるし、
オブジェクト指向言語ならインスタン
スを使えば良いけど。
>>858 じつは僕もハナからそれがいちばん強力な解だとは思いますが移植性が限り無くゼロなのでためらいます。ふと、みんなはどう考えるかと思って。
すみませんヒマつぶしノ質問だとおもって忘れてください>答えてくれたひとたち
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); } }
>>860 過去ログ読んでくれ。
3スレに一度はその手の論争が起きてるから。
>>843 構造体を malloc で作って、そのポインタを渡すのは?
参照渡しではなくなってしまうけど、渡せるよ。
でも、移植性とか可読性考えると、無理にそんな方法取るのは馬鹿かと・・・アホかと・・・(^^;
ネーミングは本当に大変だけど、考えてあげようよ?
867 :
デフォルトの名無しさん :02/05/15 06:51
>>866 じゃあ私のソースを見ても笑わないでね(;_;)
>>863 >>863 getchってなんじゃ〜
getcharだろ〜
(getchはMS-DOS専用の文字入力待機関数じゃなかった?入力した文字は読みとらなかったような・・・・)
>>868 Win32でもサポートはされている。移植性は無いが。
>>863 cursesにもgetchあるよ〜ん(by UNIX
# ローカルっちゃぁローカルかもしれんけどな
>>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型に変換する関数ってないのでしょうか?
ひょっとして、 s = p + '0'; みたいなことがやりたいのか……?
>>879 C++使え。
s = char (p);
ってな具合にint型をchar型に変換するchar()関数がある。
構造体のメンバに入れたいんですが 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; } 大体やりたいこと書くとこんな幹事です。 構造体だからまずいとかですかね?
>>882 C++は使えないんですよ。
事情が合ってLinuxでC言語使ってmす。
もしかしてLinux板で聞けってやつですか?
885 :
デフォルトの名無しさん :02/05/15 14:41
ハァ?
>>879 つーかできねーって言い張るんならその根拠(エラー、出力内容とか)を説明しろよ。
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って問題ないの?
あ。 %lfにすればできるかも。 鬱死
complex SUMofCOMP(x,y) complex x,y; { ... } 懐かしいような気が
>>879 >>887 がほしかった答ならば、iを10進表記した文字列を取得するには?
と、きけばよかったようですな。
元の質問をそのまま素直に解釈するとたしかにああいう答が返ってくる。
ところで
>>882 のは関数じゃなくて、C++のキャストの記述法だったと思うが?もちろんC++でも従来の記述法も可能。
型変換関数
typecast?
897 :
デフォルトの名無しさん :02/05/15 17:20
C言語の標準入力のバッファを直接参照できるような 関数ないし手段がありましたらぜひとも教えてください。
>>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
ぺろぺろ!
かわいい男子高校生
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
なんかこうしてるとともっちを大勢で回してるような 気分になれるから不思議だ。。
917 :
デフォルトの名無しさん :02/05/15 18:26
>>916 一度みんなでそういうことを本当に
やってみたいね。
どうもはじめまして、ともっちといいます。 このたび僕はプログラミング言語というのを覚えてゲームでも 作ってみようかと思ったんですけど何をすればいいのか全く分かりません。 いろんな言語があるらしいんですが何かおすすめはアリマセンか? それからよろしければ一から教えてもらえないでしょうか
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
ともっちは酷い人です・・・
立てれ
その気にさせといて独りおれをおいていくなんて
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 このスレはもう次スレがたってしまっているので、
ゲイの書き込みをしたところで、乗っ取りにはなりません。
分割コンパイル、make使い始めたのですが 外部変数の定義、再定義ファイルをそれぞれ作ってインクルードするのと #ifndefを使って再定義をするのとどっちがかっこいいですか プロフェッショナルな方の意見をお聞かせ下さい 初心者の質問で恐縮です。
>>952 再定義?
変数の定義は一度しか出来ません。
宣言と定義のことだったらC FAQ嫁姑。
>>953 外部変数dす
ひとつのファイルには
#define MAX 40
float A[MAX];
ってやって残りのファイルには
#define MAX 40
extern float A[MAX];
ってやりたいってことです。
ヘッダファイルに extern float A[MAX]; と書き、それをインクルードする .c ファイルのひとつに float A[MAX]; と書く。
>>955 #ifndefを使うのとどっちがオススメですか?
957 :
デフォルトの名無しさん :02/05/15 22:26
>>958 こんな感じです
- sample.h -
#ifndef _sample_h
#define _sample_h
int x;
#else
extern int x;
#endief
>>960 ヘッダーファイルの中じゃなくて、.cファイルの中で宣言しろって。
>>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++の仮想関数を学習してしまうとよい罠。
>>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
>>961 ネタなのかポカなのかマジなのか分からん…
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
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
997 :
◆inFbM64o :02/05/16 13:08
10000!!!
998 :
デフォルトの名無しさん :02/05/16 13:08
dfffffddd
999 :
デフォルトの名無しさん :02/05/16 13:08
1000 :
デフォルトの名無しさん :02/05/16 13:08
やったー1000げっと成功! みなさん今後も指導よろしくおねがいしまーす! by ともっち
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。