1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ] C言語の*入門者*向け解説スレッドです。 初心者、初級者の方は他の質問スレのほうが良いかもしれません。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 130代目 pc12.2ch.net/test/read.cgi/tech/1250204272/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 53 pc12.2ch.net/test/read.cgi/tech/1253110182/ 過去スレ 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
488 名前:デフォルトの名無しさん [2009/10/18(日) 12:48:45 ] >>487 windows、VC++でコンパイルしてできた.exeを実行しました。 改行コード \n,\rとかですか?
489 名前:デフォルトの名無しさん [2009/10/18(日) 12:58:28 ] fscanfで読もうとしている、に1000ペリカ
490 名前:デフォルトの名無しさん [2009/10/18(日) 13:02:29 ] fscanfはつかってないのに?ww
491 名前:toya mailto:age [2009/10/18(日) 13:12:59 ] wikibooksでC言語の教科書を執筆しています。協力者求む。 ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E
492 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:13:29 ] 全角スペース。
493 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:14:56 ] C体験記じゃんw
494 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:29:25 ] >>488 いやいや、実行してできたファイルをダンプしたりしてみてよ デバッガは使えないのかな?
495 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:32:34 ] その実際のコード貼れよ。 その例みたいに全角スペースなのか?
496 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:41:22 ] >>486 for(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break; printf("%d", k);
497 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:47:32 ] >>485 別のプロセスで出力ファイルが開かれてたりして、実際には書き込まれてないんじゃないかな。
498 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:56:09 ] >>496 そのプログラムちょっとミスって fork(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break; printf("%d", k); ってやったら大変なことになっちゃったんだけど。 絶対落ちないって有名なLinuxが二度と起動しなくなった。
499 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:58:58 ] コンパイル通るのか?
500 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:59:53 ] アホか。 ゾンビプロセスが増えただけで、カーネルは落ちてないだろ。 死ねよマルエツマカ。
501 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:01:28 ] コンパイルできない
502 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:01:28 ] >>498 はいはい、面白い面白い。 これで満足?
503 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:14:13 ] >491 間違っている部分は、直してあげた方がいいのか。 >498 俺様fork()ならたぶんコンパイルできると思うけど、一般的なfork()ではコンパイルできないと思われる。
504 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:26:38 ] またマルエツマカが荒らしてる
505 名前:485 [2009/10/18(日) 14:38:59 ] 全角はたまたまみすた oshiete1.goo.ne.jp/qa1538277.html ぐぐったけどたぶんこういうことだとオモワレ。 それにしても自動改行ってなんだ?・・・
506 名前:485 [2009/10/18(日) 14:42:58 ] 全角はたまたまミスた oshiete1.goo.ne.jp/qa1538277.html ググったけどたぶんこういうことだと思われ。 それにしても自動改行ってよくわからん
507 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:54:14 ] コード貼れっつーの。 勝手に改行なんてしねえよ。 何かミスってるだけだろ。
508 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 15:13:54 ] >>506 どうやって改行してることを確認したかってのはまさにそのことが知りたかったのだけど。 使ってるエディタやコントロールが、自動で折り返したんじゃないかと。 だからファイルに出力したらダンプやバイナリエディタで改行コードが入ってるのか調べてみなさいよ、と。
509 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 17:59:04 ] Q1: QUESTION1; ←ヘッダーにあるdefineで問題呼び出し fgets (buf, sizeof (buf), stdin); sscanf (buf, "%d", &ans); if (1 <= ans && ans <= 3 ){ if (ans == 2){ printf("正解\n"); point++; }else{ printf("はずれ\n"); } }else{ printf("1〜3の数字おして。もっかい。\n"); goto Q1; } Q2: ans = 0; QUESTION2; 以下ループ 3択クイズ形式学習プログラムを作ったのですが、fgets→sscanfのところで数字を入力してEnterを押すと、 次の問題のif文のelseが1度実行される(1〜3を押せエラー→Gotoで問題が2回表示される)のですが、 なぜそうなるのかわからず対処できません。 単純にエンターを1回押してるのに入力を2回(複数回)受け付けてるだけなんでしょうか・・? もし、そうならどのように対処すればいいのでしょうか。
510 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:14:28 ] これの前後の部分に問題ありってことだね。 「問題」ってのは question じゃなくて problem な。
511 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:17:07 ] >>510 ? 3択クイズの問題 = question
512 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:28:28 ] すげえ読解力だな。
513 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:10:08 ] const char * name[] = {"aaa" , "bbb" , "ccc" , "ddd" , "eee" , "fff"}; このとき、 name の要素数を取得するにはどうすれば良いでしょうか?
514 名前:513 mailto:sage [2009/10/18(日) 20:12:38 ] すみません。 ちょっと撤回します。 失礼しました。
515 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:23:19 ] >>119 の for (cnt = 0; cnt < no; ++cnt) {}の方が見慣れてるって本当? 入門書ってだいたい for(cnt = 0; cnt < no; cnt++){}ってかいてあるけど
516 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:32:56 ] >>515 「見慣れてる」ってのは0からカウントするってところだろ。
517 名前:デフォルトの名無しさん [2009/10/18(日) 20:47:42 ] > cnt++ その世代に言わせると整数は i だろ
518 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:54:28 ] cntならiのほうがいいな。
519 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:06:16 ] >>515 C++の流儀だな。 cnt++より++cntの方が、オブジェクトを生成しない分高速。
520 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:36:59 ] >>496 できました ありがとうございました
521 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:37:46 ] usage: command.exe 〜みたいなコマンドのヘルプを表示させるとき、決まった構文ルールはあるの? 省略可能なオプションは[]とか、必須オプションは<>とか。
522 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:48:53 ] 正規表現の簡易型みたいな感じだろ。
523 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:24:16 ] char型の変数の中身を参照するときに文字コードとして扱いたいときは if(moji[0] == 115) のような形でいいんでしょうか?
524 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:28:04 ] はい ただし char は符号付きの場合があるので 128 以上の値の扱いに気をつけて
525 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:08:01 ] stdinの中身を確認する方法ないですか? 空かどうかわかるだけでもいいです。
526 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:19:08 ] >>525 環境依存しない方法は無い
527 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:19:32 ] 空とはどういう状態か?
528 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:25:11 ] feof() 辺りかな? つーか、これを使う機会って無いよな。
529 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:27:10 ] ああ、もしかして stdin の接続先のことなのかな? 質問が曖昧で難しいな。
530 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:29:10 ] エスパーに期待してるんだよ
531 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:37:59 ] 「中身」ってなんだよ? 普通に getchar() で読めば良いだろ。
532 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:21:48 ] エスパーすると、kbhit
533 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:33:50 ] 入力した数字が素数かどうか判別するプログラム作ったんだけど2と3が判別できない どこが違ってる? for(b = 2 ; b<=a/2 ; b=b+1){ if(a%b == 0){ printf("%dは素数ではありません。" ,a); break; } else { printf("%dは素数です。" ,a); break; } }
534 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:45:08 ] 判別の基準が間違ってる。
535 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:50:45 ] 4とか5なら判別できるのか?それ
536 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:53:19 ] 9とか15とか
537 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 04:16:55 ] b = 2 ; b<=a/2 ってaが2や3の時はね
538 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 04:43:11 ] ループの意味がないw
539 名前:デフォルトの名無しさん [2009/10/19(月) 06:47:26 ] ||って一つ目左が真なら右の判定を行うってこと? 偽なら右判定はしないのか?
540 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 06:56:31 ] ||は左が真の時点で右の判定を行わない。 &&は左が偽なら右の判定を行わない。
541 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 07:24:30 ] ありがとう
542 名前:525 mailto:sage [2009/10/19(月) 07:49:18 ] void sgets(char *buf,int n) { int i; char c; for(i=0;i<n;i++){ c=getchar(); if(c=='\n'){ break; } buf[i]=c; } /*入力バッファを空読みする*/ if(i==n){ while(getchar()!='\n'); } /*文字数が一文字以外は最後に'\n'を加える*/ if(i!=1){ buf[i]=NULL; } } 525です。 上の関数を呼び出した後、入力バッファが空読みされたかどうかをmainで確認 する方法を教えてください。
543 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 08:31:14 ] >542 ひどいコードだ
544 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 09:04:39 ] >>542 空読みする方法は無いと思え。 初心者なら尚更
545 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:00:38 ] 再帰を使わないで処理する方法はありますか?
546 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:04:12 ] >再帰を使わないで処理する方法はありますか? 再帰を使わないで処理する方法はないと思うのですか?
547 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:15:05 ] >>542 EOFで確認するとか?
548 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:31:13 ] 総ての再帰は展開できるはずなんだっけか
549 名前:デフォルトの名無しさん [2009/10/19(月) 17:35:27 ] 再帰ってなんですか? まだ勉強をはじめたばかりなのでわかりません。
550 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:41:03 ] void func() { func(); } ↑みたいなのが再帰です
551 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 18:00:31 ] 数学的帰納法のなかまです
552 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 18:02:56 ] >>547 EOFは読もうとしないと意味がない。 従って、入力が空かどうかは「読み出そうとしたときは空だったかどうか」わかるというだけ。
553 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:05:40 ] 箱の中の猫は見ようとしたときだけ生きてるか死んでるかわかるというだけ。
554 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:06:13 ] うぜえよお前。
555 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:32:04 ] >>553 え? 見ようとしなければ生きてるか死んでるか分からないが、どっちかだと言っている?
556 名前:デフォルトの名無しさん [2009/10/19(月) 21:30:11 ] 箱の中の猫に心拍計を取り付けて、遠隔でモニタすれば箱を開けなくても生死の別は判断可能
557 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:33:23 ] それは箱に覗き窓が付いてるのと同じこと
558 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:37:54 ] それが量子的な現象の影響だとしても 確率的だと言うのはマクロスケールでは現実的ないと思うよ
559 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:55:52 ] >>547 改行まで空読みしてるだけだろ? なんでEOFが関係あるんだ。 上のほうの「空読みする方法はない」とか、なんか空読みが 別のものと勘違いされる。
560 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:10:25 ] 542にEOFのチェックがないんだけど
561 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:15:03 ] >>556 心拍計が壊れている可能性がある 心拍計が正常かどうかを確かめる装置を用意してもそれが壊れているかもしれない 以下無限ループ
562 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:25:16 ] つサーモグラフィー
563 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:29:49 ] だからそういう話しじゃないが サーモグラフィーで観測した瞬間に猫の生死状態が確定するというお話。
564 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:25:35 ] そもそも箱の中に猫が存在しているかどうかや箱の中に猫が入るような空間が本当に存在しているかどうかなんかも観測しなければ未確定。
565 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:35:50 ] 物理板でやれぼけども
566 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:39:09 ] 物理学者とは犬猿の仲だろjk
567 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:42:03 ] >>565 ×ぼけども ○ぼけ ×物理板 ○50代板
568 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:30:25 ] そのジョーク、いまいち面白くない。
569 名前:デフォルトの名無しさん [2009/10/20(火) 00:37:05 ] ぼけは、私が見ているときにしか、そこにいないのか
570 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:47:18 ] じゃあ人間が箱の中に入れば良いだろ馬鹿が
571 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 01:49:45 ] >>559 お前こそ質問者の意図を分かってるか? 要するに、これを訊いてるわけ www.nurs.or.jp/~asada/FAQ/UNIX/section4.2.html
572 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 02:00:05 ] それを訊いてるんじゃないでしょ? > 実際に文字を読み込まずに読む文字があるかどうか確かめ られたかどうかを訊いてるんじゃないの
573 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 03:35:23 ] #if defined(DEBUG) | defined(_DEBUG) と #if defined(DEBUG) || defined(_DEBUG) の違いってわかります?要は|と||なんですが。。。
574 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 04:16:52 ] × Apple II ○ Apple ][
575 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 04:22:40 ] Xeno091017 正式版 koreawatcher.at.infoseek.co.jp/janexeno.htm ・正式版として最初のリリース。 ・Jane終了時の挙動のみ091015試作品から変更された。 ─────────────────────── 予告どおり、正式版をリリースしました。×ボタンのツールチップ ヒントに関して、真魚のソースを参考にして修正を試みました。 JaneNidaの開発は事実上終了です。2chの仕様変更などで 対応するかもしれません。
576 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 05:27:19 ] >>575 ttp://pc12.2ch.net/test/read.cgi/tech/1254829314/ こいつ、ここでも宣伝していやがる。 こりゃあ通報かな。
577 名前:576 mailto:sage [2009/10/20(火) 05:28:53 ] ttp://pc12.2ch.net/test/read.cgi/tech/1254746834/ ごめんこっちだった。
578 名前:525 mailto:sage [2009/10/20(火) 07:45:46 ] 525です。 いろいろ回答ありがとうございます。 自分の意図としては>>571 で言っている通りで、それをmainで確かめる 方法を探していたんですけど、難しいのであきらめて違う方法を探してみます。 わかりづらい質問ですいませんでした
579 名前:523 mailto:sage [2009/10/20(火) 12:05:26 ] >>524 ありがとうございます unsigned charを使えば問題なさそうでした トリップ生成プログラムなんかを試しに作ってみたいんですがgccでコンパイルしたところ以下のエラーが出ます trip.c:36: error: parse error before "salt" trip.c:79: error: incompatible types in assignment 79行目のエラーに関してはきっと自分がcrypt関数についてよくわかってないだけな気がするんですが、 36行目のエラーの原因がいまいちわかりません 今までこういう構文エラーの原因は大体前の行に;を忘れていたくらいだったのですが・・・ ttp://f50.aaa.livedoor.jp/~iwazaki/uploader/src/up4250.bin どうかよろしくお願いします
580 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 12:09:56 ] > else(salt[i] == '`') このような構文は無い elseに条件式は付かない
581 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:23:33 ] >>573 |はビット演算のORで||は論理演算のORじゃなかろか
582 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:35:35 ] ][ 表記は10kBASICからだな
583 名前:579 mailto:sage [2009/10/20(火) 14:01:41 ] >>580 参考書引っ張ってきて読んだのにこんなミスするなんて・・・ どうもありがとうございました
584 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 15:18:47 ] >>581 俺もそう思う。 上は必ず両辺が評価され、下は必ずしも両辺が評価されないという差も出てくるが、 それがこの場合にどう影響するかがわからん
585 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 15:30:56 ] 事実上、全く同じだね。
586 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:38:46 ] 3項演算子に空文は使えないんですか。そういう場合はif文で冗長にやるしかないんですか (aaa == bbb) ? flag = true : ; ;
587 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:52:35 ] >>586 flag = (aaa == bbb) ? true : flag ; というかそこに代入処理を書くのはif文が冗長だと思える人から見てスマートな記述なの?
588 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:54:45 ] (aaa == bbb) ? flag = true : 0 ;
589 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:04:25 ] いまどきのコンパイラなら3項演算子もif文(処理が一行)もかわらない ってことはないですか?
590 名前:デフォルトの名無しさん [2009/10/20(火) 22:12:38 ] コンパイラの短縮処理は異常
591 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:19:44 ] >>589 「かわらないから、読みやすいifのほうがいいじゃん」ってこと?
592 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:27:14 ] 短い場合は3項のほうがifより見やすい俺
593 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:32:57 ] 今読んでるOCamlの本は、 if x < 30 then kihonkyu + x * jikyu else kihonkyu + x * yugu_jikyu より kihonkyu + x * (if x < 30 then jikyu else yugu_jikyu) のほうを薦めてるな。
594 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:45:51 ] >>593 そここそ3項演算子だと思うが、その本ではifですか
595 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:48:44 ] OCamlっていう言語だたのね。 3項演算子が無い言語ってことかな。
596 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:50:59 ] 値を持ってるifと条件演算子は同じだろ。
597 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:52:57 ] >>593 これ見て「うわifだ、条件演算子がない言語って不便ね」みたいな 感想をもつやつは、たぶん条件演算子も使えてない。
598 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:54:13 ] そんな感想持ってるやつは今のところいなさそうだが、誰に向けてレスしてんだ?
599 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:59:35 ] レスじゃないよ。 >>593 を見て、ifと条件演算子の脳内置き換えができないやつを評してる。
600 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:01:20 ] いるかどうかもわからないヤツを想像してまで叩きたいのかw
601 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:03:53 ] 話がずれてるな。 処理したくない場合、どう書くかについての話だろ? >>593 はななめってる
602 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:05:42 ] >>594 だけ見るとそう思っているかのように見えるけど>>595 で理解してるようだしな >>597 は3項演算子に特別な思い入れでもあるのかねぇw
603 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:07:03 ] こんなマヌケな書き込みしといて、まだバレてないとか、ごまかせるとか思ってるのか。
604 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:09:32 ] >>601 いやぜんぜんななめじゃないよ。 条件演算子を効率のためにつかってるって思ってるやつに、 そうじゃないって例を示しただけ。
605 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:10:24 ] >>591-603 誰にレスしてるかくらいはっきりさせろ蛆虫共
606 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:11:23 ] >>604 >>593 の下の方がいい理由を言ってみろ
607 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:13:06 ] こんな簡単な例じゃどっともかわらねぇよ
608 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:13:08 ] >>586 使えない。値を返す必要があるから空文があったら困るだろ。 どうしてもってことなら適当な変数でx=xとか入れときゃいいんじゃね?
609 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:17:04 ] >>586 > (aaa == bbb) ? flag = true : ; ; つーか、式を返す形で使わなきゃダメだろ。色々と。
610 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:19:33 ] >>606 みて分かれよ。 プログラミングの基礎って本に載ってるぞ。 サイエンス社2300円。
611 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:22:37 ] 高い
612 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:25:00 ] >>604 > 条件演算子を効率のためにつかってるって思ってるやつに、 > そうじゃないって例を示した だから、ななめじゃん
613 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:26:04 ] 三項演算子は値を返すから 変数 = 条件?成功:失敗; return 条件?成功:失敗; みたいな形でよく使われる。 良く使われるということは、そう書くとみんな理解しやすい。 コンパイラ的に見ると if ( 条件 ) 変数=成功 else 変数=失敗; と吐き出されるコードは多分一緒。 逆に言えば、値を返す必要のないときに 三項演算子を使うのは理解しにくい?
614 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:27:15 ] C++だと初期化でたまに使いたくなる
615 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:30:50 ] >>612 「ななめじゃん」って一言レスしてれば、ななめだってことにできると思ってるのか。
616 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:31:49 ] いまだに三項演算子なんて言う人がいるとは
617 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:33:46 ] if ( 条件 ) 変数=成功 else 変数=失敗; より ( 条件 ) ? 変数=成功 : 変数=失敗; の方がコード量減るからいいじゃん。 プロはこの辺の効率も求めていかなければならない。
618 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:34:57 ] 七行スレから来ました
619 名前:デフォルトの名無しさん [2009/10/20(火) 23:48:36 ] ご教授お願い致します。 以下のような文字列から数字部分(10桁)の「1111111112」だけを抜き出したいと思います。 但し以下のような条件があります。 ・数字の前は必ず「AAA」があります。 ・下記はカンマ区切りだけど、カンマ区切りとは限りません ------------------------------------- あいうえお,AAA1111111112,かきこけこ ------------------------------------- strstr関数など、いろいろ試してみたのですがどうもうまくいきません。 皆様、よろしくお願い致します。 こんなのもわからなくて恥ずかしいです。。。。
620 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:49:49 ] 宿題は宿題スレへ
621 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:49:57 ] >>617 > ( 条件 ) ? 変数=成功 : 変数=失敗; 変数 = ( 条件 ) ? 成功 : 失敗; 普通こうでしょ…?
622 名前:デフォルトの名無しさん [2009/10/20(火) 23:50:49 ] >>619 頑張れ
623 名前:デフォルトの名無しさん [2009/10/20(火) 23:55:02 ] 了解。宿題すれにいきマイケル。
624 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:07:20 ] >>621 同じ変数だとはどこにも…
625 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:10:42 ] >>624 代入するのは成功か失敗かなのに? あとから二ヶ所でチェックするんですか?(笑) てか"文"を書くなと。
626 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:10:50 ] >>624 >>587
627 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:11:39 ] >>619 sscanfについてもう少し調べる
628 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:00:46 ] >>586 aaa == bbb && flag = true;
629 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:03:33 ] if ( aaa == bbb || (flag = false,0) ) flag = true;
630 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:12:10 ] アホだw
631 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:21:36 ] >>628 括弧が不足してる
632 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 02:22:07 ] >>629 なぜfalseにしたし
633 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 03:09:30 ] ちょっとした質問なんですが scanf関数で数字を入力する際に 数字を打ち込みエンターキーを押すと改行してしまいます もう一度数字を入力すると、前に打ち込んだ数字が認識されます 二度目の数字を入力しないと、ずっと改行しつづけます この仕様はどうにかならないんでしょうか
634 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 03:12:02 ] scanf()の使い方を間違ってる
635 名前:633 mailto:sage [2009/10/21(水) 03:14:31 ] >>634 えっ
636 名前:633 mailto:sage [2009/10/21(水) 03:17:40 ] 今見たら、>>634 さんの言うとおり scanf()の中に\nを混ぜてしまっていました お粗末な質問に答えていただき有難うございました
637 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 07:09:37 ] うむ
638 名前:634 mailto:sage [2009/10/21(水) 07:49:24 ] お前が言うなw
639 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 09:59:16 ] よきにはからえ
640 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 10:05:31 ] 条件演算子を三項演算子と呼んで疑問を感じないようではいけないな。 単項、二項、三項は項の数を問題にしているのであって条件式であることは無関係でしょ?
641 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 10:15:03 ] ふーん
642 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 12:34:34 ] どっちでもいいや
643 名前:デフォルトの名無しさん [2009/10/21(水) 14:39:25 ] Aのプログラムから数秒後にBのプログラムに切り替えたいです。 そういった時にはtime関数で現在時刻を取得してからでないとだめなんですか? プログラムの組み方がよくわからないので教えてください
644 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 14:50:06 ] >>643 標準関数だけでは無理があるので、環境依存スレでどうぞ。
645 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 14:50:50 ] 現在時刻は要らないだろ。 開始からの経過時間さえ判ればよい。 だから普通は clock() を使う。
646 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 14:54:39 ] >>644 プ
647 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 15:02:19 ] >>646 time()だけでやるのは待ちループが必要になって現実的でないということは理解している? >>645 あんたも同類か。ついでに言えば、clock()だからと言ってtime()と手間がさして変わるわけではないが。
648 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 15:03:00 ] sleepしてexecすればいいのでは
649 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 15:27:53 ] それは標準ではないだろ。
650 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:05:25 ] とはいえ、POSIXに準拠しとけば初心者が使う大抵の環境で動くんじゃなかろうか。
651 名前:デフォルトの名無しさん [2009/10/21(水) 16:21:56 ] ポインタ変数の勉強しています。初心者です。 int i; int *ip = &i; 2行目のコードの記述がおかしいです。 ipはアドレスを保持するポインタ変数で、*ipはポインタが指し示す領域の内容ですよね? *ipには3とか-1といった整数値が入るものだと思っていましたが上の例ではアドレスを代入しています。 アドレスも整数に分類される値ということでしょうか。 これでもコンパイルが通るので何が何だかさっぱりです…
652 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:26:46 ] int *ip は、 int* ip と思えばわかりやすいかな。 int* という型なのだ。でも int* p1, p2とかやるとはまるから注意な。
653 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:29:35 ] 宣言時の代入は、初期化の利便性のために少し特殊になっている。 コンパイルの結果は変わらないから、気に入らなければ宣言時代入は使わなくてもいい。
654 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:30:49 ] >>652 ほざけ。
655 名前:デフォルトの名無しさん [2009/10/21(水) 16:35:17 ] 分かったようで分からないようではっきりしませんが、つまり int *ip = &i; は置き換えると int *ip ip = &i; ですか。
656 名前:デフォルトの名無しさん [2009/10/21(水) 16:36:36 ] もしかしたらスレ違いかもしれませんが質問させてください。 C言語を始めたばかりの初心者です。 LSI C-86 Ver3.30c 試食版というものを使っています。 コンパイルをして、コードをコマンドプロンプトで表示させると、 日本語が文字化けしてしまいます。 コンパイルもできているし、アルファベットや数字はきちんと出るのですが……。 どうすれば日本語が表示できるようになるのでしょうか? ぐぐってもよく判らなかったため、質問させていただきました。 どうかよろしくお願いします。
657 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:37:32 ] >>656 悪いことは言わないから、そのコンパイラは捨てなさい。 それはもう、10年以上も前のパソコン通信時代の代物だ。
658 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:43:00 ] >>655 です。
659 名前:デフォルトの名無しさん [2009/10/21(水) 16:48:58 ] >>658 ありがとう。あやうく誤解するところでした。。
660 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:50:22 ] >>656 文字コード体系が違う。 以前の Windows では CP-932 が使われていたが、 最近は UTF-16LE に変わってきている。 古いソフトなどを使うと、それらが混在するので文字化けすることがある。 ソースコードと表示系の文字コードを同じものに揃えれば問題ない。
661 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:57:50 ] 個人的には Turbo-C 2.01 がオススメ。 軽量・高速で使いやすく、変な制限もない。
662 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:01:08 ] >>657 >10年以上も前のパソコン通信時代 20年前ですw
663 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:04:55 ] 16ビットのコンパイラはおすすめ出来ません。 32ビットよりも難しいです。
664 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:16:27 ] selectでSleepの代わりに出来ない?
665 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:30:56 ] >>664 できなくはありませんが、厳密には違う動作です。POSIXならusleep()という選択肢もありますが。
666 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:41:34 ] UTF16でもコンパイラ通るの? エラー出るだろ?
667 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:42:13 ] そりゃ環境による
668 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:10:15 ] 文字列をセットする関数を作りたいのですが、どうすればいいですか? 下のソースは間違ってますが、 やりたいことは、値によって、aaa、bbbを出力したいのです。 コンパイラに依存しない?標準のC言語の範囲でお願いします。 void hoge(){ char s[256]; setText(0,s); printf("%s\n",s); // aaa を出力したい settext(1,s); printf("%s\n",s); // bbb を出力したい } void setText(int n , char *str){ if (n == 0) { strcpy(str,"aaa"); }else{ strcpy(str,"bbb"); } }
669 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:13:39 ] それで良いじゃん。
670 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:14:37 ] >>668 setTextがsettextになってる以外は別に間違ってないぞ 先頭に #include <stdio.h> void hoge(); void setText(int n , char *str); int main(){ hoge(); return 0; } を付ければ問題なく動く
671 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:32:14 ] >>669-670 これでよかったんですね。 どうもありがとう。
672 名前:656 [2009/10/21(水) 22:15:16 ] みなさま本当にありがとうございます……。 コンパイラが古いのですね。 Turbo-C 2.01というものをダウンロードしてみることにします。 本当にありがとうございました。
673 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:31:22 ] せっかくMicrosoftがVisualStudioを無料で配布してるのに、なんで初心者は使わないんだ? BCCとかLSI-Cよりよっぽど使いやすいのに。 どうしてもコマンドラインがいいっていうんならLinux入れてgcc使うべき。
674 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:33:58 ] mingwでいいよ.古いけど
675 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 23:55:53 ] Cマシンとかいう奴を使え。
676 名前:デフォルトの名無しさん [2009/10/22(木) 00:02:31 ] つーマシン作れよ
677 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:03:34 ] VisualStudioはごちゃごちゃしてるからだよ 分厚い、単なる取扱説明書みたいなものが本屋に溢れてる
678 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:12:01 ] VCはC++標準への準拠度は低いし Cライブラリがグローバル名前空間を汚染してるし 勉強には向いてないよ。
679 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:12:33 ] つーか、学習段階なら日本語周りは後回しにしたほうが良いんじゃね。 とりあえず ASCII 文字だけで一通りやってみたら?
680 名前:デフォルトの名無しさん [2009/10/22(木) 00:14:55 ] C言語の学習にはBCC+cpadが理想的
681 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:19:08 ] お手軽ではあるが、理想的ではない
682 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 01:15:22 ] 関数の引数に構造体を渡す場合に値を書き換えない場合は値渡しにするのが一般的ですか。ポインタ渡しの方がデータのコピー量が少ないのでどっちがいいのか悩みます。
683 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 01:22:26 ] ポインタ渡ししましょう。
684 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 01:34:44 ] 好きな方にすれば良いよ。
685 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 01:43:45 ] >682 foo_t foo(const struct foo *foo); 最後のfooは、foo()の名前(シンボルへのポインタ)を関数のスコープで別の型のシンボルfooで上書きしているから、barの方がいいか。 まぁ、なんだ、const修飾しとけと言いたかったんだ。
686 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 02:59:51 ] >>685 つまりなんだ、関数名と構造体名と変数名は同時におなじものを使えるが、いまいちよくないということか
687 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:14:28 ] 構造体のタグは名前空間が違うからどうでもいいよ
688 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:20:18 ] >687 そんなことはわかっているんだよ 関数名と変数が同じ名前だから、再帰呼び出しや関数ポインタが使えないと言っているわけで。
689 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:22:01 ] >>688 おまえへのレスじゃねえよアホが
690 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:25:10 ] 粘着するつもりは無いが、 >688の変数というと語弊があるので、s/変数/仮引数/としておく。 まぁ、そうはいっても関数スコープのちょっと上で宣言された変数なんだけどね。 スタックですね、わかります。
691 名前:686 mailto:sage [2009/10/22(木) 03:29:00 ] >>687 なるほど。ありがとう ちなみにtypedefしちゃうとだめだよね? >>688 あぁー、そういう弊害が出てくるんですね。為になります。
692 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 04:39:15 ] func(&kouzoutai); const付けたとしてもこの関数呼び出しの後でkouzoutaiのメンバが書き換わるのかどうかわからないすよね。 func(kouzoutai); だったら書き換わらないことがわかるけど。 キャストすればいいのかな。。
693 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 06:26:12 ] funcのシグネチャによるだろ
694 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 10:31:59 ] >const付けたとしてもこの関数呼び出しの後でkouzoutaiのメンバが書き換わるのかどうかわからないすよね。 「呼び出しの後」が呼び出した関数内の話なら自己責任だろ。 「呼び出しの後」が呼び出した先の呼ばれた関数内の話ならその関数の宣言でconstポインタなら書き換わらないだろ。
695 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 10:48:08 ] あえてconstをはがさない限りは変えられないんじゃないの?
696 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:13:14 ] func() { Kouzoutai kouzoutai; kouzoutai.member = 100; //func()では書き換えたい func2(&kouzoutai); //func2()では書き換えたくない。関数呼び出しからそれを明記できないか。 }
697 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:18:59 ] >>696 void func2(const Kouzoutai * parameter); func2()自体が書き換え可能なのだとしたら、呼び出すこと自体が無茶。
698 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:23:49 ] func() { Kouzoutai kouzoutai; const Kouzoutai *kouzoutai_constptr = &kouzoutai; kouzoutai.member = 100; func2(kouzoutai_constptr); }
699 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:38:38 ] C++でも func(const T &in, const T &in2, T *out) //定義 func(in, in2, &out) //呼び出し みたいにして、呼び出しの記述を見て関数内で変更されうることが類推しやすくしたりするね そういう意味では func2((const Kouzoutai *)&kouzoutai) でいいのかも知れんが、全部それやらないと本末転倒
700 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 13:11:12 ] 値渡しでいいだろ。速度も落ちねえよ。
701 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 13:38:47 ] なんでそんな無茶を言い出すの
702 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 15:14:48 ] 無茶ではない。 値渡しこそ正義。
703 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 17:42:25 ] 参照渡しがいいの!
704 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 17:54:44 ] 値渡しだろ
705 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 18:01:02 ] 間を取って、コピーしたもののアドレスを渡す、でどうか
706 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 18:08:33 ] とるなし
707 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 21:47:21 ] fuck()
708 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 21:52:38 ] >>698 なるほど。天才ですね。
709 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 22:09:02 ] よく言われる
710 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 01:34:00 ] いつも神様って呼ばれてる。天才と言われることは滅多にない
711 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:56:55 ] いつも旧神って呼ばれてる。ノーデンスと言われることは滅多にない
712 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:15:02 ] 神様にもいろいろいるしね 貧乏神や疫病神でないことを祈る
713 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:30:38 ] 死神だろ。
714 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 10:26:40 ] func() { Kouzoutai kouzoutai; kouzoutai.member = 100; //func()では書き換えたい func2(&kouzoutai); //func2()では書き換えたくない。関数呼び出しからそれを明記できないか。 kouzoutai.member = 100; //func()では書き換えたいんだってば }
715 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 10:40:45 ] func2(kouzoutai); //func2()で書き換えても平気。値渡しだから。call by valueだから。
716 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 13:21:32 ] return fuck(you);
717 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:36:03 ] メイン関数でポインタを宣言し、関数Aに引数でポインタを渡し動的にメモリを確保するとともにデータをセット 次に関数Bでそのデータを処理、みたいな事をしたいのですがうまくいきません。 どうも関数Aで確保したメモリがmainに戻ってくると解放されているようす・・・なにか方法はないですか? void main(void) { char *p; 関数A(p); 関数B(p); } void 関数A(char *p) { //ここで*pに動的メモリを割り当て&データセット } void 関数B(char *p) { //*pのデータを処理 }
718 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:39:29 ] 動的にメモリを割り当てられてないんでしょ。
719 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:41:22 ] >>717 void 関数A(char **p) じゃないと p@main が書き換わらないよ
720 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:45:57 ] そしてmain内では 関数A(&p); にする 普通の変数を関数内で書き換えるときと同じ。
721 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 16:05:42 ] こうしろ。 void main(void) { char *p; p = 関数A(); 関数B(p); } char *関数A(void) { //ここで動的メモリを割り当て&データセット } void 関数B(char *p) { //*pのデータを処理 }
722 名前:717 mailto:sage [2009/10/24(土) 16:14:34 ] ありがと書き換えてみるわ
723 名前:toya mailto:age [2009/10/24(土) 17:01:57 ] >>503 よろしくおねがいいたします。
724 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 17:28:44 ] >>723 インデントを説明するための例なので、内容については説明しません int foo(){return 0;} int bar(){return 0;} int main(){int a,b;for(a=0;a!=5;a++){b=((b+a)*b+a)/a;foo();bar();}return 0;} せめてバグがない物を提示しないか
725 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 17:29:59 ] 上のプログラムはコンパイラに掛けると、エラーはなく実行できるコードを返してくれます。 と続いてるわけだし。
726 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 18:07:45 ] >723 多くの人によって編集されていくと、スタイルがバラバラになる可能性があるので、 最低限は決めておいた方がいいと思う。 また、説明などに使う用語やどの規格に準拠して書くかなども。 これ以上はスレチなので、新しくスレを立ててからお願いします。
727 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 04:03:48 ] free() や fclose() に NULL を渡したらどうなりますか?
728 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 04:18:37 ] どうもならない。
729 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 04:30:29 ] >>727 fclose に NULL を渡すのはダメ
730 名前:デフォルトの名無しさん [2009/10/25(日) 14:55:59 ] 「車輪の再発明はするな」という言葉で車輪の再実装を阻む行為は、 「車輪を実装した」という経験をもたせないようにして、先行者利益を確保するという、孔明の罠なのです。
731 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:05:44 ] 車輪の調子が悪い時にメンテナンスできないしな
732 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:40:14 ] 実装の仕方がまちがっているのに得意げな車輪の再実装は 止めてやるべき
733 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:44:35 ] 自作の暗号アルゴリズムほど恐ろしいものはない
734 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:47:33 ] 実験を一人でやれない奴は発明するな
735 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:52:50 ] 日本に航空機製造をさせない某国のような
736 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:17:07 ] 再発明と再開発・再生産とは違う。 発明するのが無駄ってことだろ。
737 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:19:56 ] 孔明の罠??
738 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:45:53 ] やらない言い訳に使うなってことでもあるな。 ありもしないライブラリを再発明になるといけないので探してます、とかな。
739 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:24:10 ] >>737 巧妙なトリック
740 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:39:11 ] 光明の罠
741 名前:デフォルトの名無しさん [2009/10/25(日) 18:13:11 ] あなたに自分の好きなことをする自由な時間を取り戻す20の方法 gigazine.net/index.php?/news/comments/20080802_find_free_time/ 10.「それは受けられません」と言うことを学びなさい 12.最も大きなタスクを一番最初に処理しなさい 13.人に任せる 14.気を散らすあらゆるものを視界から取り除きなさい 15.インターネットから切断する 16.外部委託する
742 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:50:31 ] >>737 げぇ!
743 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:55:57 ] 1. その本を閉じる 2. 2chviewer をアンインストールする
744 名前:デフォルトの名無しさん [2009/10/26(月) 02:48:27 ] 方向キー押すと1づつ大きくなるカウンタってどうやって作りますか? 押している間じゃないです お願いします
745 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 03:03:15 ] 処理系依存
746 名前:toya mailto:age [2009/10/26(月) 06:15:16 ] >>726 準拠する規格は『JISX3010:2003 プログラム言語C』で 「www.jisc.go.jp/ 」→「JIS検索」→ 「JIS規格番号からJISを検索」で「X3010」と入力し 「一覧表示」→「JISX3010」→「規格の閲覧」で閲覧できます
747 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 06:27:28 ] c99かよ
748 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:04:50 ] int func(){ for(;;){ } return 0; } こういうスタイルって、紙の本で行数が間延びしないためのものだろ。 実機での記述でこのスタイルにしてる奴って、それを理解してないんじゃないのか?
749 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:14:43 ] 昔の画面全体で25行しか無い時も有効だったかもな。
750 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:18:30 ] FDD全盛のころは改行コードすらもったいなかったんだよ
751 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:53:35 ] >>748 ディスプレイで見たときにも間延びするとかっこわるい。
752 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:03:07 ] 詰まってる方がかっこわるいだろ
753 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:34:43 ] int foo(int n, int m) { int i, j, k, something; for ( i = 0; i < n; ++i ) if ( i != m ) { (void)something; for ( j = 0; j < n; ++j ) for ( k = 0; k < n; ++k ) { (void)something; if ( k != m ) (void)something; { int a, b; (void)(something = a + b); (void)something; } } } else (void)something; (void)something; return 0; } 関数化しろとかインデントが2カラムと言うのは無しで、こういうソースはできれば見たくない
754 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:36:40 ] >>753 見なきゃいい エディタ起動時に必ず整形ツールを通すようにすればいいだけだ
755 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:38:01 ] この形に美しさを感じられない奴は コンピュータプログラミングには向いていないよ。
756 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:43:13 ] >>753 別に悪くないと思うが。 じゃあどんなスタイルが良いんだ? 定番で悪いが Linux流プログラム書法 ttp://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/CodingStyle.html
757 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:51:07 ] プログラムの途中でコアを吐く?のだけど、そんなエラー見たことないし、 調べても何か特定の原因があるってわけでもなさそうなのでさっぱり意味がわかりません。 一つ一つの処理ごとにprintfを挟んでみたところ以下のようでした。 #define _XOPEN_SOURCE #include <stdio.h> #include <string.h> #include <unistd.h> main(void) { int i, j, len; unsigned char tripkey[11] = ""; unsigned char salt[3] = ""; unsigned char trip_f[256] = ""; unsigned char trip[11] = ""; printf("トリップキーを入力:"); scanf("%u", &tripkey); printf("トリップキー入力"); ←これが表示されずにコアを吐く
758 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:54:03 ] >>757 > scanf("%u", &tripkey); scanfの使い方調べろよ
759 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:54:36 ] >>753 Java見たいで嫌だ書き直す int foo(int n, int m){ int i, j, k, something; for(i = 0; i < n; ++i){ if(i != m){ (void)something; for(j = 0; j < n; ++j){ for(k = 0; k < n; ++k){ (void)something; if(k != m) (void)something; { int a, b; (void)(something = a + b); (void)something; } } } }else (void)something; } (void)something; return 0; } 漏れが許せる隙はこれが限界だ
760 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:54:48 ] 制御にくっつく単文でもブレースで括ってくれと言いたかったんだ ブレースだけの行があるのが嫌な人もいるんだろうけどね もう慣れているからどちらでもいいんだけど、修正時のエンバグ対策に{}付けていた体質を改めようかな、はっはっはぁ
761 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:00:43 ] >>753 インデントついてるからまだましだけど その書き方でインデントめちゃくちゃなやつもいた if(k != m) (void)something; { int a, b; (void)(something = a + b); (void)something; } とかもう
762 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:10:11 ] 関数は int foo(int n, int m) { } って書く方が好みだ。 関数名を検索するときに、/^foo\(/でジャンプできるからな。 '{'を独立した行に置くのは、K&R第1版の頃の foo(n, m) int n; int m; { } からの慣れかな。
763 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:13:37 ] >>753 他人が読むことを想定していないコードだな
764 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:14:21 ] >>763 具体的にどこがそうなのか挙げてみれ
765 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:16:07 ] スタイル議論してるスレがあるはず。
766 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:16:56 ] 関数は /*! * @brief fuga * * hoge * * @return piyo */ int foo( int n, /*!< [in] bar */ int m /*!< [in] baz */ ) { } って書く方が好みだ。 ただの似非Doxygenスタイルだけど。
767 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:17:47 ] >>764 わかってるくせに
768 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:18:59 ] >>759 Java みたいなのはお前の方だw
769 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:20:59 ] int foo(int n, int m){ int i, j, k, something; for(i=0; i<n; ++i){ if(i != m){ (void)something; for(j = 0; j < n; ++j){ for(k = 0; k < n; ++k){ (void)something; if(k != m) (void)something;{ int a, b; (void)(something = a + b); (void)something; } } } } else (void)something; } (void)something; return 0; }
770 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:23:52 ] >>767 >>753 は、非難されるほどひどいスタイルには見えん。 ひどい点があるなら、教えてくれないか
771 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:26:58 ] >>770 全角スペース
772 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:28:11 ] スタイルじゃなくて、これが紛らわしいってこと if ( k != m ) (void)something; { int a, b; (void)(something = a + b); (void)something; }
773 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:29:38 ] if ( k != m ){ (void)something; } { int a, b; (void)(something = a + b); (void)something; }
774 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:31:01 ] #define BEGIN do{ #define END }while(0) if ( k != m ){ (void)something; } BEGIN int a, b; (void)(something = a + b); (void)something; END;
775 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:32:17 ] >>771 htmlでインデントを表現するために、わざと全角空白をつかってるんじゃないか?
776 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:36:39 ] >>775 使え 受け取った方がコピペでコンパイル出来るようになる
777 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:54:13 ] >>775 使え 消えてたorz
778 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:02:01 ] &を忘れたのねw
779 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:10:58 ] >>776 一部の専ブラでは書き込まれた&nbspをコピペすると化ける。
780 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:12:27 ] >>758 なんだかよくわからなかったのでgetsを使ってみたけれどそれでもダメでした
781 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:13:57 ] なんだかよくわからないものをなんだかよくわからないまま使っても なんだかよくわからない結果にしかならないと思うんだ
782 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:23:26 ] >>780 scanfのフォーマット指定子とそれに対応する引数を考えてみて。 つかあまりにも適当に指定してるようにしか見えないから、 正解をズバリ書くのもはばかられるわ
783 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:47:18 ] >>782 %sと%cを試してみたけど変わりませんでした
784 名前:どちらが正統? mailto:sage [2009/10/26(月) 14:58:45 ] char s[6]="INTEL"; sは長さ6の文字列へのポインタで、その値は変更不能な文字列 (リテラル)"INTEL"を指すポインタ値 なのか sは長さ3の文字列へのポインタで、その値は変更可能な文字配列 を指すポインタ値で、変更可能な文字列配列はあらかじめ コンパイラによって変更不能な文字列"INTEL"を複製したもの が設定されている。
785 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 15:03:19 ] >>783 へぇ
786 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 15:19:05 ] >>784 どちらも間違い。 sはポインタではなく配列
787 名前:どちらが正統? mailto:sage [2009/10/26(月) 16:20:53 ] char s[7]="foobar"; sは長さ7の変更不能な文字配列である"foobar"の名前である のか sは長さ7の変更可能な文字配列で(コンパイラにより) 変更不能な文字配列(リテラル)"foobar"の複写で初期化された ものの名前である。
788 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:29:32 ] PHPをかなりやってきて、 プログラミングの基本とか だいたい理解したと思うので そろそろCをはじめようかと 思うのですが、Cをはじめる 前に、これを先にPHPで勉強 しておいたほうがいい、 っていうの、何かありますか? 一応、PHPで、 print文で画面に文字とかを出力、表示する ifでの分岐 switch文での分岐 for、while、foreachでのループ ユーザー定義関数 関数への値渡し、引数渡し includeで他のファイルを読み込んで使う 配列、連想配列(ハッシュ) ファイルへの読み書き OOP基礎 ---------------------------------------------- ↑こんくらいはマスターしました。 Cに移行する前に、何かもっと 勉強しておいたほうがいい知識はありますか?
789 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:30:35 ] 別に真っ白な状態からCを学んでも良いと思うけど。
790 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:34:11 ] >>788 PHP→Cは結構苦労するってなんかの本に書いてあったな 逆にC→PHPは3日で覚えられるって事も
791 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:37:48 ] PHPで、 セッションやら、 クッキーやら、 サニタイズやら、 BASIC認証やら、 やらされたので、Cだと そういうのないので、 かえって勉強しやすいかなー と思ってます。
792 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:40:33 ] >>787 後者。 でも「変更不能な文字配列(リテラル)"foobar"の複写で」がなんか違和感あり。 char s[6] = "INTEL"; は、 char s[6] = {'I', 'N', 'T', 'E', 'L', 0}; と全く同じよ。
793 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:51:19 ] リテラルの複写とは全く違うから後者も間違いだろw
794 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:54:29 ] >>783 引数もちゃんと考えようぜ。 例を見て&つけてるんだろうけど、何で&がついてるかわかるか? 配列の[]無しはどういうものかも。
795 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:06:55 ] >>791 C-CGI作るならもちろんその辺もやらないとだめだよ
796 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:09:37 ] CでCGIなんか作るわけねーだろ。あほか? USBで外部デバイスを接続して パソコンでプログラム組んで ROMライターで焼いて、、、 ってやるんだよ。 お掃除ロボットのルンバの プログラム組んだりとか ロボット作ったりとかしてーんだよ。 空気よめよwww
797 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:44:30 ] Cのコンパイラーは どっからダウンロードするんにゃ〜〜 おしえれ〜〜
798 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:45:57 ] 2chのread.cgiはcだそうだ
799 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:55:47 ] >798 どっかのFlashで見たなそういえば、 zlibとか使って圧縮して通信容量減らして危機を救ったとかなんとか 十分慎重に組めばセキュアなCGIも作れるわけだが CでCGI作るというウェブサイトや書籍にろくなものが無い気がしないでもない
800 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:05:38 ] 文字解析以外はCもperlのようなものも一緒でしょ というか、2chのC化自体はあまり効果が無かったような
801 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:10:22 ] 2chブラウザのおかげね。
802 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:59:07 ] 今はむしろ2chブラウザのせいで通信量が増えてるわけだが
803 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:26:03 ] どうして?
804 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:39:48 ] >>803 タブをたくさん開きーのそいつらをいっせいにリロードしーの あまつさえ自動でリロードしーの
805 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:44:08 ] 多くの専ブラはそれの対応したはずだが
806 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:57:13 ] 対応といっても更新間隔に制限を設けただけだからな 100タブ単位で開いてると馬鹿にならない
807 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:20:00 ] それって専ブラの起因した問題じゃないと思うが
808 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:24:17 ] というか量増えちゃだめなの?PCの能力あがったんだからたくさんの情報をロードできるから仕方ないじゃん。
809 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:25:09 ] 人間の能力はあがってないだろ
810 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:27:51 ] 読もうとしてないスレもリロードしたりするじゃん。 なのにそのスレ読むときにまたリロードしたりして。 専ブラに起因した問題じゃないってのはタブ型ブラウザのことでも指してるのかなぁ
811 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:29:46 ] あれはリロードじゃなくてDATの量を見てるだけだし読むときは差分だけだし なにか勘違いしてない?
812 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:31:23 ] ttp://f30.aaa.livedoor.jp/~kokodake/unix.html 昔話
813 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:31:28 ] なら転送量は増えないの?
814 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:40:01 ] いま仕様みてきたけど、次回dat読み込むときは HTTPリクエストヘッダに Range: bytes= で差分を指定できるみたいだね。(この場合は gzip 圧縮はされない) ただ、リクエストしまくるとバーボン規制やボボン規制を食らう可能性もある。
815 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:40:24 ] 説明するのは面倒なので ttp://monazilla.org/ の資料でも読んでください
816 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 21:42:38 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10020.txt 実行して出力したときに、 countを1000にするとうまく表示されるのですが、 countを100にしたときに、どうして壁を突き破るのか教えてください。 また、100にしても壁を突き破らない方法を教えてください。
817 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:01:03 ] >>792 char s[]="書き換えてはならない文字列"; s[2]='¥0'; この場合コンパイルは通る?動作は保証される?
818 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:13:19 ] >>817 大丈夫 保証される
819 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:39:18 ] >>817 解釈ルール上からは大丈夫な筈であるが char *s="書き換え禁止文字列"; とかと混同使用されている現実から安全対策の為、 強く警告を出して事実上禁止している処理系が 多いのでやらないほうが良い。
820 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:45:52 ] >>819 そんなのがあるとは… ちなみに処理系の名前を教えて欲しいです
821 名前:デフォルトの名無しさん [2009/10/26(月) 22:57:47 ] >>819 混同してるのも安全対策が必要なのもてめーだけだ 何を禁止or警告されているかくらい読めぼけ
822 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:06:02 ] VC++2008で見てみたけど、警告レベル最高でもべつに警告はでなかった。
823 名前:デフォルトの名無しさん [2009/10/26(月) 23:10:19 ] >>822 >>817 の時点ではおkだが、>>819 が痛いんだよ
824 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:16:37 ] リテラルに関しては特別である件について int array[]={0,1,2,3,4,5,}; の要素がLValueになれない処理系はモグリだが char array[]="012345"; の要素がLvalueになれない処理系がモグリだと 決めつけられないとオモ char array[6]="012345"; でLValue禁止はモグリだが
825 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:18:10 ] >>824 そういう処理系がある可能性もあるから 名前が知りたいだけですよ
826 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:20:33 ] GCCやらVCみたいなメジャーなやつで警告でないなら、べつに気にしない。
827 名前:デフォルトの名無しさん [2009/10/26(月) 23:20:49 ] >>824 > 決めつけられないとオモ 何が「特別」なのかどう頑張っても足掻いても完璧にわかってないな
828 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:32:44 ] char s[]="12345" がconst char s[6]={'1','2','3','4','5',0}と 等価だって保証されてる?
829 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:35:06 ] >>828 constはつかないんじゃないの?
830 名前:解説 mailto:sage [2009/10/26(月) 23:49:59 ] >>824 とか リテラル表現を見つけるとCコンパイラは機械的にそれを void *型のconst ポインタ値に置換するというウワサ (void*)の(char*)のキャスト省略は認容されているからprintfとかに 与えても文法上合法だし、その処理系に付属しているライブラリ関数 ならば期待した動作をする。 問題はvoid*が指しているアドレスに実際に何が書かれているかに ついての規定が不可能になってきていること。 エンコーディング(フォントの種類とかサイズランク (微妙に書体が変わるんで)まで規定できる新しいコード体系とか) によっては連続したメモリ領域にマップしないほうが良い場合もあり 得るし実際しないだろうし。 そいった状況になったらchar s[]="うんたらかんたら"; がchar s[]={ 文字配列要素定義列 }; という解釈をしてもらえるという保証が無くなる可能性がある
831 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:52:37 ] Cの規格上ではつかないよ。 char s[]="12345"; は左辺のために新たに確保された領域に 右辺の値がコピーされるから、つける必要もないし。
832 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:56:35 ] >>830 そういうヘボい実装をしている処理系を知っているなら教えて欲しい ○○向け○○コンパイラとか
833 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:57:07 ] あ、ちなみに処理系よってはANSIやJIS規格に従わないコンパイラなんていくらでもある。 だから、>>819 や>>824 はその処理系の名前を具体的にあげてくれればいい。 それだけで話は終了する。これは一般論じゃないから。
834 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:59:02 ] 特定の文字エンコーディングに依存する実装のほうがヘボい だろ。Cの現状的には
835 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:06:57 ] >>830 そもそも > char s[]="うんたらかんたら"; > がchar s[]={ 文字配列要素定義列 }; > という解釈をしてもらえるという保証が無くなる可能性がある char s[] = "うんたらかんたら"; と char s[] = {'う', 'ん', 'た', 'ら', 'か, 'ん, 'た, 'ら'}; は違うんじゃないの?
836 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:23:33 ] >>834 そうだろうね。いずれにせよ>>830 は 実例をひとつ挙げればそれですむ話を延々としているだけ。 誰もそういう実装のコンパイラが存在しないとは考えていないわけで 規格に合致しないコンパイラがあるなら その名前を挙げてくれと言っているにすぎない。
837 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:40:30 ] >>835 リトルエンディアンですねわかります
838 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:48:46 ] もっと重要な違いがあるだろ
839 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:40:42 ] compile error
840 名前:皐 mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 02:43:41 ] このプログラムソースの解説をお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <math.h> int c; char *p, o[] = "= +-*/^ "; double x[26]; int get(void) { do c = *p++ & 0xff; while (isspace(c)); return c; }
841 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 02:48:25 ] うちではインデントのないソースコードは見ないことになっている
842 名前:皐 mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 02:49:29 ] インデントとはなんですか?
843 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 03:00:59 ] pにアドレスを入れていないのに *p++ してるから、いわゆる糞ソース
844 名前:皐 mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:02:54 ] ソース長いんです。 分割でのっけます。 double expr(const char *s) { double v; if (*s == '=') { char *q = p; int n = get(); v = (islower(n) && get() == '=') ? (x[n-'a'] = expr(s)) : (p = q, expr(s+2)); } else if (*s) for (v = expr(s+2); c == s[0] || c == s[1]; ) switch (c) { case '+': v += expr(s+2); break; case '-': v -= expr(s+2); break; case '*': v *= expr(s+2); break; case '/': v /= expr(s+2); break; case '^': v = pow(v, expr(s)); break; }
845 名前:皐 mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:03:51 ] 3番目です。 else if (get() == '.' || isdigit(c)) v = strtod(p-1, &p), get(); else if (c == '(') v = expr(o), c == ')' ? get() : (c = 1); else if (c == '-') v = -expr(s); else if (c == '+') v = expr(s); else if (!memcmp(p-1, "sqrt",4)) p += 3, v = sqrt(expr(s)); else if (!memcmp(p-1, "exp", 3)) p += 2, v = exp(expr(s)); else if (!memcmp(p-1, "log", 3)) p += 2, v = log(expr(s)); else if (!memcmp(p-1, "sin", 3)) p += 2, v = sin(expr(s)); else if (!memcmp(p-1, "cos", 3)) p += 2, v = cos(expr(s)); else if (!memcmp(p-1, "tan", 3)) p += 2, v = tan(expr(s)); else if (!memcmp(p-1, "atan",4)) p += 3, v = atan(expr(s)); else if (islower(c)) v = x[c-'a'], get(); else v = c = 1; /* error */ return v; }
846 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 03:05:07 ] あー大体わかった。多分逆ポーランド記法で演算器じゃないか?
847 名前:皐 mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:05:34 ] これで最後になります。 int main(void) { char buf[1024]; double v; while (printf("> "), fgets(buf, sizeof buf, stdin) && *buf != '.') { p = buf; v = expr(o); if (c) puts(" error"); else { p = buf; if (!islower(get()) || get() != '=') printf(" %.15g\n", v); } } return 0; }
848 名前:皐 mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:11:17 ] はい、電卓を作ろうと思ったので、いろいろとソースを見てたのですが、プログラムの意味が全く分からないんです。 関数電卓で、まず四則演算と三角関数を1つの式で計算しようと思っています。
849 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:05:09 ] 文字列の先頭へのポインタSがあったとして、 Sの示す文字列の3文字目を表す場合どう表現すればいいんでしょうか? S[2]と書いたら、それはint型だとか言われました
850 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:15:38 ] typedef unsigned orzchar_t; orzchar_t s[] = {0x1a33, 0x48b1, 0x5273, 0x542e}; orzchar_t *S; S = s; (void)S[2]; とか、そういうことは無いよな wchar_t使っていると怪しい とりあえず、コード片でも貼るといいお
851 名前:849 mailto:sage [2009/10/27(火) 04:22:34 ] お察しの通りwchar_tを使ってます wchar_t wcStr[sizeof(szStr)]; WCHAR* strprev = wcStr; これでif文の中でstrprev[2]としたらint型だと言われました
852 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:43:09 ] 多分>850そのままだと思うんですが、 どうすればSからsのn番目の要素を取り出すことができるんでしょうか?
853 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:22:08 ] 既に出来ているから安心汁
854 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:31:00 ] codepad.org/iPSWOKX6 wchar_t を使う場合、 1. locale を正しくセットすること、 2. wchar_t対応のライブラリを使うこと 3. wchar_t と char をごっちゃにしないこと の3点が重要です^^ ちなみに、wchar_tは符号なし1バイト整数以上のサイズであれば良いとしか規定されていないので shift_JISすらまともに扱えない環境も普通に存在します^^
855 名前:デフォルトの名無しさん [2009/10/27(火) 05:54:01 ] 皆様よろしく。 Cを独学し始めたばかりの初心者です。目的はVBAで書いたコードをCに書き直すこと です。VBAも独学なので冗長な表現や不要な処理が多々あると思われますが、 とりあえず動いているのでよしとしています。 と、ここからが本題なのですが、とりあえずVBAコードをまとまりのある ブロックに分けてCに書き直し、コンパイル→実行して意図通りに動いているか 確かめています。すでに4,5個分はチェックできました。 使っているエディタ?は「C言語を始めよう!」というフリーのものですが、 今引っかかっているブロックでは「問題が発生したため、block3.exe を終了します。 ご不便をおかけして申し訳ありません。エラー報告する しない云々・・」という おなじみの表示が出てしまって、実行できません。 BCCを使っているみたいで、コンパイルエラーは出ないのですが実行できないのです。 これはコードの問題なのか、エディタもしくはそれ以外の問題なのかが目下の悩みです。 この「C言語を始めよう!」は、コード書く→コンパイル→実行という とてもシンプルで使いやすいのですが、他の「統合開発環境」と名の付くソフト (たとえばWildStudioなど)はビルドやらプロジェクトやら、意味が分からんことばかりで 使い方を学ぶまで時間がかかりそうで尻込みしています。 コードがまずいのだろうと思われますが、それを確かめるためにも、初心者やさしいエディタ (開発環境)があれば、教えてください。ただしフリーのもので。
856 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:58:00 ] メモ帳
857 名前:855 mailto:sage [2009/10/27(火) 06:12:06 ] メモ帳にコード書いて・・そのあとが分かりません。コンパイル、実行は どうやってするの?
858 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:37:47 ] >>856 は意地悪なようだが>>855 が教えてくれと言ったこと(だけ)にはちゃんと答えている。
859 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:43:29 ] それこそが彼が意地悪たる所以である
860 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:59:56 ] いや、メモ帳はフリーではないだろう。
861 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:00:47 ] チラシの裏 ttp://yuukiremix.s33.xrea.com/chirashi/ これならフリーソフトだよ。
862 名前:849 mailto:sage [2009/10/27(火) 07:21:53 ] 色々ためしたけどやはりよく分かりません setlocaleもやってみましたが全く変化ありません どうすればwchar_tのn番目の要素とL""の比較ができるんでしょうか? デバッグ中は期待通りの文字列が見えるのに、一文字だけ取り出そうとするとint型になってしまいます コマンド引数に/Zc:wchar_tを指定しても変わりありませんでした (VC++では規定で有効らしいので当たり前ですが)
863 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:24:46 ] >>862 できるわけないだろ…。
864 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:27:38 ] /D_UNICODE
865 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:48:32 ] const wchar_t* str = L"あいうえお"; const wchar_t comp = L'う'; // == L"う"[0] if (str[2] == comp) {}
866 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:04:52 ] >865 それだとif文で左辺がint型、右辺がconst wchar_t*型でエラーが出ます Unicodeを調べて両辺int型でやればなんとかうまくいくようです wchar_t型の文字のUnicodeを求める関数などはあるのでしょうか?
867 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:43:52 ] ある
868 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:44:54 ] >>866 >右辺がconst wchar_t*型で ???
869 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:50:47 ] >>866 うん。明らかに君の使っているコンパイラは標準に合致してない。 別のコンパイラに変えるしかないよ。 そのコンパイラではどうやってもwchar_t同士の比較はできない。
870 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:39:44 ] >>866 wchar_t が unsigned なのかも
871 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:50:58 ] >>855 アドバイスするとしたら わざわざC言語使わなくてもVBAでいいんじゃない? ってことくらいかな。 あと、異常終了するのはまず間違いなくコンパイラやエディタのせいではない と思っていい。
872 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:51:53 ] ヘッダで #define wchar_t int とかやってたりしてな。
873 名前:855 mailto:sage [2009/10/27(火) 12:25:42 ] >>871 >わざわざC言語使わなくてもVBAでいいんじゃない? プログラムをLinuxで走らせたいのです。 >異常終了するのはまず間違いなくコンパイラやエディタのせいではない やはり、コードですかね。問題は。 もうちょっとがんばってみます。 ありがとうございました。
874 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 12:36:59 ] >>873 スクリプト系言語にしたら? LinuxならRubyでもPythonでも選り取り緑でしょ。
875 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 12:42:06 ] C言語を始めよう!はwindowsじゃないの?
876 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:06:26 ] >>873 Linuxで動かすつもりなら、Linuxで開発したほうが楽だと思うけどね。 Windowsと違うところ結構あるし。 あと、まさかWindows特有の機能使おうとはしてないよね?
877 名前:855 mailto:sage [2009/10/27(火) 13:16:49 ] >>875 >>876 あの〜、この辺まったく知らないんですが、Windows上で動くcプログラムでも Linuxで動かないってことあるんですか?あ、もちろんWindows特有の機能ってのは 使わない上での話ですが。 「Linuxで走らせる」っていうのも先の目標でして、実際はKnoppixのデスクトップ画面 を、自身のPCで見たことがある程度の者です。
878 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:23:29 ] >>877 > Windows上で動くcプログラムでも > Linuxで動かないってことあるんですか? あるねぇ。 > あ、もちろんWindows特有の機能ってのは > 使わない上での話ですが。 あなたのレベルでは、Windows特有の機能かどうかの判断は難しいと思う。
879 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:40:23 ] >>877 自分のLinux上で動くcプログラムが 他人のLinuxで動かないってこともある
880 名前:855 mailto:sage [2009/10/27(火) 13:44:25 ] >>879 ほんとですかw。どーゆーこと?って感じですね。
881 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:52:13 ] 理由がわからん香具師はおとなしくスクリプトつかっとけ Windows の VB に相当するのは Python だ
882 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:54:20 ] 標準ライブラリからちょっとでも逸脱しなければ大抵大丈夫だと思うが
883 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:05:01 ] >>794 引数に配列名を持ってくるときは自動的に配列の1番目の要素のアドレスを表すので&は不要ということはわかりましたが そこを直してもやはりダメでした というかunsigned charに対するフォーマット指定子は%sでよいのでしょうか? もちろん文字列入力を行うということなのですが・・・
884 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:11:01 ] 問題はI/O。標準ライブラリでのI/Oって、stdin, stdout, stderrとfopen系のストリームくらい。 ディレクトリ操作すら標準化されてない。GUIなど無論。
885 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:12:13 ] >>883 "%s"は試したの?
886 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:13:27 ] どうダメだったの? scanf("%s", tripkey); これでダメなら原因は別のとこにある。
887 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:36:11 ] >>885 試しましたがダメでした >>886 同じようにコアを吐きます とりあえずソース全部です・・・ この部分だけでなく他にもおかしいところが多々あって見苦しいとは思いますが・・・ ttp://ccfa.info/cgi-bin/up/src/up1812.txt
888 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:44:20 ] >>887 crypt()周辺がおかしいんで内科医? crypt()の仕様はどうなってんのよ。 つーか、手元にcrypt()がないからコメントアウトしたら、実行しても少なくともコアは吐かないんだが。
889 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:47:29 ] >>877 C言語を始めよう!ってなんじゃろうと思って調べたら統合開発環境だた
890 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:47:45 ] いろいろ間違ってるが、crypt(tripkey, salt);のように*をはずしたら最後までいったな
891 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:52:14 ] >>887 cryptの呼び出しは strcpy(trip_f, crypt(tripkey, salt)); こんな感じ?
892 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:56:14 ] >>887 printf("トリップキーを入力:"); scanf("%u", &tripkey); printf("トリップキー入力"); ←これが表示されずにコアを吐く fflush(stdout); ←これを追加したら↑これ出ないかな
893 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 16:33:35 ] >891 本来ならそんな感じで呼び出すはずだけど 僕の環境では /usr/include/unistd.h:1073:extern char *crypt (__const char *__key, __const char *__salt) /usr/lib/i386-redhat-linux4E/include/unistd.h:1019:extern char *crypt (__const char *__key, __const char *__salt) となっていたから diff 96c96 < *trip_f = crypt(*tripkey, *salt); --- > strcpy(trip_f, crypt(tripkey, salt)); 結果 ./up1812 トリップキーを入力:foo トリップキー入力トリップキー前処理salt作成1回目:OK2回目:OK3回目:OK4回目:OK5回目:OK◆yaoo
894 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 20:59:52 ] typedef struct data{ ___char mozi[100]; //文字列格納用 _______int year[100];//点数格納用 }Data; Data data[100];構造体を100個用意 data[0].mozi="aaaaaaaa";←*1 printf("%s",data[0].mozi); これでコンパイルすると*1の部分が「左辺値が必要」といわれてしまいます。 どうやったら文字列を格納できるのでしょうか?
895 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:10:43 ] strcpy
896 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:12:36 ] strcpy(data[0].mozi,"aaaaaaaa");
897 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:14:53 ] >>895-896 ありがとうございます。 配列=配列ができないのと同じ原理なんですね。
898 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:46:47 ] char *a[8]; char (*b)[8]; この違いを教えてください。
899 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:47:50 ] Cってカンタンだよね。 すぐにUSB接続デバイスとか 作れそう。
900 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:54:26 ] >>899 DDK次第
901 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:55:55 ] 道路の交通量調査などに使われてる(?)紅白で野鳥の会の人が使ってる(?) カウンターの様な機械をC言語で作ってみたいと思っています。 コマンドプロンプト上で、Enterを押せば数字が増えていくというモノです。 Enterの入力があれば用意した変数に1を足して出力 とするプログラムはすぐに書けると思うのですが、 C:\>counter.exe Enterの入力回数:1 Enterの入力回数:2 Enterの入力回数:3 ・・・・ Enterの入力回数:100 の様な感じになると思います。 C:\>counter.exe Enterの入力回数:XXX として、Enterを押せばXXXの部分の数字だけを書き換える という事は出来るのでしょうか? 説明が下手なのですが、内容を察して教えて下さい。 もしよろしければコーディングまでよろしくお願いします。
902 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:58:31 ] CLSして再描画する?
903 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:03:20 ] #include <stdio.h> int main(void) { int counter=0; while(1){ int c = getchar(); if(c=='\n'){ counter++; } system("clear"); printf("counter:%d\n", counter); } return 0; } ※windowsならsystem("cls");
904 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:05:15 ] >>901 非標準な事をすれば可能 環境を書いてくれないと無理
905 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:11:20 ] >>901 conio.h があるなら #include<stdio.h> #include<conio.h> #define KEY_ENTER 0x0d #define KEY_ESCAPE 0x1b int main(void){ int count=0, key; while(1){ key=getch(); if(key==KEY_ENTER) printf("\rEnterの入力回数:%d ", ++count); if(key==KEY_ESCAPE) break; } return 0; }
906 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:11:30 ] >>901 本当はこうなってるんじゃないの? C:\>counter.exe Enterの入力回数:1 Enterの入力回数:2 Enterの入力回数:3 ・・・・ Enterの入力回数:100 表示が本当に >>901 の通りなら入力にエコーが無いから 単に改行しなければ良いだけだろ
907 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:12:57 ] int counter=0; これってCだと必須なんだ。 変数を宣言しないと つかえないから。
908 名前:894 mailto:sage [2009/10/27(火) 23:17:53 ] /**おまじない省略**/ struct suji{ char moji[100];//文字列格納 int su[100];//数字格納用 }; int main(void) { ____struct suji score[100];//100の構造体を用意 ____FILE *fp; ____char *tp; ____char str[256];//ファイルの行を格納する配列 ____int i=0,k=0; ____ if((fp= fopen("input.txt", "r")) == NULL)exit(1); ____________while( fgets(str,256,fp) != NULL)//ファイルの中身がなくなるまで ____________{; /************文字列格納******************************/ ________________tp=strtok(str,","); //文字列格納 tp=ポインタ ________________strcpy(score[i].moji , tp); //文字列コピー ________________printf("%s\n" , score[i].moji); //テスト表示 ________________i++;//構造体を一つ進める /***************数字格納******************************/ ____________________while(tp!=NULL){//一行読みきるまで ____________________________score[i-1].su[k] = atoi(strtok(NULL , "," ));//i-1は上でi++してるため無効化する作業 ____________________________printf("%d\n" , score[i-1].su[k] ); //テスト表示 ____________________________k++; ____________________} _____________} ___________fclose(fp); ___________return 0; }
909 名前:894 mailto:sage [2009/10/27(火) 23:18:57 ] 上のプログラムはCSVファイルを一行ごとに構造体配列に格納するプログラムを目指してます。 input.txtには、文字列,数字1,数字2・・・,数字n(文字列は行の先頭に一つだが、数字はいくつでも可能)といった形式で入っています。 このプログラム、コンパイルは正常にできますが実行するとエラーで強制終了となります。 何がおかしいかご教授ください。 CSVファイルが aiueo,10,23,53,55,60 kakikukeko,22,33 の2行だったら格納後、適当なメンバを参照すると score[0].enzan=aiueo score[0].su[0]=1 score[0].su[1]=2 score[1].enzan=kakikukeko score[1].su[1]=33 という具合になる予定です。
910 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:20:25 ] score[0].su[0]=10 score[0].su[1]=23 の間違いです。
911 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:23:32 ] >>898 全然違う。後者に使い道はない。
912 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:28:16 ] 今、大学の課題を考え中なのですが、 「定義域 -1.5<=x<=1.5の時 関数 y=3x^3-0.2x^2+0.3x-0.7 の値を出力するプログラムを作れ。 なお、xは-1.5から0.1刻みで増やすこと」 という問題なのですが、 ↓のようなプログラムを実行させると なぜか、x=1.5のときだけ出力されません・・・
913 名前:つづき mailto:sage [2009/10/27(火) 23:28:59 ] #include <stdio.h> main() { float x, y, step; x=-1.5; step=0.1; y=0.0; while(x>=-1.5 && x<=1.5){ y=3.0*x*x*x-0.2*x*x+0.3*x-0.7; printf("%4.1f %9.5f\n", x, y); x = x + step; } } ちなみに、 whileの中の条件式を x>=-1.5 && x<1.6 (右の不等式のイコールをとって、1.6にしてみた) とか x>=-1.5 && x<=1.51 とかにかえると正しい結果が得られました。 どこで間違ってるのでしょう?? どなたかご教授願います m(_ _)m
914 名前:デフォルトの名無しさん [2009/10/27(火) 23:40:45 ] >>911 使い道はある (単純な二次元配列でも使うし固定長配列へのポインタを関数の引数にする場合にも使う) >>898 >char *a[8]; char *a; が8個 char *a[8] = {"abcd", "ef", "gh", "ijkl", "mnopq", "rst", "uv", "wxyz"}; >char (*b)[8]; char [8]へのポインタb または char [8]がn個 の配列 char (*b)[8] = {"abcdefg", "1234567", "zyxwvut"};
915 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:41:31 ] 浮動少数は厳密なものじゃなく近似値だから ピッタリでは判定できないことが多いよ。
916 名前:デフォルトの名無しさん [2009/10/27(火) 23:46:56 ] while(!((x+1.5)<0.0 || (x-1.5)>0.0)){
917 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:49:58 ] >>913 0.1を正確に表せないから。 step=0.1; としても、0.1よりちょっとずれた値になるので、何度も足してると誤差が蓄積する。 誤差少なくするなら、 double x; int n; for(n = 0; n <= 30; n++){ x = -1.5 + n*0.1; ... } みたいな。
918 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:16:08 ] >>917 へぇ〜 そんな話、聞いたことありませんでした!! ありがとうございました!! ところで、 どうして、その1次関数で 誤差を少なくすることができるのでしょうか?? 何度も何度も聞いてしまってスイマセン・・・ m(_ _)m
919 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:27:33 ] >898 型が違う。 aはcharを指すポインタの配列(要素数は8) bはcharの配列(要素数8)を指すポインタ aに+1するとsizeof(char*)増加(32ビット環境なら通常4) bに+1するとsizeof(char[8])増加(8)
920 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:30:01 ] >897 >配列=配列ができないのと同じ原理なんですね。 というか、文字列リテラル("aaaaaaaa")の型はconst charの配列 なので、問題の箇所は「配列=配列」そのもの。
921 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:35:35 ] >911 >>898 >全然違う。後者に使い道はない。 いやいや、普通にあるでしょ。 char a[N][8]; を引数にとる関数の仮引数の型がそう。
922 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:10:00 ] ならなんで char *(b[8]); じゃないの?
923 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:28:14 ] fclose() が NULL を受け付けないおかげで fclose(func(fopen(fname,"r"))); みたいに出来ないから困る。 free(func(malloc(s))); ならできるのにな。
924 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:36:53 ] char (*b)[8];について、 演算子の優先順位で覚えればいいと言いたい所だけど、 *は、演算子では無くポインタ宣言子なわけで、 (ついでに言うと、[]もここでは演算子でないのよ、優先順位は、高 () > [] > * 低) でも、間接参照するときは、(*b)[i]のようにしないと演算子の優先順位があって、 いや、何というかね char *(b[8]);は、bに[]が付いているから、bは配列、それに*が付いているから、ポインタの、型はcharである。 つまり、bは、char型のポインタの配列と解釈されるわけで。b is array[8] of pointer to char.優先順位の高い方から低い方へ。 まぁ、『Cの強化書』とか『エキスパートCプログラミング』でも読めばいいよ。
925 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:43:12 ] NULLを受け付けるようなfcloseを自分で作るとか一瞬だけ思ったんだが駄目かな int myfclose(FILE *stream) { if(NULL == stream) return 0; else return fclose( stream ); }
926 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:47:22 ] 素直にwrapper作ればよくないか 標準関数を直呼びすることはあまり無くなった int safe_fclose(FILE *f) { if ( f == NULL ) { return 1; } return fclose(f); } 戻り値を何にするかちょっと悩んだ。
927 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:57:14 ] #include <stdio.h> #include <time.h> #include <Windows.h> int main(void){ time_t timer; struct tm *t_st; while(1){ time(&timer); printf("現在時刻: %.24s\r", ctime(&timer)); Sleep(1000); } } このプログラムで、Ctrl+Cの強制終了ではなく、Escapeなどできれいにプログラムを終了させるには どうしたら良いでしょうか?
928 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:59:43 ] >char *(b[8]);は、bに[]が付いているから、bは配列、それに*が付いているから、ポインタの、型はcharである。 doubt
929 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:01:57 ] windowsみたいだから getchでESC押されたか判定して抜けると良いんじゃない
930 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:03:00 ] >>927 escapeがきれいだとは思わない
931 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:04:04 ] どうしてそんなにsleepしたがるのだ。 OSに大麻イベントをセットしてWM_TIMERで読んでもらえばいいじゃないか。 え?ミリ秒単位で制御したいの? どっかのスレで誰かが副作用で暴れてたなぁ。
932 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:13:11 ] >>927 #include <stdio.h> #include <time.h> #include <Windows.h> #include <conio.h> int main(void){ time_t timer; struct tm *t_st; while(1){ time(&timer); printf("現在時刻: %.24s\r", ctime(&timer)); Sleep(1000); while(kbhit()){ if(getch()==0x1b)break; } } }
933 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:14:19 ] ごめん間違えた。
934 名前:927 mailto:sage [2009/10/28(水) 02:17:14 ] >>929 #define KEY_ESCAPE 0x1b int key; while()1{ key=getch(); if(key==KEY_ESCAPE) break; ・・・・・ } としてみたのですが、何かキーを押さないと時刻を更新しなくなります。 >>930 そうですよね。 強制終了ではなく、キー入力でwhileから抜けて処理終了を「きれい」と言っていました。 >>931 全く知識がないので、sleep使えば手っ取り早くできるかなと思いまして・・・・
935 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:19:18 ] #include <stdio.h> #include <time.h> #include <Windows.h> int main(void){ time_t timer; struct tm *t_st; while(1){ while(!_kbhit()){ time(&timer); printf("現在時刻: %.24s\r", ctime(&timer)); Sleep(1000); } if(_getch()==0x1b)break; } }
936 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:23:55 ] エレガントじゃないな。 #include <stdio.h> #include <time.h> #include <Windows.h> #include <conio.h> int main(void){ time_t timer; struct tm *t_st; do{ while(!_kbhit()){ time(&timer); printf("現在時刻: %.24s\r", ctime(&timer)); Sleep(1000); } }while(_getch()!=0x1b); return 0; } こうだろ。
937 名前:927 mailto:sage [2009/10/28(水) 02:37:30 ] kbhit()なんてものがあったんですね。 もしお時間があれば、>>931 さんの言うタイマーイベントを使ったプログラムのサンプルをお願いします。 私の環境はWinVista コンパイラ:Borland C++ 5.5.1 です。 よろしくお願いします。
938 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:43:07 ] ボーランドのコンパイラなら _kbhit() → kbhit() _getch() → getch() に置き換えだな。 MicroSoft は非標準には '_' を付けてる。
939 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:44:59 ] Windows のタイマーイベントはウィンドウメッセージだから、 それを受け取るウィンドウが必要だぞ。
940 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:48:35 ] つ select
941 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:49:22 ] 宿題スレでもC++対応でそこに誘導している以上 このスレもC++拒否じゃなくて、無保証対応で 良くね?
942 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 03:09:06 ] >>937 #include <stdio.h> #include <time.h> #include <Windows.h> VOID CALLBACK tp(HWND hwnd, UINT u, UINT_PTR p, DWORD dw){ time_t timer; struct tm *t_st; time(&timer); printf("現在時刻: %.24s\r", ctime(&timer)); } int main(void){ SetTimer(0,0,1000,tp); while(getch()!=0x1b); return 0; }
943 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 04:53:52 ] >>924 その本には char (*b)[8]がポインタの配列であると書いてるの? そうなら子供の落書き帳にでもしちゃいなよ
944 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 04:55:35 ] うあ? 途中から char *(b[8])の話になってる。すまんこ。
945 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 08:04:04 ] select
946 名前:デフォルトの名無しさん [2009/10/28(水) 23:03:47 ] >>924 > () > [] アホ
947 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:38:34 ] >>946 なんとなくカンテーレ
948 名前:921=919 mailto:sage [2009/10/29(木) 00:24:38 ] >922 なんか、違う人間が同じ問にレスしてわけわかになっていますな。 >ならなんで >char *(b[8]); 宣言子においては*と[]では[]の方が結びつきが強いので char *b[8]; と char *(b[8]); は同じ。 かえって混乱するかもしれないけど『関数の仮引数の宣言部では』 void func(char b[N][8]); void func(char b[][8]); void func(char (*b)[8]); は全て同等。 ついでに上のbと下のcは別物。下の宣言同士は全て同等 void g(char *c[N]); void g(char *c[]); void g(char **c); >924さんはもちろん理解していると思うけど、 >間接参照するときは、(*b)[i]のようにしないと いやそこは普通はb[0][i]になるよね。
949 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 00:56:38 ] >>908-909 ざっと見て2つほど明らかなバグがあるけど面倒なので詳細は説明しない。 ・2つ目のwhileの条件 ・k デバッガの使い方を覚えて1行ずつトレースしてみるのいいと思うよ。
950 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 02:19:12 ] >>948 > >間接参照するときは、(*b)[i]のようにしないと > いやそこは普通はb[0][i]になるよね。 ケースバイケースじゃないか?
951 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:05:30 ] C言語を学び始めたのですが文字列の扱いで詰まってしまいました。 ある文字列について、任意のn番目の文字からx文字だけ参照したいときにはどんな関数を使えばよいのでしょうか? strcpyやstrncpyでは先頭からしか見ることができないので困っています。 ////////////////////////////// char STR[] char Buf[] sprintf( Buf ,"123,456\0"); ////////////////////////////// このようなコードがあるときにSTRにBufの5文字目から7文字目まで(456)だけ コピーするにはどうすれば… 任意のトークンで区切れるstrtokも状況によっては使えそうなのですが 挙動が分からずNullエラーになってしまったりして安定しません…
952 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:10:07 ] >>951 sprintf(Buf, "123,456\0"+4);
953 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:12:24 ] char Buf[10]; char *str = "123,456\0"; int start = 5; int end = 7; sprintf(Buf, "%.*s", end - start + 1, str + start - 1);
954 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:24:15 ] 速やか過ぎる返信ありがとうございます。 >>952 のも>>953 のもどちらも実行結果は正しいのですが 肝心の何故こうなるのかが理解できてません。ダメジャンorz >>952 の方のはsprintf関数の挙動を調べればなんとなく分かりそうなのですが(文字列操作に+4って何事?状態) >>953 のお方のは正直何が起こっているのかさっぱりです。ポイン・・・タ・・・? とにかくとっかかりは掴めたのでもう少し調べてみようと思います。ありがとうございました
955 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:27:00 ] Buf+4 は &Buf[4] と同じ・・・ と言ってもわからないだろうか? 正直、ポインタの理解なしに文字列操作は厳しいと思う
956 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:32:45 ] >>955 >Buf+4 は &Buf[4] と同じ だということを今知ったレベルでした。 ポインタはなんとなーく概念的にはつかんでいるものの使いこなすには至らず逃げてばかりだったので… ネットワーク間でデータをやりとりしたいため文字列操作に手を出さざるを得なくなったのですが ポインタの基礎から把握していないと駄目っぽいですね…
957 名前:953 mailto:sage [2009/10/29(木) 11:37:57 ] こう書けば読めたりするだろうか。 char str[10]; strcpy(str, "123,456"); sprintf(Buf, "%.3s", str[5-1]); /* 5文字目の添え字は4 */
958 名前:951 mailto:sage [2009/10/29(木) 11:47:59 ] >>957 お恥ずかしながらフォーマット指定子で .[整数] ってなんだっけ…レベルです。 そして%sでstr[4]を指定すると何故5文字目以降が参照されるのかもしっかり把握していません。 後者は sprintf(Buf,"%s",str); は str[0]から\0にぶつかるまで参照していたということなのでしょうか。 とにかく、今やってみたおかげで>>957 に類するコードを入力したら 何故かは知らないけどこうなる!というのが分かる状態になりました… がそんなんでは使いものになりませんよね
959 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:52:29 ] >>958 プログラムは向いていない。
960 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:53:18 ] そもそも"123,456\0"と言う風に'\0'を文字列リテラルに入れている時点で文字列操作を理解していないことが判るじゃないか。
961 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:02:16 ] 悔しいけども正論過ぎて泣いた。 本なりサイトなりで勉強し直すのが一番早そうですね。 丁寧に教えて下さった方、ありがとうございました。 \0を手動で入れていたのは、 ネットワークから送り込まれてくるデータがバッファに際限なく溜まっていってしまうため 区切りとして入れたのですがきっとそんなことになってしまう時点で何かがおかしいんですねわかります。
962 名前:953 mailto:sage [2009/10/29(木) 12:08:20 ] >>958 %[整数1].[整数2]s と書くと、最低でも[整数1]幅、最大でも[整数2]幅という指定になる 最低幅に足りない場合は先頭にスペースが埋められ、最大幅を超えた部分は切り捨てられる。 ネットワーク間でのデータやりとりだと、最大幅に足りない場合は後ろにスペースを埋めたいという ニーズもあるかと思う。 その場合は %-[整数1].[整数2]s とすればいい。 そのうち慣れるからがんばれ。
963 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:15:15 ] >>961 ネットワークから流れてくるものは文字列ではない。あれは只のバイト列だ。 と言う意識がないといつまでもカスみたいなコードしか書けないよ。 # 某SIerのプロパーがまさしくそれなんだが…… 神経質な人は、文字列で扱うときはcharでバイト列として扱うときは(unsigned charをtypedefした)BYTEにしているくらいだ。 # それはそれで、文字列系の標準関数を使うたびにキャストする必要があるので時としてあれだけど。
964 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:18:29 ] >>961 ? バッファに際限なくたまるというのは確かにそうなってる時点でなんか変だと思う。 recv近辺のコードを上げてくれたらなんか分かるかも。
965 名前:951 mailto:sage [2009/10/29(木) 12:27:47 ] >>963 なるほど、覚えておくと見やすくなるだけでなく色々活用できるんですねえ… >>963 今まで平気で文字列として扱ってきたのですがバイトだったのですか! …それを知ったところで今すぐ何かが変わるわけじゃないのが不勉強なところですが 保存したレスをいつか発掘したら意味がちゃんと分かるようになってるといいなあ… >>964 相談したいのは山々なのですが ネットワーク周りはDXライブラリの関数を使用しているので ここだとスレ違いな気がするのです。
966 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:40:43 ] >>965 念の為に捕捉。 >963は、ナル文字で終端されていることがはっきりしている場合を文字列と言っている。 終端されていないものにはstrlen()やstrcpy()などの関数が使えないから、意識しておかないとね。 だからと言って、受信バッファより多めにメモリを確保して事前にクリアするなんてのは下策。 尚sprintf()の場合は、>962にあるようにサイズ制限ができるからバイト列に対しても使えなくはない。
967 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:46:22 ] >>966 > >>963 は、ナル文字で終端されていることがはっきりしている場合を文字列と言っている。 別に>>963 がどうとかじゃないよね。 Cにおける文字列の定義の話でしょ。
968 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:02:58 ] >>967 異論避け。それほど他意はない。
969 名前:デフォルトの名無しさん [2009/10/29(木) 14:38:26 ] 1から40までの数のなかで、3がつく数字とさんの倍数をすべて表示するプログラムを教えてください。
970 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 14:43:03 ] >>969 puts("3 6 9 12 13 15 18 21 23 24 27 30 31 32 33 34 35 36 37 38 39");
971 名前:デフォルトの名無しさん [2009/10/29(木) 14:44:44 ] >>969 #include <stdio.h> #include <string.h> int main(void) { int i; char buf[32]; for(i = 1; i <= 40; i++) { sprintf(buf, "%d", i); if (i % 3 == 0 || strchr(buf, '3') != NULL) { printf("%d\n", i); } } return 0; }
972 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 15:59:09 ] #define _XOPEN_SOURCE #include <stdio.h> #include <unistd.h> int main() { char a[100]; *a = crypt("hogehoge", "EV"); printf("%s", a); return 0; } crypt関数について調べようと思ってこんなん作ったんだけどaに何も入らないのはなぜ? crypt関数自体がアレなのかなと思って int main() { char a[100]; printf("%s", crypt("hogehoge", "EV")); return 0; } を試しに実行してみたけどこれはまともに動いた。
973 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:12:20 ] gcc -Wall
974 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:19:50 ] >>972 char a[100]; の時、a は &a[0] と同じ つまり、*a はa[0]と同じ a[0] = crypt・・・ が変なのはわかるだろ。 strcpy使え。
975 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:22:14 ] *a = crypt("hogehoge", "EV"); は a[0] = (char)crypt("hogehoge", "EV"); と同じ
976 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:49:46 ] C言語学びはじめてもうすぐ半年になるが、いつになったらタッチタイピングできるようになるんだ
977 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:57:47 ] >>976 英語配列に変えてみた、、がまだ慣れない。
978 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 17:53:51 ] >>976 プログラミングとタッチタイピングを同時に学ぼうと言うのがそもそも間違い。 プログラミングは、基本的にキー入力速度が速い必要はないからね。
979 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 18:11:08 ] どうせなら C でタイピング練習ゲーム作ったらどうか。
980 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:11:55 ] ビット演算について質問です char aの上位4バイトに 64以下の整数char bを代入したい場合、 (a & 0b00001111) + (b << 4) でできるのはわかるのですが、 もっと単純な表記方法はあるでしょうか?
981 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:14:17 ] ゲームセンターにあるタイピングオブザデッドに憧れてタイピング練習しはじめて ローマ字覚える前にタッチタイピングマスターしちまったなぁ 最近出た第二弾はわからんがタイピング覚える気ならゾンビ打マジおすすめ 本当の意味でゲーム感覚で覚えられるタイピングソフト 他にもいろいろタイピングソフトやってみたがまともなのはこれしかなかった スレチごめんね
982 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:17:20 ] 環境によっては union {struct {unsigned ah:4; unsigned al:4} s; char c} a; として a.s.ah = b; と書ける。 或いは、 a = (a % 16) + (b * 16); とも書ける。 いずれの場合も、bが16以上の場合は破綻する。
983 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:18:43 ] >>980 >char aの上位4バイトに 64以下の整数char bを代入したい場合、 char aの上位4ビットに 15以下の整数char bを代入したい場合、 の書き間違いかな?
984 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:19:17 ] >>980 charの上位4バイトってなんだよpgr
985 名前:980 mailto:sage [2009/10/29(木) 20:19:56 ] >982 どうも 4ビットって64じゃなくて16でしたね… こんなんでビット演算とかやらない方が安全か
986 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 21:11:02 BE:284013465-DIA(352353)] 次スレ立てました C言語なら俺に聞け(入門篇) Part 55 pc12.2ch.net/test/read.cgi/tech/1256818218/
987 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 22:10:01 ] >>985 「こんなんで・・・」はないと思うぞ。 1ビットでも必要な時はビット演算をする。 そもそも何のためにやるのかだよね。
988 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:37:27 ] >>957 プ
989 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:47:58 ] 屁こくな
990 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:52:11 ] 間違いの指摘するならちゃんと教えてやれよ。 まあ、うっかりミスだろうから指摘するまでもないが。
991 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 00:56:33 ] >>982 そのunionの使い方って厳密には保証されないんじゃないっけ?
992 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 00:58:54 ] 俺にはその間違い探し難しすぎるぜ
993 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 08:44:31 ] >>991 上下どちらのビットから割り付けるかは処理系定義なので 移植性はないけどもどっちかに決まっているはず。
994 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 09:46:08 ] ume
995 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 09:50:06 ] >>991 処理系によっては、妙な割り付け方をするかもしれないね。
996 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:02:19 ] ume
997 名前:デフォルトの名無しさん [2009/10/30(金) 10:04:35 ] age
998 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:18:54 ] >>992 >957のことなら、& str[5 - 1]だ。
999 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:18:59 ] ume
1000 名前:デフォルトの名無しさん [2009/10/30(金) 10:21:41 ] 03e8
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。