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

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2006/02/10(金) 12:56:55
>>951
入力バッファを破棄する
953デフォルトの名無しさん:2006/02/10(金) 13:02:50
>>952
どうやってですか?
954951=953:2006/02/10(金) 13:24:42
すいませんどうもAPI関連っぽい話だったみたいなんで
質問取り下げます
955デフォルトの名無しさん:2006/02/10(金) 14:29:23
別にAPIでもなんでも無いんだがな

scanf("%*[^\n]"); これで改行まで読み飛ばし
scanf("%*c"); その後これで改行読み飛ばし
956デフォルトの名無しさん:2006/02/10(金) 14:38:41
FlushConsoleInputBuffer()
使ったほうがキモチイイ
957デフォルトの名無しさん:2006/02/10(金) 14:39:01
>>955
ヘェヘェヘェ(゚∀゚)ノシ!
958デフォルトの名無しさん:2006/02/10(金) 14:41:10
>>955
それってどうゆう使い方をしてるのかkwsk
959デフォルトの名無しさん:2006/02/10(金) 14:44:20
微妙な質問来るとおまえら質問者去ってから正解出す傾向ないか?w
960デフォルトの名無しさん:2006/02/10(金) 14:46:09
>>956
入力バッファを流すと詰まりそうだからそんなAPIは存在自体気持ち悪い
961デフォルトの名無しさん:2006/02/10(金) 14:46:49
それが俺に聞けクオリティ
962デフォルトの名無しさん:2006/02/10(金) 14:49:15
>>960
詰まるってトイレ?
963デフォルトの名無しさん:2006/02/10(金) 15:35:24
fseek(stdin, 0, SEEK_END); って駄目なの?
964デフォルトの名無しさん:2006/02/10(金) 15:40:18
>>962
まあそんな感じ
流してもプログラム側には文字は流れてこないから

# 別なところに流れていってるってのが正しい解釈なんだろうけど
965デフォルトの名無しさん:2006/02/10(金) 15:45:26
>>955
バッファの破棄ってさ・・・直接コンソール入力で使いたいんじゃないか?
それ以外の場合なら破棄しなくてもどうにかなる気がするんだよね
966デフォルトの名無しさん:2006/02/10(金) 15:45:39
>>963
規格では未定義
gccでは何も起こらなかった(クリアされなかった)
MSDNには多分期待した動作が載ってる、調べてないけど
967デフォルトの名無しさん:2006/02/10(金) 16:02:57
>>963
bccだとダメだった
968デフォルトの名無しさん:2006/02/10(金) 16:03:56
>>964
破棄ってぽ〜んと消滅させてくれるんじゃなくて
どっか他のところに流すの?
なんか嫌だなそれ
969デフォルトの名無しさん:2006/02/10(金) 16:12:17
970デフォルトの名無しさん:2006/02/10(金) 16:18:25
標準入出力はfseekで送ったり巻き戻したりできんでしょ。
そんなこんなでgetchみたいな関数が巷で流行してる。
971デフォルトの名無しさん:2006/02/10(金) 16:19:39
本当気持ち悪いな
なんだあの破棄ってAPI・・・
972デフォルトの名無しさん:2006/02/10(金) 16:21:20
getchって流行してるのか?
ボタン押すまで次の処理しませ〜んとかの時には便利だけど
973デフォルトの名無しさん:2006/02/10(金) 16:22:45
forループの変数 i が 0からはじまるのに、ループの中の if の条件の中に i-2 とか入れたいのですが、

int a[10]={0};
int i;

for(i=0;i<10;i++){
if(a[i-2]==xx)
a[i]=xx
}


このような書き方をしていいですか?
974デフォルトの名無しさん:2006/02/10(金) 16:25:08
>>973
そのままだと当然、駄目
最初のi=0の時に思いっきり範囲外アクセスしてるから
975デフォルトの名無しさん:2006/02/10(金) 16:26:13
>>973
てか何がしたいんだ
976973:2006/02/10(金) 16:34:32
>>974
了解しました。

>>975
実はプログラム中に誤りを見つけて、条件を付け加えたいのです。
977デフォルトの名無しさん:2006/02/10(金) 16:56:05
>>976
まず、質問の仕方を勉強した方がいい。

# 具体的に、どんな事をしたいのか?
# を聞いているのに>>976は無いだろう。
978973:2006/02/10(金) 17:34:21
すみません。

int a[10]={0};
int i;
int b;

for(i=0;i<10;i++){

if(a[i]==xx)
b=a[i];

}

