C言語なら俺に聞け! Part 98

このエントリーをはてなブックマークに追加
758デフォルトの名無しさん:05/01/09 19:04:46
>753
新プロセスのIOを無名のパイプで繋げて、パイプの端を読み書きしてみろ。CreateProcess,CreatePipe,WriteFile,ReadFileを参照
759デフォルトの名無しさん:05/01/09 19:17:02
>>725-729
ほとんどの参考書は知ったかぶりだという事ですね
760デフォルトの名無しさん:05/01/09 19:22:38
>>759
難しいかどうかは、それを言う人の主観だから、第三者がどうこう言えることじゃない。
だけど、たかがあんなのでめげるようじゃ先が思いやられることだけは間違いない。
     ^^^^^^^^^^^^^^^^
参考書の筆者の話にすり替わりかけているが、騙されんじゃねえぞ。
761デフォルトの名無しさん:05/01/09 19:24:17
初体験で失敗するとさ、インポになっちゃうんだよ。
だから優しく教えてくんなきゃイヤ。
762デフォルトの名無しさん:05/01/09 19:51:46
つまり>>754は、なすすべ無しと言う事で?
763デフォルトの名無しさん:05/01/09 20:04:39
>754
kbhitで食い潰すか、rewind呼ぶんだったかな。

BIOSなどのキーボードバッファに残る
764デフォルトの名無しさん:05/01/09 20:12:28
ということは、ここに書いてあることは全部嘘なんですか?
http://www.matx.org/REFS/node84.htm
標準入力=stdin って思ってる、自分が間違ってんのかな?

rewindでも駄目でした。_flushallでも駄目でした。

そのBIOSなどのキーボードバッファにアクセスするには
どうしたらいいでしょう?
765デフォルトの名無しさん:05/01/09 20:13:38
>>764
このスレで答える範囲内では無い。
766デフォルトの名無しさん:05/01/09 20:15:36
rewindもfflushも、stdinで期待通りの動作をするのはVCだけ
767デフォルトの名無しさん:05/01/09 20:23:12
>>765
では、どこのスレで質問すればよろしいのでしょう?

>>766
自分はVCで、期待通りの動作をしてくれないので質問してみました。
768デフォルトの名無しさん:05/01/09 20:25:26
かなり変な環境じゃないのか。
ともかくキーが押されたら元に戻るまで待てばどうだ?
769デフォルトの名無しさん:05/01/09 20:30:22
>>767
>1は読んだ?
770デフォルトの名無しさん:05/01/09 20:31:05
とりあえず、環境依存スレへ。
というのは、元々kbhit()というのが、DOS(コマンドプロンプトじゃないよ)で
BIOSコールでキーボード状態を知るためのものだから。
同様に標準出力を用いずにBIOS等で入力/表示するのが、conio.hにある関数群。
互換性のために、Windows環境でも残されている。
そして、これらは、stdio.hの関数群とは関係ないし、同時に使用してもいけない。
771デフォルトの名無しさん:05/01/09 20:34:47
キーボードバッファは間違いだった。失礼。

//キー押しが来るまで待つ
while(!_kbhit());
//キー押しが戻るまで待つ
while(_kbhit());
772デフォルトの名無しさん:05/01/09 20:35:37
元に戻るまで待つとはどういう事ですか?
今確認してみたんですが、やはり駄目です。
やっぱりgetch()でクリアする以外方法はないんですかね?
皆様ならば、getch()の中身を調べて、どこにアクセスして値を取り出しているか、
とかわかると思ったんです。
773772:05/01/09 20:40:33
早とちりレス失礼しました。

>>771
なるほど。どうも、レスありがとうございます。

>>770
どうして、そんな事がわかるんですか?
ヘルプ見てもそんな事は一言も書いてなかったです。

何にしても、よくわかりました。
本当にありがとうでした。
774デフォルトの名無しさん:05/01/09 20:53:19
>>773
喧嘩売ってるとしか思えないな
氏ねや
775デフォルトの名無しさん:05/01/09 21:32:04
相変わらず、バカが多いな
776デフォルトの名無しさん:05/01/10 02:56:56
#defineを使って関数名の一部を変更したいんですが

#define aaa bbb
func_aaa();

