1 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 20:15:31 ] C言語の入門者向け解説スレです。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題を片付けます 117代目 pc11.2ch.net/test/read.cgi/tech/1225320579/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 37 pc11.2ch.net/test/read.cgi/tech/1224000127/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
175 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:40:24 ] めんどくさいものは使わない。
176 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:48:13 ] 組み込みは未だに、CとASMで出来ている
177 名前:デフォルトの名無しさん [2008/11/02(日) 20:59:00 ] >>172 ざる蕎麦ではできていないのか
178 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:59:47 ] >>173 #include <stdio.h> #include <limits.h> #define UPPER_BIT (1 << (sizeof(int) * CHAR_BIT - 1)) void print_bit_s(int n){ unsigned int mask = UPPER_BIT; for(;mask; mask >>=1) putchar(mask & n ? '1' : '0'); putchar('\n'); } void print_bit_u(unsigned int n){ unsigned int mask = UPPER_BIT; for(;mask; mask >>=1) putchar(mask & n ? '1' : '0'); putchar('\n'); } int main(){ int n1 = (-1); int n2 = n1 & ~UPPER_BIT; unsigned int m1 = n1; unsigned int m2 = n2; print_bit_s(n1 >> 1); print_bit_u(m1 >> 1); print_bit_s(n2 << 1); print_bit_u(m2 << 1); return 0; } // output 11111111111111111111111111111111 01111111111111111111111111111111 11111111111111111111111111111110 11111111111111111111111111111110
179 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:25:30 ] >>174 そこにコードがあるから
180 名前:173 mailto:sage [2008/11/02(日) 21:44:14 ] んー、たとえば右シフト演算について言えば、符号付き整数型の負値に対して演算を 適用した結果は処理系に依存しますよね。output の1行目でいうと、算術シフトするか 論理シフトするかは処理系に依存すると。。 上の2行は 01111111111111111111111111111111 01111111111111111111111111111111 こうなる可能性があるわけですよね。下の2行に関しては同様に処理系依存の問題は 大丈夫なのでしょうか。コードを解読し切れてないので結論が良く見えないのですが。
181 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:50:37 ] >>173 っMSDN と思ったけど、検索しても見つけにくかったので、ローカルから。 Shift Operators: >> and << (ごめん、英語なんだ) とりあえず適当訳。 左シフトは0埋め。論理シフト。 右シフトはunsignedは0埋め。signedは符号ビットで埋める。 unsignedは論理シフト。signedは算術シフト。 ・Microsoft Specific signed の負の数の右シフトは、実装によります。 MicrosoftのC++の場合は、MSBで空いたビットを埋めます。 MSのC++以外の場合は知らん。 だそうです。
182 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:53:03 ] なんでこういう細かいところ統一しないの?
183 名前:173 mailto:sage [2008/11/02(日) 22:12:18 ] わざわざ和訳までしてもらってすいません。Cの規格的な部分ではどうなんでしょうね。。 Microsoft仕様ではCとC++とでまた違うんですか。こちらでももうちっとしらべてみます。 あふん。。
184 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 22:20:14 ] >>182 なんでOSは統一しないの?なんで通貨も、言語も。 所詮、こんなものは、規格化した集団が幅広い用途を考慮して 決めるか、一部の団体の意見の押し付けでしかないってことだよ。 そして俺らはそれを使うだけ。開発、発案、研究するわけでもない・・・ まぁ、俺はとある有名大学で研究、実験はしたがな。
185 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 22:28:45 ] >>182 効率を重視するから
186 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 22:32:34 ] >>183 MSの場合Cでも>>181 と同じ。 そこに書いてある「MSのC++以外」とは、MS以外のC++という意味。 規格上は、負の値の左シフトは未定義。 正の数なら符号付き・符号無しいずれの型でも0埋めで定義されている。 CはJIS X3010、C++はJIS X 3014が国際規格の翻訳として存在する。 www.jisc.go.jp/
187 名前:173 mailto:sage [2008/11/02(日) 22:57:15 ] おお!そのものズバリのご回答ありがとうございます。 負値の左シフトは未定義でしたか。 正値ならば符号付き・無しに関わらず論理シフトすると、こういうことですね。 ややこしいなあ。。 ともかくこれでスッキリしました。 ありがとうございました。
188 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:05:13 ] 左シフト?
189 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:06:46 ] 「右も左も分かりません」
190 名前:デフォルトの名無しさん [2008/11/02(日) 23:14:23 ] アホか
191 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:16:59 ] ↑うん、お前アホ。
192 名前:デフォルトの名無しさん [2008/11/02(日) 23:27:23 ] 肝心のシフト演算子について話せない奴はすっこんでろ
193 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:28:34 ] >>187 算術左シフトという言葉があったとしても、負の値のそれはやっぱり0埋めだよ。 論理左シフトと全く同じだから、わざわざ算術と言わないだけ。 算術右シフトが負値で1埋めするのは符号を維持するための結果であって、 1埋めするから算術というわけではない。
194 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:29:41 ] 自分の論理を自分に適用できない奴はすっこんでろ
195 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:49:20 ] そんなに符号のことが気になるなら、unsignedをしっかり指定しとけ、な?
196 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:53:00 ] >>177 ざる蕎麦ではだめです。 もり蕎麦に、のりを盛るところから始めなくては。 きしめんでも可。 たぶん、時期的に、そうめんはだめだと思う。 (って何の話だっけ
197 名前:187 mailto:sage [2008/11/02(日) 23:55:37 ] 言葉の定義って難しいですね。。ややこしくて頭がパンクしそうです。 単純に 0埋め=論理シフト、1埋め=算術シフトと覚えてました。 算術(右シフト)だから符号を維持する必要がある→結果として1埋めになる 論理(右シフト)だから符号を維持する必要がない→結果として0埋めになる こういうことなのかな。考えたことも無かった。
198 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:00:01 ] そんなに心配なら shl, sal, shr, sar を直に使えよ
199 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:04:35 ] 算術シフトは 左にnビットシフトすると,元の数の2^n 倍 右にnビットシフトすると,元の数の1/2^n倍 これを保障するシフト演算。だから算術という。
200 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:10:33 ] RCL、RCR、ROL、RORとか混ぜると、さらにパンク。
201 名前:187 mailto:sage [2008/11/03(月) 00:20:29 ] なんで知らなかったんだろう今まで。。恥ずかしい。 算術って言うのは単に符号を維持するっていうことじゃなくて、そういうことなのね。。 それを保証するために符号の維持も当然必要で、その結果1埋めになる(右シフトの 場合)ということかな。
202 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:49:20 ] >>184 多様性のもつ可能性を吟味しなければなりません。
203 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 13:53:42 ] scanfで入力してもらった数字、例えば1234を合計した数字を変数に入れる方法を教えて下さい。(入門者にも理解できる範囲でお願いします)
204 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 13:59:03 ] 数字は1 2 3 4とバラバラに入力するのかそれとも連続で1234と入れるのか?
205 名前:203 mailto:sage [2008/11/03(月) 14:02:37 ] 連続で入力するほうでお願いします。
206 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 14:06:53 ] 文字列で受け取って、一文字づつバラして、数値に変換して、全部足す
207 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 14:16:20 ] >205 まず、%d指定子を使って1234という数字をまるごとあるint変数(仮にt)に読み込む 次に、合計を得る変数(仮にs)をゼロに初期化する そして、以後tが0より大きい間、tを10で割った余り(%演算子を使うこと)をsに加算してからtを10で割るということを繰り返す ※Cでは、正の整数の割り算は端数を切り捨てる 流れ: s:0 t:1234(読み込み) s:4 t:123(1234を10で割った余り4をsに足しtを123に) s:7 t:12(123を10で割った余り3をsに足しtを12に) s:9 t:1(12を10で割った余り2をsに足しtを1に) s:10 t:0(1を10で割った余り1をsに足しtを0に) (tが0になったので終了)
208 名前:デフォルトの名無しさん [2008/11/03(月) 14:21:45 ] int a; scanf("%d", &a); printf("%dの合計を暗算して入力してください"); scanf("%d", &a); printf("はい、ご名算!");
209 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 14:50:08 ] 宿題は宿題スレへ じゃないのか?
210 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:04:53 ] そういうのって、getchar() ループの方が楽じゃね? #include <stdio.h> void main( void ) { int loop = TRUE; int sum = 0; char c; while ( loop ) { c = (char)getchar(); // 1文字入力 switch ( c ) { case '0': // 0〜9が入力された場合、sumに足しこむ case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': sum += (int)( c - '0' ); break; case EOF: loop = FALSE; break; } printf( "合計値は %d \nです。", sum ); } }
211 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:08:52 ] '0'-'9'は連続が保障されてるから、そんなことしなくても
212 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:22:36 ] int c, sum = 0; while (isdigit(c = getchar())) sum += c - '0'; printf("%d\n", sum); これだけでいいじゃん
213 名前:>212 mailto:sage [2008/11/03(月) 15:25:30 ] 0〜9以外を無視していないから却下
214 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:27:06 ] え?
215 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:29:13 ] 123x4 と入力したら 10 が返ってくる仕様が求められてるのか?
216 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:30:18 ] >>209 丸投げでなければわからないことを聞くのは一向にかまわない >>210-212 scanfでって言ってるのにgetcharはないだろ
217 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:41:17 ] こういうので、質問者にscanf()が必須条件なのか、それ以外でもいいのかって質問してもめったに返事が返ってこないよな。
218 名前:210 mailto:sage [2008/11/03(月) 15:43:37 ] >>216 こういうのはふつうキーイベントループ制御だべよー。 WindowsのようなGUIでもテキストボックスに「1234」なんて連続して入力させるかぁ?
219 名前:203 mailto:sage [2008/11/03(月) 15:49:26 ] みなさん、お答えいただきありがとうございます。 アドバイスを受け、色々と試してはいるのですが、一向にうまくいきません。 ここで質問なんですが、1234を char str[5]; scanf("%s",str); で文字列として受け取って atoi(str)で整数値に変換 その後に1234を一文字ずつにバラす方法がさっぱりわかりません アドバイスお願いします。
220 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:52:30 ] >>219 4 = 1234 % 10; 123 = 1234 / 10;
221 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:07:33 ] 文字列入力ってテーマを見ると、すぐにgetchar()で一文字ずつ判断するロジック書く奴っているよね。 そういう奴に限ってろくでもないバグを仕込むから笑えない。
222 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:09:19 ] 例えば、>212はまぁ無難な方で、>210なんてわざわざバグを埋め込むための無駄な努力の跡さえ見えてしまう事実。
223 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:23:58 ] >>221 本番では2バイト文字に気を付ければいいだけだろ >>222 レビューでデバッグしてくれ
224 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:35:49 ] 標準入力から0xffを入力すると、EOFと誤解釈して終了してしまうね。 この程度のサンプルならどうでもいいけど、ファイルをリダイレクトして使うようなツールだと恐怖だね。
225 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:42:38 ] >219 ソースはれ あと、ほかに制約がないのなら、%sからatoi()なんかしないで素直に%dで読みなさい
226 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:00:30 ] >>224 それ、0xffイコールEOFだから誤解釈じゃないよ。それも正常系の解釈と処理。 まあサンプルプログラムだし、EOFは入力の終了条件のために設けた だけだから、そこは削除して他の方法に置き換えても構わないし。
227 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:06:47 ] 違います EOFは決して0xffではありません
228 名前:203 mailto:sage [2008/11/03(月) 17:07:34 ] #include<stdio.h> int main() { int w,x,y,z,goukei; int w2,x2,y2,z2,goukei2; int yosou[4]; int yosou2; printf("前回の当選数字を入力:\n"); scanf("%d,%d,%d,%d",&w,&x,&y,&z); goukei = w + x + y + z; printf("前々回の当選数字を入力:\n"); scanf("%d,%d,%d,%d",&w2,&x2,&y2,&z2); goukei2 = w2 + x2 + y2 + z2; printf("今回予想した数字を入力:\n"); scanf("%d,%d,%d,%d",&yosou[0],&yosou[1],&yosou[2],&yosou[3]); yosou2 = yosou[0] + yosou[1] + yosou[2] + yosou[3]; if(goukei == yosou2 || goukei2 == yosou2){ printf("%d Is a NG\n",yosou2); }else if(yosou2 > 9 || yosou2 < 27){ printf("%d NG",yosou2); }else{ printf("%d OK\n",yosou2); } return 0; } ナンバー4の当たり数字過去2回の合計値と一致した場合、NGと出力するプログラムです。 また、予想した数字の合計値が9〜27に入ってなくてもNGと出力します。 ほんとくだらなくてすいません。
229 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:13:14 ] >>226 いや、大誤解だと思いますね。>>224 ではなくて、>>>226 が。 >>210 は getchar() の戻り値を char でうけているのが、センスがないというか、そもそも本質を理解していない、というべきか。 もしかして、いつものあなたですか?これはつり?
230 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:17:14 ] いつものあなたって・・ お前は誰と戦ってるんだ
231 名前:デフォルトの名無しさん [2008/11/03(月) 17:22:56 ] 非科学的=厨はマ板にまではびこっている
232 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:25:19 ] 糖質かこいつ
233 名前:デフォルトの名無しさん [2008/11/03(月) 17:33:18 ] どいつ?
234 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:34:13 ] 229
235 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:34:35 ] >>228 scanfを使うことは必須条件? あと入力するのは「1234」なのか「1,2,3,4」なのか 前者だったら>>207 でできないかな 後者だったらsscanfとかを調べてみるといいかも
236 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:51:07 ] >>227 ですよね。というか、標準入力からの入力値が、つうつうで getchar() ≒ fgetc() の返り値になるわけではないのですが。 >>230-234 やっぱりIDをつけたほうがいいのでしょうかね。
237 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:04:03 ] >>228 "%d,%d,%d,%d"と書いたら、それは1,2,3,4と入力させることを意味する 1234と入力するのなら>>207 のようにすること
238 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:21:31 ] fgetsじゃなくてgetsでいいよ どうせ両関数の仕様すら理解していないんだろ
239 名前:203 mailto:sage [2008/11/03(月) 18:26:55 ] スレ汚しすいませんでした。 >>207 の方法で1から作り直します。 皆さんご回答本当にありがとうございます。
240 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:38:12 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7932.txt 画面内の球をクリックすると初速度v0で鉛直投げ上げするプログラムです 空中にある状態の球をクリックするとまたその位置から投げ上げされて 球をクリックするたびにどんどん球が上がるようにしたいんですが、 空中の球をクリックしても何も起こしません。 ボールが跳んでるときに、最初にボールがあった場所をクリックするとおかしなことに。
241 名前:デフォルトの名無しさん [2008/11/03(月) 19:43:31 ] あっそう
242 名前:240 mailto:sage [2008/11/03(月) 20:22:33 ] どこが間違ってますかね?
243 名前:受付番号001 mailto:sage [2008/11/03(月) 20:25:58 ] >>242 いま診てやるから待ってろ
244 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:34:54 ] たぶんここだな if(bally+ball >= 500){ KillTimer(hWnd,ID_MYTIMER); bTimer = FALSE; mytime = 0; }
245 名前:質問 [2008/11/03(月) 20:55:23 ] ファイルの直ぐ下に任意のファイルの内容を そのままコピー、連結できる関数ありますか?お願いしますm(__)m
246 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:58:55 ] >>245 ないです。
247 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:00:06 ] 自分でアペンドモードで開いてコピーしる
248 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:00:38 ] 下はどっちだ?
249 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:02:24 ] >>245 C/C++の宿題を片付けます 117代目 pc11.2ch.net/test/read.cgi/tech/1225320579/
250 名前:245 [2008/11/03(月) 21:02:52 ] ということはファイルの内容を読み込んで fopenのaで逐一書き込んでいくのが最良の方法ですね?
251 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:03:23 ] system
252 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:06:56 ] 読み込みながらの方が良いだろう。 char buf[4096]; f = fopen(path, "r"); g = fopen(paht, "a"); while (c = fread(buf, 1, sizeof buf, f)) fwrite(buf, 1, c, g)
253 名前:245 mailto:sage [2008/11/03(月) 21:12:33 ] ありがとうございましたm(__)m
254 名前:240 mailto:sage [2008/11/03(月) 21:18:46 ] >>244 問題ないような気が・・?すみません分からないです
255 名前:受付番号001 mailto:sage [2008/11/03(月) 22:24:32 ] >>254 診ましたよ〜。 えーと、これはですね、、、もう手遅れです。 (←うそ) 問題点はボールのY座標の扱いですね。 WndProc内の変数ballyで保持しているY座標と WM_TIMERメッセージ内で一時的に計算しているY座標とが一致していません。 ballyはウィンドウメッセージを受けるたびに480に初期化されていますので、上に飛んでいる ボールをクリックしても反応しなく、地面をクリックすると反応してしまうのです。 ballyはWM_CREATメッセージ内だけで初期化しましょう。 また、WM_TIMERメッセージ内では常に地面からの座標計算でボールの高さを計算して しまっているので、上手くボールにヒットしたらballyの位置から計算しなおす様に変更する 必要があります。
256 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:25:18 ] >>245 COPYやcatで連結は駄目なの?
257 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:35:13 ] ソースを読むって言うのはさ 自分とソースを一体化させる作業なんだ 「俺は今どうなっているのか」と考えながら読むんだ 無意識にみんなやってると思うぜ 他の何かがどうなってるかではない、自分がどうなってるか
258 名前:質問 [2008/11/03(月) 23:27:00 ] 下記の違いを教えていただけますでしょうか? return exit あ、あと EXIT_FAILUER ってなんですか?
259 名前:デフォルトの名無しさん [2008/11/03(月) 23:28:00 ] FAILUARE
260 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:28:50 ] こういう人にはgoogleの使い方を教えたほうが親切なんでしょうか?
261 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:29:38 ] return は予約語 exit はライブラリ関数 EXIT_FAILURE はマクロ定数 です。
262 名前:デフォルトの名無しさん [2008/11/03(月) 23:40:04 ] return は関数から抜ける exit はプロセスから抜ける EXIT_FAILUER は書いた者に聞け(煽り口調で)
263 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:41:28 ] EXIT_FAILURE はマクロ定数の意味が分りません
264 名前:240 mailto:sage [2008/11/03(月) 23:44:28 ] >>255 うまくいきました! 大変わかりやすい説明ありがとうございます!
265 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:51:02 ] >>257 空気を読むって言うのはさ 自分と空気を一体化させる作業なんだ 「俺は今どうなっているのか」と考えながら読むんだ 無意識にみんなやってると思うぜ 他の何かがどうなってるかではない、自分がどうなってるか しかし、鏡を見ると、場に合わない容姿・・・
266 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:02:17 ] int main (void){ int i; int vx[5]; for(i=0;i<5;i++){ printf("vx[%d]:",i); scanf("%d", &vx[i]); } putchar('\n'); for(i=0;i<5;i++){ printf("vx[%d]=%d\n",i,vx[i]); } return (0); } 上記の配列の要素を読み込んで表示のプログラムを実行したところ 1 2 3 4 5 vx[0]:vx[1]:vx[2]:vx[3]:vx[4]: vx[0]=1 vx[1]=2 vx[2]=3 vx[3]=4 vx[4]=5 と変な形になってしまい、試行錯誤したところどうやら実行の際に ファイル名 | more としていたのが原因のようでした。 moreはその前に書いてたプログラムの際に利用していてそのままでした。 moreは単に一画面ずつ表示するようにするだけなのになぜこのようなことが起きたのでしょうか?
267 名前:受付番号001 mailto:sage [2008/11/04(火) 00:06:58 ] >>264 乙! 面白いトレーニングプログラムだねw わしもSetTimer、KillTimer、WM_TIMERメッセージは、テトリスを作ってみた時に使ったよ。 同じように素のWindows SDKとC言語だけでね。 >>265 大人になれば空気なんて読まなくなる。いや読む必要がなくなるのだ。 その代わり、盤面の様子や流れ、相手のニーズや考えを読むように変化する。
268 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:30:14 ] 自分がmainになるんだよ mainになって、forなどで値の計算や操作をやっていると考えると どこがおかしいのか分かりやすい 元々俺がアセンブラ屋だったから 自分に置き換えて「イメージ」する癖がついた っていうか、みんなイメージしてると思うが!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
269 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:35:49 ] >>266 printf() の後に fflush(stdout); をおいてみるとどうなりますか?fflush(NULL); ではどうなりますか?
270 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:36:28 ] >>268 新しい芸ですか?
271 名前:デフォルトの名無しさん [2008/11/04(火) 00:36:54 ] みなさん、Cのソースを組むとき、分かりやすく汎用的に組む為に、具体的にどういうことに気を付けてますか? たとえば、、、 僕の場合なんですが、 ・一行は80文字。 ・strcpyよりmemcpy ・独自関数ライブラリのプロトタイプは必ず書く。 ・関数の引数が多くなりすぎる時は構造対で渡す。 ・関数名はキャメル式に統一。 ・入れこは3つ以上にしない。 ・繰り返し文は使い分ける。 ・構造化プログラミング。mainは目次みたいな感じで、全体が把握でくるような作りに。 ・C言語についてのコメントは書かない。 ・インクルードヘッダはは使用するものだけ書く。(まとめたりしない) まだあると思うけど、とりあえずこれくらいかな〜 みんなのも教えてください。
272 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:39:26 ] >>271 > ・strcpyよりmemcpy 状況にもよりますが、これは賛同しかねます。
273 名前:デフォルトの名無しさん [2008/11/04(火) 00:45:27 ] >>272 あ、すいません。 そうですね。\0つけたい時ありますもんね。 strcpy→strncpyに訂正します。
274 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:50:17 ] >>271 入れ子2つだけじゃ厳しいなぁ
275 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:52:42 ] memcpy()でコピーしてるのに、コピーの長さをstrlen()で取ってるコードをこのまえ見たな。 strcpy()でいいじゃんって思うけど。