このような感じのプログラムで i の値でそのあともずっと処理が続いていくんですが
if(a[i]==xx)のとき、a[i]の一個前とか二個前とかの値が重要なことに気づきました。
で、プログラムを出来る限りいじらずに、
a[i-2]とかa[i-1]とかのデータを見て処理をするようにしたいです。
979デフォルトの名無しさん:2006/02/10(金) 17:42:16
じゃあ
a[i-1]とかa[i-2]入れちゃえ
ただ実行前にif(i>0)とかi<1で範囲外にアクセスしないようにすりゃいい
980デフォルトの名無しさん:2006/02/10(金) 17:43:12
int *a, data[12]={0};
int i, b;

a = data + 2;
for(i=0;i<10;i++){

if(a[i - 2]==xx)
b=a[i - 2];

}

/* a[-2] = data[0], a[-1] = data[1], a[0] = data[2] とする */
981デフォルトの名無しさん:2006/02/10(金) 18:31:06
>>932
まだ見てるかな・・・?

> 最後の
> >}OAMEntry,*pOAMEntry;
> 部分がよくわかりません。

struct tagOAMEntry { いろいろ };
typedef tagOAMEntry OAMEntry;
typedef tagOAMEntry *pOAMEntry;

って分割して書くとわかるかな?

突っ込んでる人がいないんだけど、
>>940 は、typedef が消えてて実は同じ意味じゃない。
前者は型のエイリアス、後者は変数宣言。
982デフォルトの名無しさん:2006/02/10(金) 19:22:39
2個前だか3個前だか知らんけど別のバッファに保存しとけば良いだけじゃ?
983デフォルトの名無しさん:2006/02/10(金) 20:07:47
次スレテンプレ
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

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

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 121
http://pc8.2ch.net/test/read.cgi/tech/1138409094/

次スレがたたない場合の避難所
C言語を語ろう
http://pc8.2ch.net/test/read.cgi/tech/1138718221/
984デフォルトの名無しさん:2006/02/10(金) 20:11:27
もうそんな時期か
立ててみるからまってなー
985デフォルトの名無しさん:2006/02/10(金) 20:14:36
986デフォルトの名無しさん:2006/02/10(金) 20:16:47
乙鰈
987デフォルトの名無しさん:2006/02/11(土) 01:40:58
>>985

ワロタ
988デフォルトの名無しさん:2006/02/11(土) 01:47:15
989デフォルトの名無しさん:2006/02/11(土) 02:23:37
うめぇ!m9っ`・ω・´)
990デフォルトの名無しさん:2006/02/11(土) 07:31:42
不定長の1次元配列を作りたいのですがうまく出来ません。

その配列には要素を加えたり、取り除いたりしたいのですが、、任意の要素を動かすわけではなく、スタックのように一番最後のものだけを加えるか取り除くかすることを想定しています。

最初から固定的な配列をメモリに確保するともともとのサイズ以上の要素を入れたい場合たとえメモリが余っていてもダメです。ちょっとしか要素を使わなかった場合にはメモリがもったいないです。

かと言ってリンクドリスト構造にすると例えば100番目の要素にアクセスするのに100個の要素を辿る必要がありオーバーヘッドが大きいです。

要素を加える時と取り除く時に新たな配列を作り、古い配列の内容を全コピーした後、古い配列を削除するというのも考えたのですが、やはりオーバーヘッドが大きいし、メモリがガベージだらけになってしまうと思います。

どうやればいいのでしょうか?
991デフォルトの名無しさん:2006/02/11(土) 07:35:51
間を取って、配列をリスト状に繋ぐといいよ。
992デフォルトの名無しさん:2006/02/11(土) 08:20:28
スタックとして使うことを想定するんなら、何番目の〜は考えなくてもいいのでは?
993デフォルトの名無しさん:2006/02/11(土) 08:42:16
使用目的によってはそうでもない。
994デフォルトの名無しさん:2006/02/11(土) 09:48:45
>>990
reallocは?
995デフォルトの名無しさん:2006/02/11(土) 09:50:49
|    ヽ
|.´。.  γ
|'; 'ё;゚ソ
|    ノ
|    ヘ、
|  /`\_つ
|∩ 人
|ω、 \
996デフォルトの名無しさん:2006/02/11(土) 09:51:22
|  ヽ
|。.  γ
| 'ё;゚ソ
|  ノ
|  ヘ、
|/`\_つ
|人
| \
997デフォルトの名無しさん:2006/02/11(土) 09:53:09
|  ヽ
|。.  γ
| 'ё;゚ソ
|  ノ
|  
|/`
|人
| \
998デフォルトの名無しさん:2006/02/11(土) 09:53:57
|  ヽ
|。.  γ
| 'ё;゚ソ
|  ノ
|  ヘ、
|/`\_つ ∩
|人 ω
| \
999デフォルトの名無しさん:2006/02/11(土) 09:55:50
|ヽ
|  γ
|ё;゚ソ
|ノ
|ヘ、
|\_つ ∩
| ω
|
1000デフォルトの名無しさん:2006/02/11(土) 10:04:39
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。