のようにしてもfunc_bbb()にはなってくれません。
どうすればいいでしょうか?
777デフォルトの名無しさん:05/01/10 03:36:57
#define func_aaa func_bbb
778デフォルトの名無しさん:05/01/10 05:11:47
#define func_(x) func_##x
func_(aaa)() ;
じゃ不満かい?
779デフォルトの名無しさん:05/01/10 05:20:46
> そして、これらは、stdio.hの関数群とは関係ないし、同時に使用してもいけない。

これ知ったかぶり。
前半はともかく、後半がデマ。
実際同時につかうことはよくある(いまでも)。DOSの時代もよく同時につかわれていた。
780デフォルトの名無しさん:05/01/10 05:22:02
>>753
popen関数を使う。
781デフォルトの名無しさん:05/01/10 11:05:50
>>779
同時に使用できない、或いは使用すると不都合がある関数はいくつもあるよね。
それをデマボーグと言うのは言いすぎだと思うけど。

#つーか、未だに使っているのか ┐(´・ω・`)┌
782デフォルトの名無しさん:05/01/10 11:07:55
783デフォルトの名無しさん:05/01/10 14:19:24
入力した文字列がekeyと一致した時にbreakさせたいのですが、
うまくいきません。どこに問題があるのでしょうか?

while (1) {
    fgets(text, 256, stdin);
    if ((strcmp(text, ekey)) == 0 )
        break;
    fprintf(fp, "%s", text);
}

/* char text[256];
char *ekey = "//end" */
784デフォルトの名無しさん:05/01/10 14:23:07
>783
fgetsは改行文字'\n'も格納する
785783:05/01/10 14:28:50
>>784
即レスありがとうございます、助かりました。
786デフォルトの名無しさん:05/01/10 14:42:07
printfが何回呼ばれたかとかいう具合に、
どの関数が何回呼ばれたかわかる、又はそれに類似した関数って無いですか?
787デフォルトの名無しさん:05/01/10 14:46:30
>786
static int c;
#define printf c++,printf
788デフォルトの名無しさん:05/01/10 14:48:01
ない
789デフォルトの名無しさん:05/01/10 14:51:50
>>786
関数全てにstaticなカウンタを設けないと。
790デフォルトの名無しさん:05/01/10 14:52:49
>787
これ、ありがたく使わせていただきます。
791デフォルトの名無しさん:05/01/10 14:54:20
DevPartnerStudio買えば、もれなく関数カウンタがついてきます
792デフォルトの名無しさん:05/01/10 14:56:22
>790
コンパイラのオプションにクロスレファレンスがないか?
最適化時に結構使えるぞ
793デフォルトの名無しさん:05/01/10 14:57:09
>>781
>デマボーグ

サイボーグの親戚か?
794デフォルトの名無しさん:05/01/10 14:58:10
《ドイツ語》 Demagogie
795デフォルトの名無しさん:05/01/10 15:45:54
> どの関数が何回呼ばれたかわかる

profilerを使え!
796デフォルトの名無しさん:05/01/10 17:16:59
>>781
conio と stdio が連携してない時点でクソリブの烙印くれたい
797デフォルトの名無しさん:05/01/10 17:21:25
左辺値ってなんですか?
変数のことですか?

*(int *)0
は左辺値ですか?
798デフォルトの名無しさん:05/01/10 17:24:58
>>797
非定数のこと
変数も含む
799デフォルトの名無しさん:05/01/10 17:25:20
>797
左辺値(lvalue)は、代入の左側に来る式のこと。
800デフォルトの名無しさん:05/01/10 17:26:07
>*(int *)0
>は左辺値ですか?

びっくりするだろうけど、
これも左辺値だよ。
キャストで代入可能になったからね。
801デフォルトの名無しさん:05/01/10 17:26:34
ageてる馬鹿がいるな
802デフォルトの名無しさん:05/01/10 17:28:52

int a[10];

*(int *)a;
これは左辺値ですか?
803デフォルトの名無しさん:05/01/10 17:29:24
ですよ。
804デフォルトの名無しさん:05/01/10 17:29:50
つまり代入可能型にキャストすれば何でも左辺値ですか?
805デフォルトの名無しさん:05/01/10 17:30:41
int i;

(int)i = 1;

これは左辺値ではありません。
806デフォルトの名無しさん:05/01/10 17:33:23
-2["hoge"+3]
は左辺値ですか?
807デフォルトの名無しさん
>>804
その通りです。
左辺値は変数だけとは限りません。

enum {
FALSE, TRUE
};

*(int *)FALSE = 1;

これも左辺値です。