1 名前:デフォルトの名無しさん [2007/02/01(木) 23:08:46 ] このスレは標準Cのみの限定スレです。 まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。 質問する前には最低限検索を。 エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。 C FAQ 日本語訳 www.kouno.jp/home/c_faq/ Cプログラマ必読 ・プログラミング言語C(通称 K&R) www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244 他の過去ログはここに nssearch.hp.infoseek.co.jp/clang/ 前スレ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130 pc10.2ch.net/test/read.cgi/tech/1159613789/ GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は 専門の別スレッド↓があるのでそこへさようなら。 【初心者歓迎】C/C++室 Ver.34【環境依存OK】 pc10.2ch.net/test/read.cgi/tech/1169039760/ C/C++の宿題を片付けます 82代目 pc10.2ch.net/test/read.cgi/tech/1169575464/
445 名前:gost mailto:xiaotin511@yahoo.co.jp [2007/05/01(火) 17:22:26 ] 符号なし 32bit の変数 a と b があります。 >> unsigned long a; unsigned long b; a と b には任意の値が格納済みであるとして、加算するとオーバー フロー(0xFFFFFFFFを超える)の場合、"Overflow"、オーバーフロー しない場合、"(a+b) OK" を出力するプログラム 教えてください 条件: if((a + b) > 0xFFFFFFFF) の判定は使えません。 if((a + b) <= 0xFFFFFFFF) の判定は使えません。 a と b を加算してはなりません。
446 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:32:29 ] >>444 popenの第2引数に"rw"使えなかったっけ あとはforkで起動してパイプつなぐとか
447 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:43:29 ] >>445 宿題臭いな。宿題スレに行けば。
448 名前:gost mailto:xiaotin511@yahoo.co.jp [2007/05/01(火) 17:46:03 ] thanks
449 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:51:05 ] 昔、if (x || y || z) よりも if ((x | y | z) != 0) の方が 速くなる可能性がある(コメント必須)という話があったが if (memcmp(p, "924", 3) != 0) より if (p[0] != '9' || p[1] != '2' || p[2] != '4') より if ((p[0] ^ '9' | p[1] ^ '2' | p[2] ^ '4') != 0) の方が 速くなる可能性もあるのかな。(コメント絶対必須で) もちろん、ショートサーキットの起こる率によっても違うだろうが。 まあ、このケースに限れば(バスエラーが起きない状況なら) if (*(DWORD *)p & *(DWORD *)"\xFF\xFF\xFF" == *(DWORD *)"924") の右2つを整数定数に変えたものが最速か。 もちろん、このコードは移植性も無いし可読性もない 最悪のコードではあるのだが。
450 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:51:27 ] stdioのFILE系で読み書きを同時にするのはトラブルの元だって たしかrubyの人が言ってた気がする。
451 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:00:03 ] 宿題の答えとしては条件に合わない方法 unsinged long c = a + b; if(c < a) { puts("Overflow"); } else { puts("(a+b) OK"); } ∵) オーバーフローしたとすると、 c = a + b - m (m = 0x100000000) c >= a だと仮定すると b >= m となるが、b < m なので矛盾する。 従って、オーバーフローした場合は必ず c < a となる。 逆に、オーバーフローしていない場合に 必ず c >= a になるのは自明。 ∴ c < a ならばオーバーフローしている。
452 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:06:40 ] >>449 分岐は基本的にコストが高いから 分岐が少ない方が速くなる可能性はあるけど、 どのくらい速くなるかは 環境と実行条件によるとしか言えない。 だから、よく使われると想定する環境下で実測するしかない。 ただ、よほどじゃないと問題にならない程度の差しかないと思うけどね。今の時代。 数兆周のループの中に入ってるとかでもない限り。
453 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:32:01 ] a > 0xFFFFFFFF - b ではいかんか?
454 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:47:24 ] 氏ね
455 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 19:25:10 ] >>445 Hacker's Delightの2-12でも読めば?
456 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 20:51:40 ] リモートの機器から日、時、分、秒を取得して、 ローカルの日時から、年月を補ってtime_t型通算病 (所謂UNIXタイム)を求めたいのだけど・・ 単純にtime, localtime, mktimeで作ると、月替わりタイミングでバグるよね。 スマートなやり方があった気がするが・・思い出せない、おながいします。 ※リモートとの時刻誤差は数分以内程度を想定してます。
457 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 20:55:26 ] 日が違ってる場合に年月の補正をすればいいんじゃない?
458 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 23:47:23 ] C言語の問題じゃねー気がするが 日が取得できるのならそれをつき合わせて補正でイナフ
459 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 00:24:31 ] 年が今年なら、年月日だけあわせて0時の通産を求めて時分秒足したら
460 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 01:02:14 ] >>451 このスレ的には加算を禁じる理由は何もないからいいんじゃね
461 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 01:23:14 ] >>457-459 サンクス、思い出した。言語は関係ないな、こんなイメージで、ぶちこんどいた。 time_t now = time(0); struct tm local = *localtime(&now); time_t adjust = (local.tm_mday - remote->tm_mday) * (24 * 60 * 60); if (adjust > issenwokoeta) { throw new AdjustOverflowException(); } local.tm_mday = remote->tm_mday; local.tm_hour = remote->tm_hour; local.tm_min = remote->tm_min; local.tm_sec = remote->tm_sec; return mktime(&local) + adjust;
462 名前:444 のものです。 [2007/05/02(水) 02:04:03 ] あるプログラムから別のプログラムから立ち上げて、 その標準入出力を掴むプログラムを作っていたものです。 その呼ばれたプログラムのstdin,stdoutを呼び出し元プログラムで制御するまでに一立ったのですが。 仮にsshやftpを立ち上げてみると、ログインパスワード入力時の 「Password:」 の表示が標準出力じゃないみたいで、 呼び出し元プログラムを通さず、画面に出てきてしまいます。 一体何故でしょうか?
463 名前:462訂正 [2007/05/02(水) 02:04:43 ] >あるプログラムから別のプログラムから立ち上げて、 あるプログラムから別のプログラムを立ち上げて、
464 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 02:41:30 ] >>463 スレ違い。
465 名前:デフォルトの名無しさん [2007/05/02(水) 03:03:04 ] んじゃ別のところで;^^)
466 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 04:58:46 ] つ【stderr】
467 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 09:34:10 ] パスワード系はエコーバックもあれしてるからなあ
468 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 11:25:37 ] つ/dev/tty
469 名前:デフォルトの名無しさん [2007/05/03(木) 04:12:22 ] 話ぶった切って悪いんですがILP64環境で4バイト長の整数を使いたいときってどうなるの?
470 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 04:23:57 ] C99 ならこれが使えるんじゃないかと思うけど、どうだろう? ttp://seclan.dll.jp/c99d/c99d09.htm#dt19990621
471 名前:デフォルトの名無しさん [2007/05/09(水) 11:36:43 ] ヘッダにコードを書いてはいけないと聞いたのですが 何かあるのでしょうか? 別に書いても動きますよね?
472 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 11:42:37 ] 動く事は動くが再利用性やコードの見通しが悪くなるからあんまり書かない方がいい
473 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 11:55:36 ] >>471 規格の 6.9 External definitions で、一つの関数または変数に対する定義は プログラム全体で一つ以下(使われなければ無くてもいい)と制限されている。 ただし inline 関数や初期化子の無い外部変数定義は例外。 ヘッダは複数のコンパイル単位に取り込まれるので、うかつに関数や変数の 定義を置くとプログラム全体としては同じ名前に対する定義を複数持ってしまう ことになり、未定義動作となる。 現行の一般的な処理系では、この規則に反するほとんどの場合がリンク時に 「重複した定義」などのエラーとして報告される。
474 名前:デフォルトの名無しさん [2007/05/09(水) 12:03:53 ] >>472 473 なるほど、わかりました。 ありがとうございます。
475 名前:デフォルトの名無しさん [2007/05/09(水) 13:41:50 ] 3次元配列を使ってプログラムを組んだんですが、これをポインタを使ったプログラムに書き換えたいです。 簡単な方法があれば教えて欲しいです。 いまいちポインタが分かってないもんで、よろしくお願いします。 3次元配列は、2000*2000*2000の配列です。
476 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:03:38 ] >>475 配列とポインタって中でやることはほとんど同じだから、 書き換えたってたいして意味無い(動かないものが動くようになったりしない)よ? > 3次元配列は、2000*2000*2000の配列です。 これ、一般人が買うようなPCだとオンメモリでは扱えない大きさだよ? (わかってるならいいんだけど)
477 名前:デフォルトの名無しさん [2007/05/09(水) 14:22:57 ] >>476 ありがとうございます。やっぱり動作が軽くなったりはしないですよね・・・
478 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:28:48 ] 何十ギガという単位で実メモリがあれば速くなるんじゃないかな。
479 名前:デフォルトの名無しさん [2007/05/09(水) 14:47:12 ] 今FDにはいっている会員IDとPCの中にあるDATファイルの会員IDを照らし合わせて、同じ会員IDの名前だけとりだすというプログラムをつくっているんですがどなたか優しいできる方プログラムをのせていただけませんか?おねがいします!
480 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:50:45 ] まずは両方のデータをアップしなさいな。 データのフォーマットがわかないと作れないじゃん。
481 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:53:31 ] 訂正:わかないと→わからないと
482 名前:デフォルトの名無しさん [2007/05/09(水) 14:55:28 ] データとは会員IDのナンバーとかですか?ほんと初心者ですいません。
483 名前:デフォルトの名無しさん [2007/05/09(水) 15:26:41 ] FDの中のデータは会員IDのみになっていて、1001がはいっています。PCのDATファイルには会員ID、名前、生年月日、住所の順に 1001 田中 19840908 千葉県 1002 高橋 19841203 埼玉県 1003 吉田 19840405 山形県 1004 佐藤 19841112 沖縄県 がはいっています。この2つを照らし合わせて1001のIDの田中だけ表示させたいというプログラムです。やさしいかた教えてください!お願いします!
484 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 15:35:58 ] >1001 田中 19840908 千葉県 「1001」と「田中」の間には何があるの? 半角スペース? 他の項目の区切りも同じ?
485 名前:デフォルトの名無しさん [2007/05/09(水) 15:41:40 ] 区切りは全部タブです!よろしくお願いします!
486 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 16:00:39 ] >>480 >>484 丸投げするような莫迦の相手をするな。
487 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 16:07:23 ] 何日までに作ってほしい?
488 名前:デフォルトの名無しさん [2007/05/09(水) 16:16:07 ] 早ければ早いほどうれしいですが忙しいなら無理には大丈夫です。今週いっぱいにはつくりたい予定ですが。丸投げですいません。よろしくお願いします。
489 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 16:21:33 ] 代金は銀行振り込みでいい?
490 名前:デフォルトの名無しさん [2007/05/09(水) 16:28:26 ] #include <stdio.h> const int BUFFER_SIZE = 100; int main() { int y,m,d,days,n; char buf[BUFFER_SIZE],c; printf("年月日を入力してください\n"); while(true){ fgets(buf,BUFFER_SIZE,stdin); n=sscanf(buf,"%d%d%d%c",&y,&m,&d,&c,); if(n==3){ break; } else if(n==-1){ continue; } else{ printf("error\n"); return 0; } } 年月日を入力して曜日を求めるプログラムの一部なんですが、 fgets(buf,BUFFER_SIZE,stdin); n=sscanf(buf,"%d%d%d%c",&y,&m,&d,&c,); の部分はどういう処理になるんでしょうか?nに整数が入るのがイマイチわかりません
491 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 16:44:15 ] ユーザがどういう入力をすると想定してるの? もしかして"20070509"(YYYYMMDD)とか?
492 名前:490 mailto:sage [2007/05/09(水) 17:05:15 ] そうです。2007 5 9 って半角スペースで区切ると曜日が表示されます。 2007 5 9みたいに入力してなぜnが3とか-1とかになるんですか?
493 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 17:10:27 ] -1 ではなく EOF と書け。
494 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 17:22:59 ] >n=sscanf(buf,"%d%d%d%c",&y,&m,&d,&c,); この%cは何を得ようとしてるの?
495 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 17:27:22 ] 標準関数のリターン値の意味を質問しているのか? ヘ ル プ 読 め。 manとかMSDNとかググるとか、ヘルプ読めない環境でプログラミングなんて無茶だから。
496 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:04:25 ] >>483 #include <stdio.h> int main(void) { system("grep -f fddata.dat pcdata.dat"); return 0; }
497 名前:490 mailto:sage [2007/05/09(水) 18:14:30 ] 簡単に書き直したらうまく出来ました。 ありがとうございました
498 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 22:44:15 ] WindowsでもLinuxでもいいんだけど共有メモリ使う時に 構造体にキャストして使う方法とわざわざmemcpyで各要素ごとにコピーする方法が 等価だって言い張る人にどうやって違うんだよって説明すればいいですか? 相手は37歳のシナです。
499 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 22:56:06 ] >>498 比較用のコードを書いて、ベンチマークの結果をみせてやるとか。
500 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 22:57:49 ] >>498 そのシナさんはキャストでもコピーが作成されると思ってんの? だとしたら、キャストの場合はアドレスが変わってないことを 見せてあげればいいんじゃない?
501 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 22:58:49 ] >>498 まず >>1 を読み直せ。それでも相談を続けるなら2つの方法に 対応するコードと、双方の主張を理由をつけて挙げてくれ。
502 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 22:58:50 ] >>499 それが、そうやって今しがたみせてやりましたが今度は このような書き方は一般的じゃないとかいって怒り出して机をめちゃめちゃに して帰りました。おまえの低能ぶりには呆れるとか捨て台詞を吐いて行ってしまいました。 正直な話、共有メモリの一番うまい使いかたってOpenMPとか見たいに自作のデータ構造を そのまま共有メモリで共有できる形が理想なのにそれを言っても解かってもらえないのだろうか。
503 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 23:02:04 ] よそでやれ
504 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 23:10:58 ] Cの話じゃないよね そいつの人格か理解力の問題か そういう人とのコミュニケーションの取り方の問題だよね
505 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 23:12:08 ] >>502 シナさんがこんな時間まで残業付き合ってくれてたんなら少しは大目に見てやれ。
506 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 00:32:14 ] マ板でやれ
507 名前:デフォルトの名無しさん [2007/05/10(木) 11:03:51 ] 483ですがどなたか本当におねがいします。新社会人でこまっています。やさしい方おねがいします。
508 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 11:12:27 ] Excel でも使えば?
509 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 11:14:59 ] >>483 Cじゃないとだめ? C#とかJavaは?
510 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 11:17:50 ] >>507 >>1 を100回音読後、首吊って詫びろ阿呆。
511 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 11:33:06 ] >507 上司に「できません」って言え
512 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 14:37:05 ] >>507 仕事なのか? だったらコマンドラインで grep 使えよ。 わざわざ作れもしないCプログラムで仕事を遅らせるのはアホ。
513 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 15:00:16 ] >>507 もしやそれは練習課題?
514 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 17:29:15 ] 上にもあるように、scanfつかえ
515 名前:デフォルトの名無しさん [2007/05/10(木) 18:10:54 ] ごめんなさい。でも真剣に困ってるし助けてほしいんです。よろしくお願いします。
516 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 18:12:27 ] だからscanfつかえよ
517 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 18:13:24 ] 帰れ
518 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 18:13:55 ] 常識知らずにかける情けは無い
519 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 18:20:37 ] スレ違い
520 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:38:09 ] だーから相手すんなってば。 相手するなら誘導してやれ。
521 名前:デフォルトの名無しさん [2007/05/10(木) 22:03:02 ] >>515 ですけどもういいです。もっとできる人探しておしえてもらいます。 ここにいる人達はどうせこのプログラムがかけないんでしょ? こんなしたてに聞いているのにひどい人達ですね。みなさんわからない 時期はなかったんですか?
522 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:07:50 ] 君は自分の要求を受け入れる人の言うことにだけ耳を傾けるのかね。
523 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:24:34 ] >ここにいる人達はどうせこのプログラムがかけないんでしょ? こういうこと言うやつに何も教える気は無い、消えろ。 その聞き方じゃどこ行っても同じだぞ、初心者にしか相手してもらえない
524 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:26:54 ] 少なからず相手しちゃってる件
525 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:26:59 ] ネタにマジレスカコイイ
526 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:30:26 ] でしょでしょエヘヘ
527 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 01:53:21 ] でも実際こういう新入社員は居る事実。
528 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 16:58:23 ] >>521 を本人が書いているという保証はどこにもないなあ・・・。
529 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 17:41:56 ] だから?
530 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:21:44 ] 疑問文に感嘆符つけて質問する奴は俺の中ではスルー対象だわ。 非常に高い確率でDQNだからな。相手してられん。
531 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:23:12 ] 疑問文に感嘆符とはどういうことだね!
532 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:35:48 ] ?!
533 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:37:02 ] >>530 感嘆符つけて質問する奴なんてお前のレス以前に見たこと無い。
534 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:39:36 ] 勘違いしつつぼやく奴は俺の中ではスルー対象だわ。 非常に高い確率でDQNだからな。相手してられん。
535 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:43:23 ] インテロバーング
536 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:46:44 ] 疑問符と感嘆符を間違える奴は俺の中ではスルー対象だわ。 非常に高い確率でDQNだからな。相手してられん。 って、スルーできてねーっつーの。
537 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 13:03:18 ] 今こそスルー力が試されるとき!
538 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 13:34:27 ] throw new NullPointerException("ぬるぽ");
539 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:05:17 ] try { >>538 } catch(Exception e) { System.out.println("ガッ"); }
540 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:06:41 ] Javaはスレ違い。 C言語で書け!!
541 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:06:53 ] >>483 あんまり暴れるな 「IDが一致してたら表示」でいいんだよね FDからIDを1つ取ってくる それをPCのファイルのIDを照らし合わせて一致したら表示 次のIDをFDから持ってきて上を繰り返す という手順でいいんじゃない? いまケータイだからソースは載せられんけど
542 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 16:43:12 ] >>541 >あんまり暴れるな 君みたいに、いちいち反応する連中がいなくなってくれれば もっと早く収束してたんだろうけどね。
543 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 16:47:37 ] あまりにくだらない
544 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:24:35 ] >>542 いちおう>>541 はやり方書いてるけど?
545 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 18:18:25 ] >>544 は?関係ねえよ。 >>486