1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/ スレを勃てるまでもないC/C++の質問はここで 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ スレを勃てるまでもないC/C++の質問はここで 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ スレを勃てるまでもないC/C++の質問はここで 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ スレを勃てるまでもないC/C++の質問はここで 13 pc12.2ch.net/test/read.cgi/tech/1260842197/ スレを勃てるまでもないC/C++の質問はここで 14 pc12.2ch.net/test/read.cgi/tech/1269273471/
137 名前:デフォルトの名無しさん [2010/05/22(土) 19:26:57 ] まあ、アホには出来ないだろうが、ど素人でも出来る罠
138 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:08:31 ] 宿題は自分で解こう
139 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:30:13 ] すみません、txtファイルに書いた2進数(10011101)をchar配列に保存しているのですが、 これをint型10進数(10011101 → 157)に直すシンプルな方法は無いでしょうか? 現状atoiで整数にしてから 10ずつ割りながら、整数で1の論理積を確認し、 別途1..2..4..8..と数値を足し合わせ作る手しか思い付かず。。 (※書き込み失敗したのか2度目の書き込みになります; もし別スレに誤爆しててマルチになってたらすみません;)
140 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:39:10 ] 文字列を後ろから走査してn桁目が1なら1<<nを足す
141 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:43:14 ] 特別便利な方法はないけど、普通にやれば十分では? main() { char buf[]="10011101"; char *p; int x = 0; for(p=buf; *p ; p++) { x *= 2; if(*p == '1') x+=1; } printf("x=%d\n", x); /* x=157 */ }
142 名前:139 mailto:sage [2010/05/22(土) 22:25:44 ] >>140 ありがとうございます。ビットシフトでも良いのでしたね、記憶しておきます。 >>141 サンプルありがとうございます。 ポインタを使えばこうもシンプルに書けるのですね。 勉強になります。 2倍にする事でビットシフト同等の効果・・学んだ記憶が何とか蘇る程度でした。 とても勉強になりました。お2方、ありがとうございました。
143 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 20:38:46 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
144 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 21:36:56 ] int num[100][100],i,j; int X1[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}; int X2[4][4]={{15,14,13,12},{11,10,9,8},{7,6,5,4},{3,2,1,0}}; int X3[4][4]=・・・・; int X4[4][4]=・・・・; for(i=0;i<100;i++) for(j=0;j<100;j++) num[i][j]+=X1[i%4][j%4]; この様なプログラムにおいて、X1〜X4を簡単に切り替える方法はありませんか? Xの配列は必要に応じて1〜4を選択したいのですが、プログラムで何カ所も使っているため、書き換えるのが非常に面倒です。 #define X "x1" として、X[i%4][j%4]としてみたのですが、予想通り無理でした。 1カ所書き換えるとすべてに適用されるような方法はありませんか?
145 名前:デフォルトの名無しさん [2010/05/23(日) 21:40:06 ] int *x[4][4] = {X1, X2, X3, X4};
146 名前:デフォルトの名無しさん [2010/05/23(日) 21:41:10 ] int x[][4][4] = {X1, X2, X3, X4};
147 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:05:46 ] #include <iostream> int main(void) { int x1[4][4]; int x2[4][4]; int x3[4][4]; int x4[4][4]; typedef int (*px_t)[4]; px_t x[] = {x1, x2, x3, x4}; x[0][1][2] = 100; std::cout << x1[1][2] << std::endl; return 0; } typedefなしで書く方法がわからんorz
148 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:13:24 ] int (*x)[4][4] = {x1, x2, x3, x4}; xはint型の[4][4]の配列へのポインタ
149 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:18:02 ] >>145 ,146, 148 コンパイルできない
150 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:35:50 ] int (*x[])[4] = {x1, x2, x3, x4};
151 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:39:23 ] >>147 <typeinfo>を使って生の型を
152 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:42:44 ] >>150 それでいいっぽいな ただし配列名での初期化が出来るのはC++のみで、Cだとコンパイルエラーが出た #include <iostream> #include <iomanip> int main(void) { int x1[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int x2[][4] = {{17, 18, 19, 20}, {21, 22, 23, 24}, {25, 26, 27, 28}, {29, 30, 31, 32}}; int x3[][4] = {{33, 34, 35, 36}, {37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}}; int x4[][4] = {{49, 50, 51, 52}, {53, 54, 55, 56}, {57, 58, 59, 60}, {61, 62, 63, 64}}; int (*x[])[4] = {x1, x2, x3, x4}; int i, j, k; for (k = 0; k < 4; k++) { std::cout << "x = " << (k + 1) << '\n'; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) std::cout << std::setw(4) << x[k][i][j]; std::cout << std::endl; } } }
153 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:33 ] Cだとわざわざこういう風に書かないとならん 面倒だな #include <stdio.h> int main(void) { int x1[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int x2[][4] = {{17, 18, 19, 20}, {21, 22, 23, 24}, {25, 26, 27, 28}, {29, 30, 31, 32}}; int x3[][4] = {{33, 34, 35, 36}, {37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}}; int x4[][4] = {{49, 50, 51, 52}, {53, 54, 55, 56}, {57, 58, 59, 60}, {61, 62, 63, 64}}; int (*x[4])[4]; int i, j, k; x[0] = x1; x[1] = x2; x[2] = x3; x[3] = x4; for (k = 0; k < 4; k++) { printf("x%d = \n", k + 1); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) printf(" %3d", x[k][i][j]); putchar('\n'); } } return 0; }
154 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:35 ] >Cだとコンパイルエラーが出た 当たり前だ。 Cだと配列の要素には定数以外使えない。 実行時に決まるスタック上のアドレスや関数呼び出しの戻り値などは 配列を初期化する値に出来ない。
155 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:45 ] >>151 かしこいな! こんな使い方があったのか
156 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:30:19 ] ideone.com/ssEMB ideone.com/v9lsi codepad.org/QCxegedL なんだこりゃ だめだこれ
157 名前:デフォルトの名無しさん [2010/05/24(月) 00:03:15 ] クラスの配列で 要素0内の複数のメンバ変数を要素1に複製したいときって 普通にmemcpyでOK?
158 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:21:49 ] >>157 条件によっては大丈夫な場合もあるけどまったく保証はされない。
159 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:46:11 ] >>157 Cならおk C++なら、コピーするメンバ変数が組み込み型かPODならおk
160 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 02:29:54 ] ていうか a[1] = a[0]; でえーやん。 ディープコピーの問題だとかメモリ確保してた場合にどうだとかは 代入演算子をどうする(作る)かの問題だけど。
161 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 20:56:06 ] stl風にコンテナの中から絶対値が最大のモノを指すイテレータを探すにはどう書く? findだと最初のが見つかったら終わっちゃうよね あ、ちなみにソート済みコンテナではないです
162 名前:デフォルトの名無しさん [2010/05/24(月) 22:14:18 ] 質問です。Hoge という class が合ったとして、その配列の pointer を あるプログラムのheaderで以下のように定義して Hoge* h[2]; それをメインルーチンで以下のようにobject を指すようにしたとします。 h[0] = new Hoge("foo"); h[1] = new Hoge("bar"); そのときにデストラクタでは delete h[0]; delete h[1]; のように二回呼ばないといけませんか? それとも delete [] h; でいけるのでしょうか?何となく前者じゃないといけない気がするのですが。 よろしくお願いします。
163 名前:デフォルトの名無しさん [2010/05/24(月) 22:17:08 ] 2回呼ばないといけません。
164 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:27:20 ] VisualStudio2010でWIN32アプリケーションの勉強をしているのですが、 作った関数で戻り値に文字列を指定する事は出来るのでしょうか? 普通に LPWSTR CLASS(・・){ WCHAR str[100] 略 return str } とかやっても文字列は帰ってきませんし、他のサイトでは文字列を戻す関数作成のサンプルを見かけません。
165 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:27:40 ] >>162 delete[] h; は完全な間違いです。 未定義の動作ですから鼻から悪魔です。
166 名前:デフォルトの名無しさん [2010/05/24(月) 22:31:22 ] >>164 ローカル変数を戻り値にしちゃだめだよ。
167 名前:デフォルトの名無しさん [2010/05/24(月) 22:33:44 ] >>163 >>165 ありがとうございます
168 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:37:49 ] >>164 std::stringとかstd::wstring
169 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:40:38 ] >>164 文字列受け取りたい場合は void GetStr( WCHAR* str, int size ) { strに値をコピー } ってやったら?
170 名前:デフォルトの名無しさん [2010/05/24(月) 23:32:38 ] #include <stdio.h> int main(void){ int n=1; float w,kei=0,heikin,max,min; while(1){ printf("%d件目のデータを入力してください-->",n); scanf("%f",&w); if(w==0) break; kei+=w; if(n==1){max=w;min=w;} if(w>max) max=w; if(w<min) min=w; n++; } heikin=kei/(n-1); printf("合計 :%.1f[kg]\n" "件数 :%d[件]\n" "平均値:%.1f[kg]\n" "最大値:%.1f[kg]最小値:%.1f[kg]\n",kei,n-1,max,min); return 0; } 最小値にループを抜けるための条件のW=0が代入されてしまいます breakでループを抜けたらその後の kei+=w; if(n==1){max=w;min=w;} if(w>max) max=w; if(w<min) min=w; の文は処理されないはずではないのですか?
171 名前:デフォルトの名無しさん [2010/05/24(月) 23:33:52 ] 浮動小数点と==は相性悪いよ
172 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:41:08 ] c言語の質問です。 main(void){ register int a[10], i; for(i = 0; i < 10; i++) scanf("%d", a[i]); } というようにレジスタ上の配列aに数値を読みこみたいのですが、 windowsのgccでコンパイルするとwarningが出てしまい、 配列aはレジスタ上に配置されずにメモリに配置されている予感がします これをレジスタ上に確保したままfor文で数値を読み込む方法はあるのでしょうか?
173 名前:デフォルトの名無しさん [2010/05/24(月) 23:41:44 ] nをint型にしていてもダメなんですか?
174 名前:デフォルトの名無しさん [2010/05/24(月) 23:42:30 ] >>173 は>>171 へ
175 名前:デフォルトの名無しさん [2010/05/24(月) 23:48:46 ] breakするかどうかは、nでは決まらないよね?
176 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:50:19 ] >>166 JAVAのようには出来ないんですね どうもです。
177 名前:デフォルトの名無しさん [2010/05/24(月) 23:50:41 ] >>175 あっ!そういうことですか。ありがとうございました_ _
178 名前:デフォルトの名無しさん [2010/05/24(月) 23:51:19 ] >>172 _asm
179 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 02:34:49 ] >>172 お前がやりたい事は無理 そもそもレジスタを理解してないように見えるが
180 名前:172 mailto:sage [2010/05/25(火) 04:56:04 ] >>178-179 ありがとうございます 最近学び始めたばかりでして知らないことが多すぎたようです
181 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 05:41:35 ] registerなんてキーワードは忘れてしまってよろしい
182 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 10:51:56 ] なんでboostは動的デリータ付きのスコポを用意しなかったんですか?
183 名前:デフォルトの名無しさん [2010/05/25(火) 14:54:32 ] アメリカ人にとってのアルゴリズム辞典の定番の書籍って何がありますか?
184 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:01:59 ] AmericanCode第三版
185 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:21:26 ] 現実に存在する本でお願いします。
186 名前:デフォルトの名無しさん [2010/05/25(火) 18:16:33 ] www.amazon.co.jp/dp/0521701465/
187 名前:デフォルトの名無しさん [2010/05/25(火) 23:39:09 ] C言語であるメモリアドレスを引数経由で返すような関数を定義する場合 int hoge( void ** ); といった定義をしたのですが、 char *fuga; hoge( &fuga ); だと、ポインタの方が違うとワーニング hoge( (void**)&fuga ); だと、strict aliasingのワーニングになってしまいます。 void **という引数指定をするのはおかしな事なのでしょうか? int hoge( void * ); という定義にするとなんだか意図が異なる関数のような int hoge( char * ); とポインタの型を決めてしまうのも意図が異なるような ・・・というあたりで行き詰まっています。
188 名前:デフォルトの名無しさん [2010/05/26(水) 00:12:47 ] 4.9: 参照呼び出しに使うため汎用のポインターを関数に渡すのに、 void **を使うことができるか。 A: 移植性まで考れば不可能である。C言語には汎用のポインターへのポ インター型は存在しない。void *が汎用のポインターとして振る舞う のは、他の型のポインターをvoid *に設定したり参照するときに、 自動的に変換が行われるからである。void *以外の何かを指している void **を使って間接参照しようとすると、この変換は実行できない (隠れた正しいポインターの型がわからない)。
189 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:13:25 ] .libファイルって作ったコンパイラ以外のコンパイラでも使えますか?
190 名前:デフォルトの名無しさん [2010/05/26(水) 00:25:20 ] 互換性があれば使えます。
191 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:27:14 ] >>188 と、いうことは汎用性をあきらめて特定の型のポインタのポインタとするか ポインタは戻り値で返すように作るかしかないということでしょうか? それともほかに常套手段のようなものがありますか?
192 名前:デフォルトの名無しさん [2010/05/26(水) 00:28:45 ] void* hoge();
193 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:44:05 ] 正直そこまで汎用性にこだわる理由が分からん
194 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:44:42 ] 気にせず使え
195 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 02:31:02 ] void *p; f((void**)&p); char *fuga = (char*)p; てのはどうよ?
196 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:10:39 ] >>193 こだわるわけでもないですが いい方法があるなら知りたい使いたいというわけで ないのなら特に気にしないで適当に >>195 確かにその方法ならキャスト不要ですが わざわざそのためだけに別の変数を定義するのも・・・ って事で、気にしないことにします
197 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:02:35 ] template<class T, class U> T **pp_cast(U **pp) { return reinterpret_cast<T**>(pp); } char *p; f(pp_cast<void>(&p));
198 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 14:00:25 ] >>131 実は>>109 =>>122 なんだ 自分のミスを自分で突っ込んだだけなんだよ
199 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:31:44 ] typedef struct _CELL{ char as_status; int x; int y; int cost; int heuristic; int score; }CELL; void SetScoreBubbleSort(const CELL*& node, CELL*& list){ int cnt(0); // ソート開始 while( ( node->cost > list[cnt].cost ) && ( list[cnt].cost != 0 ) ){ cnt++; } list[cnt] = *node; }//続く
200 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:35:54 ] // 続き int main(void){ // ---上・省略--- // 床セルのデータ生成(newの二次元配列) CELL** cell_floor; int cnt(0); int cnt2(0); cell_floor = new CELL* [CellWidth]; for(cnt=0; cnt<CellWidth; cnt++){ cell_floor[cnt] = new CELL[CellLength]; // Astarソート用セルリスト生成(ポインタ型) CELL** open_list; open_list = new CELL*[(CellWidth * CellLength)]; // ---途中・省略--- SetScoreBubbleSort(cell_floor[x][y], open_list);//★ここでコンパイルエラー // ---途中・省略--- // 床セルのデータの削除(deleteの二次元配列) for(cnt2=0; cnt2<CellLength; cnt2++){ delete[] cell_floor[cnt2]; } delete[] cell_floor; // Astarソート用セルリスト削除 delete[] open_list; } ってやってるんだけど、コンパイルするとerror C2664: 'SetScoreBubbleSort' : 1 番目の引数を 'CELL' から 'const CELL *&' に変換できません。って出るんだけどどうしたらいい?
201 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:58:46 ] &はどっから出てきたんだよ
202 名前:199、200 mailto:sage [2010/05/27(木) 16:04:08 ] &はSetScoreBubbleSortの関数の引数にポインタを渡したいから使ったんだけどマズイかな?
203 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 16:48:54 ] ポインタ渡すなら&cell_floor[x][y]
204 名前:199、200 mailto:sage [2010/05/27(木) 16:55:58 ] >>203 配列の形式でそのまま渡せばポインタの先頭アドレスが入ると思って&はつけてなかったけどつけてコンパイルしてみた。 そしたら「error C2664: 'SetScoreBubbleSort' : 1 番目の引数を 'CELL *__w64 ' から 'const CELL *&' に変換できません。」になった。
205 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 17:21:21 ] ポインタ受け取る方は const CELL * で
206 名前:199、200 mailto:sage [2010/05/27(木) 17:33:00 ] >>205 ポインタ受け取る方の参照演算子&を除いて void SetScoreBubbleSort(const CELL* node, CELL* list)とし、 int main{}の中の部分は SetScoreBubbleSort(&cell_floor[x][y], *open_list); としたら一応、コンパイルエラーは取れた。 関数使うときにポインタ渡したいのに*つけるのは気が引けたけど、エラーになる。 関数が抜けたときにまともに値が反映されてるか禿げしく不安・・・。
207 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 17:47:21 ] >>206 引数として渡したいものが、 ・CELL ・CELLへのポインタ ・CELLへのポインタのポインタ の何れなのかをはっきりさせよう
208 名前:199、200 mailto:sage [2010/05/27(木) 18:16:14 ] >>207 引数として渡したいのは「cell_floorの先頭アドレス」と「open_listの先頭アドレス」です。 CELLは型名なので。
209 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:21:10 ] 先頭アドレスならcell_floorだけでいいんじゃね
210 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:22:59 ] Cのポインタから勉強しなおしだな
211 名前:199、200 mailto:sage [2010/05/27(木) 18:25:16 ] すみません。引数として渡したいのは「cell_floorポインタ型配列の中のポインタ」の間違いです。
212 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:46:47 ] >>208 (先頭)アドレスというのは値のことであり、その値の型として ・CELLへのポインタ ・CELLへのポインタのポインタ があるということ。 同じ値であっても型が違うんだよ。その変がよくわかってないんじゃないか。
213 名前:199、200 mailto:sage [2010/05/27(木) 19:09:04 ] SetScoreBubbleSort関数では、 1番目の引数の配列の中のポインタの先の値(2次元配列)を 2番目の引数の配列の中のポインタの先の値(1次元配列)と比較した後に 1番目の引数の配列の中のポインタを2番目の中にコピーしようとする意図があります。
214 名前:199、200 [2010/05/27(木) 19:50:46 ] デバッグしてたらいくつもマズイ点を見つけたので出直してくるorz
215 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 03:42:27 ] Unix上のCで標準入力と標準出力をファイルとしてオープンする場合に "/dev/stdin", "/dev/stdout"と記述することができたと思いますが Windows上のC++(Visual C++ 2010 Express)ではどのように記述 すれば良いでしょうか?
216 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 06:40:03 ] // fprintf に標準出力したいなら、こうだ。 #include <stdio.h> main(){ // FILE *stdout; fprintf(stdout,"err"); }
217 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 07:14:52 ] >>216 一般のファイルの入出力用に書かれたプログラムをそのまま利用して 標準入出力の読み書きをするにはどうするの?という質問だと思う。
218 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 07:54:26 ] FILE *fp; if(1==0){ fp = fopen("/dev/stdin"); }else{ fp = stdin; } か、コメントにすればいいのではないか。例をw
219 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 08:57:26 ] fopen() で con は使えたっけ?
220 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 09:21:13 ] >>219 使えるわけないだろ
221 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 09:59:12 ] >>220 使えないって確認した? >>215 Linux MS-DOS /dev/stdin con /dev/stdout con /dev/null nul のように対応するからやってみて。 >>216 「fprintfに標準出力」じゃ日本語が破綻している。
222 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:34:33 ] >>221 con は入力には使えるが出力には使えない お前こそ試したことあるのか?
223 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:52:27 ] コンパイル環境がVC++ならok
224 名前:221 mailto:sage [2010/05/28(金) 11:54:33 ] ないよ。だから、試してみてと書いている。 別に、「使えるに決まっているから>220は嘘だ」なんて書いていないから安心してね♥
225 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:55:29 ] 221じゃないけど bcc5.82ではできた
226 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 12:14:30 ] >>215 環境依存せず stdout と stdin を使うのがいい バカどもの発言には惑わされない方がいいよ
227 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 12:30:00 ] >>226 話がわからないのなら、無理に書かなくていいよ。 今は、「標準入出力の環境依存したデバイス名は何?」って話題だからね。 それとも、環境依存しないデバイス名が存在しているなんて妄想に囚われているのかい?
228 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:05:42 ] >>227 アンカー見てないの? >>215 に対するレスだよ お前が振ったくだらん話題には興味ないよ 自意識過剰にも程があるよ
229 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:08:30 ] conで開けるのは標準入出力ではなくコンソールだけどね Windows API の CreateFile で CONIN$ と CONOUT$ というのもある
230 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:08:32 ] 誰と戦っているのだろう……
231 名前:215 mailto:sage [2010/05/28(金) 15:23:44 ] fgets(buf, 256, stdin); で問題なく動きました。 ありがとうございました。
232 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 17:58:46 ] 質問はオープンの仕方だったのにね
233 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 20:15:13 ] まあ、ファイルは開かないと読めないものという先入観があるのは しょうがないだろう。
234 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 20:28:00 ] え?
235 名前:233 mailto:sage [2010/05/29(土) 01:02:34 ] いや、だからstdinというファイルハンドルが自動的に開いているという可能性を 知らなかったから 「標準入力をファイルとしてオープンする」という質問になっちゃったんでしょう。 >>231 結果的に欲しかったのはファイルハンドルだったから。
236 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:40:18 ] boostが使えない環境でスマポを自作しないといけないとして どの程度のレベルまで仕様とか実装を練りこむ?
237 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:45:09 ] >>236 理由が政治的かメモリサイズかによって違ってくるな。