1 名前:デフォルトの名無しさん [2006/05/04(木) 08:53:09 ] 入門者向けの俺に聞けスレです。 なんでもきいてよね
554 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 17:57:35 ] すいません 質問したものですが私のために揉め事になってしまっているようで どうもすいませんでした 家の物置を整理したところ 兄の使っていたC言語の本と思しき書物がありましたので ひとまずそれを繙いてみます
555 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 19:25:20 ] >>554 古そうな本はやめておけ。 Cだって生まれたときから今まで全く同じ姿だったわけではない。 せいぜい10年以内できれば5年以内のもので、お前が合っていると感じればよいと思う。
556 名前:名無し [2006/06/26(月) 19:26:15 ] >>517 イケメンなら結婚できる。 void life(const char *job) { int age,lifetime; if(strcmp(job,"プログラマ") == 0) { lifetime = 50; } else { lifetime = 70; } age=-1;
557 名前:続き [2006/06/26(月) 19:27:46 ] while(++age<lifetime) { #ifdef IKEMEN if(9<age && age<25) { printf("%d 人目の彼女が出来ました。\n",age-9); } else { if(age==25) { puts("結婚しました。"); } else { if (age>29) { printf("%d 人目の愛人が出来ました。\n",age-29); } } } #endif sleep(31536000); } }
558 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 19:49:22 ] #ifdef IKEMEN if(9<age && age<25) printf("%d 人目の彼女が出来ました。\n",age-9); else if(age==25) puts("結婚しました。"); else if (age>29) printf("%d 人目の愛人が出来ました。\n",age-29); } #endif でいいじゃないか。 何でそんなにネスト掘り下げてんの?
559 名前:デフォルトの名無しさん [2006/06/26(月) 21:03:39 ] >>558 else と if がどこに懸かっているのかが分かりにくいから。
560 名前:デフォルトの名無しさん [2006/06/26(月) 21:29:37 ] 初心者へ上司からの指令です。 C言語を使って「愛していますか?」って表示させるプログラムを組んでみよ。 さらに、YESとNOの選択を用意して YESを選択すれば「もちろん!」 NOを選択すれば「なわけねーだろ!」 って表示させるプログラムを組んでみよ。
561 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 22:05:23 ] >>559 いつか、ひと目で解るようになれるといいですね。
562 名前:デフォルトの名無しさん [2006/06/26(月) 23:00:16 ] >>560 文字列の受け取り方が分かりません('A`) int main(void) { char yn; do { printf("愛していますか?"); printf("(y/n) > "); scanf("%c", &yn); while (getchar() != '\n') { } if (yn == 'y') { printf("もちろん!\n"); break; } else if (yn == 'n') { printf("なわけねーだろ!\n"); break; } else { printf("yかnを入力してください。\n"); } } while (!(yn == 'y' || yn == 'n')); return 0; }
563 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:09:09 ] 534です。 みなさん色々指示してもらって。助かります。 >>535 さんの発言どうり途中であきらめず、この世界で やっていこうと本気で思いました。本気で突っ走りたくなったんで 更に更に勉強します。
564 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:24:54 ] 思いとどまれよ。 人生負け組みになりたくなければ。
565 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:31:06 ] >>564 ひとそれぞれだよ。 俺は今年で35歳になるが、この業界に入って後悔したことはただの一度も無い。 負け犬だと思ったこともないし。客観的に見れば社会的ステータスは低いんだろうけどね。
566 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:32:18 ] 質問なんですが scanfとgetsこの二つは なにが違うのですか?? 初心者ですいません
567 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:36:27 ] ゲッツは文字列を受け取る スキャンエフも文字列とか受け取れるがゲッツの方が使い勝手がよいと自分なりに勝手に拝借して候
568 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:52:53 ] scanfはスペースがあるとそこで区切られるよね。 ところでgetsって ゲッツ?ゲットエス?
569 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:16:44 ] getStringの略だからゲットエスだろ。 getsは文字列(string)を受け取るだけ。 scanfは書式指定(Format)できるから、文字列じゃなくて数値とか いろいろ入力できる。 ま、本当はバッファオーバーランを防ぐためにもfgetsを使う べきだと思うが。
570 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:33:45 ] >>568 区切られずに読ませる方法もある。
571 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:45:55 ] >>566 むしろ同じ所などない。 全てにおいて異なる。
572 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:51:58 ] >>566 です 教えてくれた人ありがとうございます。 勉強になりました
573 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 16:32:42 ] opendirはNo errorなのに readdirでBad addressって言われるのってどういう場合が考えられる? 環境はWindowsのMingwです。
574 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 18:58:59 ] 単に終端に達したのを勘違いしたとか
575 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 10:50:19 ] ん〜?ファイルはあるんだけどなぁ。でもそれくらいしかあり得ないか・・・。解答どうもでした。
576 名前:デフォルトの名無しさん [2006/06/28(水) 23:27:59 ] 文字列のなかで特殊文字(%や”など)が入っているかをチェック するときどのようにすればよろしいでしょうか。 目的はSQLでエラーになるような特殊文字を検索時の値として渡さないようにしたい
577 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:44:41 ] >>576 一文字づつチェックすればいいだろ。 それより、そういう文字は普通、エスケープして渡すべきだと思うよ。
578 名前:デフォルトの名無しさん [2006/06/28(水) 23:50:36 ] エスケープして渡すべきとは具体的にどうすればいいいのですか。
579 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:52:51 ] >>576 つ[strcspn]
580 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:54:35 ] SQL エスケープでぐぐれ メタ文字の意味を消失させる事 例えばCの文字列定数なら"\\"みたいな
581 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:55:29 ] >>578 そのSQLの仕様見れ
582 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 10:03:59 ] Visual C++ 6.0上で実行すると、「Press any key to continue」が最後に出るのに、 直接実行すると、「Press any key to continue」が出ずに すぐに終わってしまいます。どうすれば、 直接実行したときに、「Press any key to continue」が出るようにできるのでしょうか?
583 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 10:42:11 BE:15528724-#] main関数の最後に puts("Press any key to continue.");getch(); と書いておく。
584 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 16:56:59 ] >>582 末尾に system("PAUSE");
585 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 16:59:05 ] >>582 コマンドプロンプトを立ち上げて 実行プログラムがある場所に移動してから実行するとか
586 名前:デフォルトの名無しさん [2006/06/29(木) 20:19:49 ] コマンドプロンプト上でカーソル位置を自由に設定する方法を教えてください。 メニュー画面を作って、メニュー番号を入力させるプログラムを作りたいの ですが、メニュー画面を表示させることはできるのですが、 画面上の真ん中あたりに、メニュー番号を入力させるところを作りたいのですが、 そこに、カーソルをもってくるにはどうしたらいいですか? お願いします。
587 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 20:48:22 ] コンソールAPI でぐぐる。
588 名前:586 mailto:sage [2006/06/29(木) 21:01:06 ] >>587 ありがとう!!
589 名前:586 [2006/06/29(木) 22:12:54 ] ごめんなさい、やっぱわかんなかった。 VCじゃなくって、まったくのc言語だけでカーソル移動とかさせたいのだけど、 windows.hとか使わないでやる方法教えてください。
590 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 22:17:07 ] >>589 ない。 そもそも、標準Cにコンソールとか言う概念自体がない。
591 名前:586 mailto:sage [2006/06/29(木) 22:21:42 ] >>590 そうなのか、、ありがと
592 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 01:03:38 ] すげぇなぁ。 >メニュー画面を作って、 >メニュー番号を入力させるプログラムを作りたいのですが、 >メニュー画面を表示させることはできるのですが、 >画面上の真ん中あたりに、 >メニュー番号を入力させるところを作りたいのですが、 >そこに、 >カーソルをもってくるにはどうしたらいいですか? なげぇ文だぜ。 きっとプログラムもmain()で冗長に書いているのだろう。
593 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 16:42:41 ] 文字列の部分コピーをやりたいです。 先頭から n 文字目までのコピーなら strncpy(*char, *const char, int); で実現できますが、 n 文字目から最後までのコピーは、char配列の1成分ずつfor文等でコピーしないといけないのでしょうか?
594 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 17:43:09 ] >>593 strcpy(dst, src+n);
595 名前:593 mailto:sage [2006/06/30(金) 18:38:32 ] >>594 できました。ありがとうございます。 このような使い方が出来るとは・・・覚えておきます。
596 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 19:05:37 ] >>595 ポインタとヌル終端文字列の基本テクです
597 名前:デフォルトの名無しさん [2006/06/30(金) 22:56:30 ] do-while文で、整数を入力して、0になったらおわりという文はどうしたらいいのですか?最近プログラムの勉強始めたばかりで申し訳ありません
598 名前:デフォルトの名無しさん mailto:sage [2006/06/30(金) 23:19:56 ] >>597 適当に答えてみる #include <stdio.h> #include <stdlib.h> int main(void) { int num; char tmp[256]; do{ num=atoi(gets(tmp)); }while(num!=0); return 0; }
599 名前:582 mailto:sage [2006/07/01(土) 00:25:26 ] >>583 ,584,585 ありがとうございます。system("PAUSE");を利用することにしました。 >>597 #include <stdio.h> int main(){ int n; do{ scanf("%d",&n) if(n<1) printf("1以上の整数を代入してください!"); }while(n<1); do{ n--; }while(n!=0); return(0); } 実行してないからバグあるかもしらん。
600 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 01:04:31 ] 598、599さん、素早い返答ありがとうございます。実は猫でもわかるシリーズの本にあった例で、do〜while(n)で終わってて理解できなかったんです。初学者ゆえこれからも質問しますが、よろしくお願いいたしますm(__)m。
601 名前:デフォルトの名無しさん [2006/07/02(日) 13:57:54 ] double a=123456.6789 b=-12345.6789 printf("a=%10.4f b=%10.4f\n",a,b); printf("a=%7.4f b=%7.4f\n"),a,b); の結果が両方とも a=123456.6789 b=-12345.6789になるのはどうしてでしょうか?
602 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/02(日) 14:07:24 ] >>601 %10.4fは、浮動小数の「小数点以上」ではなく「全体の幅」を10文字で表すと言う意味。 もちろん小数点以上の桁数が足りない場合は自動的に補われる。 小数点以下の「4」の部分は、小数点以下に使う桁数の指定。 どっちも7文字でも10文字でも表しきれないので11文字に拡張されて同じ表示になる。
603 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 14:15:07 ] >>601 pc8.2ch.net/test/read.cgi/tech/1148993760/671
604 名前:デフォルトの名無しさん [2006/07/02(日) 14:15:33 ] >>602 よくわかりました。ありがとうございます。
605 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 14:30:09 ] 目がおかしくなったかなぁ。 >601の後者はコンパイルさえ通らないし、二番目の%10.4fの結果は12桁になるようにしか見えない。
606 名前:デフォルトの名無しさん [2006/07/02(日) 16:02:02 ] Boland C++ Compiler 5.5でアプリケーションプログラムをコンパイルする方法を 教えてください。 パラメータ 'hWnd'は一度も使用されない パラメータ 'hPrevInstance'は一度も使用されない パラメータ 'lpCmdLine'は一度も使用されない といった警告はどうしたら消えるのでしょうか?
607 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/02(日) 16:09:20 ] int WINAPI WinMain( HINSTANCE /* hInstance */ , HINSTANCE /* hPrevInstance */ , LPSTR /* lpCmdLine */ , int /* iCmdShow */ ) { // ほげほげ }
608 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 16:36:34 ] その気持ちの悪いカンマの位置はどんなメリットがあるんだ? たまに見かけるんだが。
609 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 17:50:20 ] Borland Developer Studio 2006 No.06 pc8.2ch.net/test/read.cgi/tech/1151562315/l50 int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int, ) { // ほげほげ }; ってやっちまって、コンパイルエラー出て悩むのを防ぐ馬鹿除けでは?
610 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 18:10:34 ] 俺ならint WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行に書く。
611 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 18:11:34 ] 一応言っておくと>>607-610 のように仮引数名を省略できるのはC++だけで、Cではできない。
612 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 18:40:04 ] あれ? C99でできなかったっけ?
613 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 18:47:37 ] nに入力した数字の数だけ$を表示するプログラムを作ったんですが 数字を入力するとなんか沢山$が出てきちゃいます。 改善方法はありませんか。よろしくお願いします。 #include <stdio.h> int main(void){ int a; char c; while(1){ printf("C="); scanf("%c",&c); if(c==0) break; if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){ printf("英数字ですぅ\n"); continue; } else{ for(a=1;a<=c;a++) printf("$"); } } }
614 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 19:58:25 ] >>613 ・scanf()の戻り値をチェックしないとcの値が有効かどうか判らない。 ・cには文字が入っている。それは数値ではないので0と比較する意味が殆どない。 ・同じ理由で、$の数は文字コードの値に依存してしまう。 やりたいことがよく判らんが、入力と処理を分けて考えた方がいいんじゃないか?
615 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 20:54:59 ] cを入力 ↓ 英字か?no→→→数字か?no→→→→→それ以外 yes↓ yes↓ ↓ 上に戻る cの数だけ$を表示 終了
616 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:01:46 ] 上のようなプログラムを作りたかったんですが 10進数型で入力にして if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){ printf("英数字ですぅ\n"); else if((c <= 0){ for(a=1;a<=c;a++) printf("$"); } else break; このようにしても英字を入力したらダメですし・・・。 上のようなプログラムを作るのは無理ですか。
617 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:05:30 ] >>616 つ isalpha(), isdigit()
618 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:05:51 ] >>616 >>616 読め
619 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:13:22 ] cが0以下ってのはどういう事よ
620 名前:デフォルトの名無しさん [2006/07/02(日) 21:44:18 ] signed char であれば、ASCII範囲外を除外しているといえなくも無い。
621 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 21:48:38 ] ASCII範囲内を除外しているように見えるが...
622 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 22:17:10 ] #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { // ここから入力 char buf[200]; if (fgets(buf, sizeof(buf), stdin) == NULL) { // 入力終端or異常 } char * ptr; long foo = strtol(buf, & ptr, 10); if (ptr[0] != '\0') { // 数字以外の入力 } // ここから文字処理 for (unsigned ic = 0; ic < foo; ++ic) { putchar('$'); } return 0; }
623 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 22:40:48 ] 見たことのない文字がいっぱい・・・。 c言語って難しいですね。 あと、616は間違いだらけでした・・・。 皆さんありがございました。皆さんが言ってることが理解できるようにもっと勉強します。
624 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 22:45:12 ] >見たことのない文字がいっぱい・・・。 確かにそれでは文字コードの処理は難しいだろう …とかいうツッコミは置いといて、 ガンガレ。
625 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 22:55:52 ] >>622 改行を除去するか、'\0' || '\n'で判定しないと、 常に数字以外と判定されるよ。
626 名前:622 mailto:sage [2006/07/02(日) 23:36:30 ] あ、いけね、忘れてた。 >>625 THX! こんなもんかな。 #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char buf[200]; if (fgets(buf, sizeof(buf), stdin) == NULL) { printf("No input.\n"); return 0; } char * ptr = strchr(buf, '\n'); if (ptr) { * ptr = '\0'; } if (strlen(buf) == 0) { printf("Empty input.\n"); return 0; } long foo = strtol(buf, & ptr, 10); if (ptr[0] != '\0') { printf("Not a number.\n"); return 0; } for (unsigned ic = 0; ic < foo; ++ic) { putchar('$'); } return 0; }
627 名前:デフォルトの名無しさん [2006/07/02(日) 23:36:32 ] 初歩的な質問ですみません。 main関数とは別のファイルに作ったユーザー定義関数を 呼び出すのはどうしたらいいですか? #includeで取り込めばいいのでしょうか? そのときは、やっぱり関数のプロトタイプ宣言は必要ですか?
628 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:37:57 ] extern付けて宣言する必要がある
629 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:38:16 BE:314515679-#] >>627 環境は?
630 名前:デフォルトの名無しさん [2006/07/02(日) 23:39:01 ] >>629 WindowsXPです
631 名前:デフォルトの名無しさん [2006/07/02(日) 23:42:36 BE:239631168-#] >>630 VCとかなら、プロジェクトに別ファイルを追加すればいいよ。 コマンドラインなら、引数で、mainのファイルと、別のファイルを渡せば勝手にリンクされる。
632 名前:デフォルトの名無しさん [2006/07/02(日) 23:44:39 ] すごく初歩的なんですが c言語を学校で習ってるんですが 家のPCでソース組むにはどうしたらいいでしょうか?
633 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:46:01 ] 答え:先生に聞く はい次の方どうぞー
634 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:47:57 BE:359446098-#] >>632 メモ帳
635 名前:デフォルトの名無しさん [2006/07/02(日) 23:48:54 ] コンパイラがどれがいいのかわからなんです・・・・
636 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/02(日) 23:49:08 ] コンパイルまでやるなら Visual C++ Express
637 名前:デフォルトの名無しさん [2006/07/02(日) 23:52:17 ] 学校じゃコマンドプロンプトでlcc ソース名でコンパイルできるんですが
638 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/02(日) 23:55:23 ] Visual C++ Expressならコマンドプロンプトから cl ソース名 でおk
639 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:59:08 ] >>632 コマンドプロンプトでnotepad[Enter]だ。
640 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:59:45 ] ttp://www.borland.com/jp/products/cbuilder/freecompiler.html ttp://www.vector.co.jp/soft/win95/prog/se141451.html VC++ Expはダウソに時間が掛かるから、今すぐちゃちゃっとやるならこっつで
641 名前:・∀・)っ-○◎● ◆toBASh.... [2006/07/03(月) 00:05:42 ] lcc-win32も自分で環境変数通せばコマンドラインで使えそうだけどな
642 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 01:23:42 ] >>637 lccと言えば、LSI C-86のような気がする。 準備(インストール)はなれないと面倒かもしれないが、学校と同じというのは利点かもしれない。
643 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 02:02:18 ] 4つ程度なら、int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行でもいいけど、世の中にはもっといっぱい受け渡す関数もあるよ。 今更、lccって気もするなあ。 実務経験的に、gccかVCのインスコと環境構築方法も学習すべき。
644 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 07:34:30 ] lccと言ってもLSI-Cではないと思うけどね。 授業でLSI-C使っているならそれはそれで、よっぽど阿呆で楽しいが。
645 名前:仕様書無しさん [2006/07/03(月) 13:16:25 ] 配列でhoge[i*j]と*(hoge+i*j)はどちらがいいのでしょうか? メリットなどがあれば教えてください 見やすいのはhoge[i*j]なのでこっちで書くほうが多いのですが
646 名前:デフォルトの名無しさん [2006/07/03(月) 13:34:54 ] >>645 a[i] は *(a + i) の略記法なんだからコンパイラにとってはどっちでも同じ。 見やすい方で書けばいい。
647 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 15:55:19 ] pow()や、malloc()は重い関数と聞いたのですが、 ではclock()は重い関数なのでしょうか。 というか、重い関数というのはどこでどうやって知るのでしょうか?
648 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 15:58:51 ] >>647 OSのソースを読むとか実際に測定してみるとか。
649 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 16:06:47 ] >>648 ということは重いかどうかというのは環境依存なんですね。 分かりました。どうもありがとうございます。
650 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 18:46:45 ] >>647 >というか、重い関数というのはどこでどうやって知るのでしょうか? というか、重い関数というのは何を基準に決めるのでしょうか?
651 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 19:14:34 ] 主観
652 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 21:21:28 ] 相対的なもんじゃね。
653 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:04:21 ] 他に手段があるならそれと較べて重い(≒遅い)か判断すればいいんじゃない? pow()はpow(5, 2)と5*5を較べれば一目瞭然だし、malloc()の代わりにC99の可変長配列を使うとか、 malloc(100)を1万回の代わりにmalloc(100 * 10000)すればずっと早くなるわけだし。
654 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:06:35 ] 各辺が全て500以下であるようなピタゴラスの三整数を全て求めよ。 ただし、三重にネストしたforループを使う事。 #include<studio.h> main() { int x,y,z; for( z = 1, z <= 500 , z++ ){ for( x = 1, x <= 500 , x++ ){ for( y = 1, y <= 500 , y++){ if( pow(z,2) == pow(x,2) + pow(y,2 )) printf("%dの二乗は%dと%dの二乗の和に等しい\n",z,x,y);}}} return0; } 上記で合ってますか?
655 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:15:42 ] 宿題スレで会おう!
656 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:21:42 ] >>655 スマソ サンクス
657 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 01:57:58 ] ちょっと質問です。 a , b ? c , d : e , f; は a , (b ? (c , d) : e) , f; と同じでしょうか? あと、 a = b ? c = d : e = f; は a = (b ? (c = d) : (e = f)); ですか? どうも3項演算子の優先順位が今ひとつ…。 括弧つけろってのは別の話ということで、 よろしくお願いします。
658 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 02:11:37 ] www.google.co.jp/search?q=%E6%BC%94%E7%AE%97%E5%AD%90+%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D で、その式はコンパイル通るのか?
659 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 09:13:57 ] >>658 VC6で試したけどコンパイルは通りました。 たとえば条件演算子と、代入演算子やカンマ演算子は、条件演算子の方が優先順位の方が高いじゃないですか。 なら、そのまま解釈すると a = b ? c = d : e = f; は a = (b ? c) = (d : e) = f; a , b ? c , d : e , f; は a , (b ? c) , (d : e) , f; こうなっちゃいそうだけどそれじゃあ本当にコンパイルが通らないし、それで聞いてみたんです。 a , b ? c , d : e , f; これは、 (a , b) ? (c , d) : (e , f); こう括弧でくくってもコンパイル上は問題になりませんが、優先順位としては明らかにカンマの方が高くなっているから ありえない。実際動作もそうなってはいないようです。 で、演算子を解釈していくときのプロセスで、3項演算子だけは二項演算子とは違った特異な処理をしているんしょうか? ちょっと入門の質問じゃないかも知れないですが、どうも自分の考え方が理解の域に達していないので、初心者とし て質問させていただきました。 グーグル先生以外の人間の達人の方、出来ましたら演算子の解釈順序なんかをご教示くださいませんでしょうか。 よろしくお願い致します。
660 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 09:28:04 ] >>659 a = b ? c = d : e = f; は a = (b ? (c = d) : e) = f; a , b ? c , d : e , f; は a , (b ? (c , d) : e) , f; だ。 ? と : の間は分離なんかできるわけがないから、 ここは常に ? ... : は ? (...) : と同じになる。
661 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:12:54 ] >>660 どうもありがとうございます。ただ、まだちょっと納得いってません。aを除いて、 b ? c = d : e = f; これはご教示に従えば (b ? c = d : e) = f; こうなりますよね? ここで、bが偽なら 最初の括弧の中は (e) となって、 e = f が実行されますが、 b が真のとき、(c) = f が実行されないのでしょうか? (b ? c = d : e) = f; ↓ (c = d) = f; ↓ (c) = f; bが真のとき、実際に挙動を見てみると、 b ? (c = d) : (e = f); こうなっているように思えるのです。なので、 a = b ? c = d : e = f; このケースでも、bが真か偽かによって、 a の値が d か f のどちらかになります。
662 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:13:39 ] 改行が多いみたいで、上の続きです。 a = (b ? (c = d) : e) = f; a = b ? c = d : e = f; これはトレースすると、挙動が違うんです。もし手軽に試せる状況なら、 追試していただけないでしょうか? お手数ですが、よろしくお願い致します。
663 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:33:12 ] (b ? c = d : e) = f; ってコンパイル通るか? 三項演算子は左辺に置けないと思うんだけど。
664 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:11:47 ] ちと勘違いしてました。VC6でWinMainで試してました。 C++だと変数の参照を返すからコンパイル通るんだ…。 ここはC言語スレでしたかorz たしかにCだと b ? c = d : e = f; これは書けませんね。 ただ、演算子の優先順位というに点だけ着目すると、Cでは (b ? (c = d) : e) = f; こうなって左辺値に不適合でエラー C++だと b ? (c = d) : (e = f) このように実動作しているようです。直感的にはC++流の解釈の方が 素直な気がしますが、三項演算子の コロン以降だけを特別処理している 気がしてならない…。 スレ汚し失礼しました。C++スレに行って来ます。
665 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:13:34 ] 言語の優先順位に頼った可読性の悪いソース書くなよ。 括弧使え括弧。
666 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:24:20 ] >>665 ですので、最初に書いたとおりに、括弧をつけるのは別の話です。 コンパイラの式処理がどうなっているのか勉強しているので。
667 名前:初心者 [2006/07/06(木) 10:08:35 ] 初心者レスですよね?!心優しい皆さんよろしく!! 数列の長さを設定しました。 キーボードで文字を入力します。 入力した文字が設定した長さを超えるとごみが出て 次の入力を影響します。 設定した長さ以後のごみをメモリからとる方法は??
668 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 12:47:59 ] むり
669 名前:デフォルトの名無しさん [2006/07/06(木) 13:05:30 ] FreeBSDやMac OS Xならば、 fpurge(stdin) で入力バッファに入っている文字を落とせる。 これが無いとちょっと面倒だけど、とりあえず改行文字まで 落としたかったら while(getchar() != '¥n'); でいいんじゃない?
670 名前:初心者 [2006/07/06(木) 13:06:42 ] 何が無理?
671 名前:初心者 [2006/07/06(木) 13:13:37 ] >>669 御免初心者なんで、FreeBSD<<わからない。 例として: #include <stdio.h> int main(void) { char gg[22],*gu; char hh[33],*jj; printf("数列入れて>\n"); fgets(gg,22,gu); printf("数列いれ>\n"); fgets(hh,33,jj); getc(stdin); } 数列を多い目に入れると、次の入力ができない。
672 名前:もはもは [2006/07/06(木) 13:14:46 ] HELPです!!!!! 1次元配列に 34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、 これらの平均値を求めよ。 さらに int eval[3]という1次元配列を用意して eval[0] には0〜60の数の個数 eval[1]には61〜80の数の個数 eval[2]には81〜100の数の個数 を格納するようにし、それらを出力するプログラムを作成せよ。 よろしくお願いします。
673 名前:デフォルトの名無しさん [2006/07/06(木) 13:29:23 ] >>671 どうゆう入力を想定してるの?
674 名前:デフォルトの名無しさん [2006/07/06(木) 13:32:11 ] >>671 fgets(標準ライブラリのものと仮定)の使い方が間違ってる。 標準入力から入力して欲しいのなら、 fgets(gg, 22, stdin); fgets(hh, 33, stdin); のように書かなくては。
675 名前:初心者 [2006/07/06(木) 13:54:51 ] >>673 プログラムの一部なの。(全体は汚いプログラムなので見せない><) まぁ、かんたんに言えば、 キーボードから入れた文字を好きな所まで取り オーバーしたものは消す方法。 神様、私の願いを!!!
676 名前:デフォルトの名無しさん [2006/07/06(木) 14:09:56 ] 何が言いたいのかよくわからん。 Cより前に日本語をちゃんと勉強しろよ。
677 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:17:55 ] 留学生か?>初心者
678 名前:初心者 [2006/07/06(木) 14:22:39 ] 勉強中です><(怒らないで); (本当に外国人です!!!日本語下手で御免なさい><); 会社からcを無理やり勉強させました。 お願いします。
679 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:27:35 ] english ok
680 名前:デフォルトの名無しさん [2006/07/06(木) 14:29:31 ] ・・・変数宣言って何・・・?
681 名前:初心者 [2006/07/06(木) 14:29:39 ] むり!韓国語なら>>
682 名前:初心者 [2006/07/06(木) 14:36:10 ] #include <stdio.h> int main(void) { char gg[22],stdin; char hh[33],stdin; printf("数列入れて>\n");//ここに20文字以上入れるとおかしくなる fgets(gg,22,stdin); printf("数列いれ>\n"); fgets(hh,33,stdin); getc(stdin); }
683 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:51:10 ] >>682 おかしくなるのは仕様です。面倒ですが、次のように大きなバッファを用意して、 そこに一旦とりこむ必要があります。配列の大きさよりひとつ少なくしか使えないのは、 最後にヌル文字を入れる必要があるからです。 #include <stdio.h> #include <string.h> int main(void) { char buf[1024]; char gg[22]; char hh[33]; printf("数列入れて>\n"); fgets(buf, sizeof buf, stdin); buf[strlen(buf) - 1] = '\0'; memset(gg, '\0', sizeof gg); strncpy(gg, buf, sizeof gg - 1); printf("数列いれ>\n"); fgets(buf, sizeof buf, stdin); buf[strlen(buf) - 1] = '\0'; memset(hh, '\0', sizeof hh); strncpy(hh, buf, sizeof hh - 1); }
684 名前:初心者 [2006/07/06(木) 15:09:57 ] >>683 先に入れる所用意する事までは分かりました。 でもこれも限界がある(入力がbufの1024字超えれば)と思います。 (他にも使い所あるので><) butに無限入力できる方法ないかしら?? (どんな入力も対応できる方法) よろしくおねがいします。
685 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 15:13:22 ] ハードウェアのリソースが有限な以上 どんな入力にも対応するなんてのは無理。 そのために仕様が存在する。
686 名前:初心者 [2006/07/06(木) 15:20:06 ] >>685 そうなんですか!!!! 本当にありがとうございました。 はんぱな日本語で迷惑かけました>>礼>>
687 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:02:38 ] CとJavaで、初心者が学びやすいのはどちらでしょうか? 最初に学ぶのはどちらがいいのでしょう…? またCとJavaは数学的な要素(計算など)がどちらも必要になってくるのでしょうか。 返信お願い致します。
688 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:11:10 ] >>687 将来プログラミングで生計を立てたいのなら、まずCから。もちろんその後Javaもやる。 趣味でやるならどちらでも。Javaオンリーでもかまわない。
689 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:26:42 ] >>688 そうですか。 計算などが出てきてしまうと辛いのですが、両者とも計算式を 使ったりするのですか?
690 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:35:08 ] >>689 プログラミングでどのようなものをやるのかによる。 が、言語そのものの学習中にはほとんど出てこない。 数学的センスがあったほうが有利な場面があるかもしれないが。
691 名前:デフォルトの名無しさん [2006/07/06(木) 20:52:14 ] >>690 わかりました。ありがとうございます。
692 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:03:06 ] でも1 + 1やx + yもいわゆる計算式ではないだろうか。
693 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:05:18 ] >>692 ええ、計算式です。間違いなく計算をする数式です。
694 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:09:13 ] >>692 、>>693 それはCとJavaの両方とも使うのですか? Cは関数を計算し求めると聞いたのですが、Javaもなのでしょうか。
695 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:12:42 ] >>694 その書き込み、本気なのか? だったら、プログラミングなど勉強するだけ無駄だからやめとけ。
696 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:18:31 ] 数学がさっぱりでもいいが、算数は必須。
697 名前:デフォルトの名無しさん [2006/07/06(木) 21:27:52 ] >>695 私情でやらざるを得ない状況になりましたので、今回[入門]とあったこちらで 質問致しました。 レス参考にさせて頂きます。ありがとうございました。
698 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:31:17 ] まずやってみたら?プログラミングがどんなことするか分かってない気がする
699 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:49:20 ] ここにもチョンが湧いてるのか。 ミサイル発射の謝罪と補償を要求する!
700 名前:デフォルトの名無しさん [2006/07/06(木) 22:06:02 ] ここの回答者の人たちは参考書は何を読んで覚えたんですか? 0から始めた参考書と、それなりにわかってから読んだ参考書を教えてください
701 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 22:17:54 ] 言語としてのCに限るなら林のビギナー編だけしか読まなかったな。 もう後輩に売っちまった。
702 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 00:42:13 ] >>699 お前ひとりに直撃すりゃあ良かったのにな。
703 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:30:11 ] 在日は速く半島に帰れ! また有事の際に日本で儲けていたと半島のチョンに蔑まれ続けるぞ。
704 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:33:22 ] >>700 0からK&Rの第一版。 20年ぐらい前に覚えたのだが、それ以上にまともに書いてある本はなかった。 その後第二版も読んだ。
705 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:41:42 ] >>703 憂さ晴らしは妥当な板でどーぞ
706 名前:初心者 [2006/07/07(金) 12:01:46 ] >>699 話す事あるなら他のレスでどうぞ、 (ちゃんと見るから!!) このレスを汚くするな!!
707 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 16:37:53 ] PGの雇用が奪われてるのは、不法滞在し異常に安い賃金で働くチョンのせい。
708 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 18:55:02 ] >>706 いちいち反応するな。流せ オレモナー
709 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:24:53 ] >>706 の「レス」に反応
710 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:39:50 ] ごめんね、スレとレスの違いも分からなくて ごめんね
711 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:44:17 ] ごめんね、ごめんね、ごめんねごめんね、 ごめんねごめんね、ごめんね、ごめんね、 ごめんね、ごめんね、ごめんねごめんね、 ごめんねごめんしねごめんね、ごめんね、 ごめんね、ごめんね、ごめんね、ごめんね ごめんねごめんね、ごめんね、ごめんね、
712 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 10:29:13 ] チョン氏ね!
713 名前:デフォルトの名無しさん [2006/07/09(日) 00:22:08 ] エンターキーが押されたかどうかの判定の仕方と、 スペースキーが押されたときの判定の仕方を教えてください
714 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 00:29:35 ] 環境に依存するからもうちょっと情報だして
715 名前:713 [2006/07/09(日) 00:37:55 ] 標準c言語で、コマンドプロプト上で動かすコンソールアプリです。 OSはWindowsXPです。よろしくお願いします
716 名前:デフォルトの名無しさん [2006/07/09(日) 03:15:58 ] VC++4.0でXP用のソフトを組んでます。 操作ミスなどで警告音を鳴らしたいのですが、 MessageBeep()関数だと単純な音しか鳴らせず、おもしろくありません。 かといって、警告音のためにWAV作ったりするのも大変なので、 少しだけシャレた警告音を簡単に慣らす方法がありませんか?
717 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 03:24:07 ] Beep()を沢山つかって音楽でも奏でてはいかが? 10ミリ秒ごとにアルペジオさせれば和音っぽく聞こえて 周りをちょっと驚かすぐらいはできるよ。
718 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 03:36:44 ] 適当に答えてみる。 >>713 標準c言語だと、getchar()かな? でも、エンターが押されないと、stdinに入ってこない。 MS-Cだと、getch()が1文字ずつとれる。(エコーなし) エコーしたいなら、getche()。 <conio.h>に入っている。
719 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 04:20:51 ] CでGUIアプリ作る方法教えてください
720 名前:デフォルトの名無しさん [2006/07/09(日) 05:49:53 ] Cでかいたプログラムから命令(メッセージ?)送ると グラフィックだけ出力してくれるサーバっぽいアプリケーション ってないですか?
721 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 05:57:51 ] X?
722 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 05:58:37 ] あ、「Windows」の方が適切かな
723 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 06:12:09 ] 適当に答えてみる。 >>720 system("start C:\\temp\\test.gif"); なんてやれば、windowsならgif拡張子に関連付けしてるアプリを よんでくれるはず。(.bmpとか.jpgでもOK)
724 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 11:38:34 ] OpenGLとかActiveXの記述だけで描画してくれるアプリが欲しいってこと? 普通は鯖といちいち通信するのが面倒だから自前でライブラリ抱えます。 少しだけシャレた警告音はwavでも鳴らさないと無理な悪寒。 どんなのが少しだけシャレた警告音なのか録音してウpしてみてくれ。 常に入力を監視する。 スペースかリターンが押されたのを判定すればいい。 普通はキー入力があったらイベント飛んで来るから、入力に対応した処理を記述しておけばOSが実行してくれる。
725 名前:713 mailto:sage [2006/07/09(日) 11:39:33 ] 適当な回答ありがとうございます。参考になりました
726 名前:デフォルトの名無しさん [2006/07/09(日) 11:56:05 ] MS Visual C++ NET BorLand C++ Builder6 てどちらが使いやすい?
727 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 22:16:51 ] 両方使ってみてそれぞれにスレがあるから感想でもカキコしてみたら? ムカつくほうは使わないほうがいいと思う。ストレス感じるだけ。
728 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 23:29:29 ] >>726 単なる数値計算やら簡単なプログラム(アルゴリズムの勉強)程度なら Borland C++ 5.5が手軽で良いYO!
729 名前:716 [2006/07/10(月) 01:26:04 ] >>717 10mS毎に? うーん、他にいい方法がなかったら試してみます(汗
730 名前:デフォルトの名無しさん [2006/07/10(月) 01:36:13 ] 質問です。 「'」という文字を配列に格納したいのですが、エラーが出てうまくいきません。 エラーは以下の3つです。 文字列定数は1文字か2文字でなければならない。 ,が必要。 文字列または文字定数が閉じていない。 宜しくお願いします。
731 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 01:41:01 ] ¥’
732 名前:デフォルトの名無しさん [2006/07/10(月) 03:17:38 ] >>731 ありがとうございます!
733 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 12:36:59 ] >>730-731 せめて半角で書いて欲しいとオモタ
734 名前:デフォルトの名無しさん [2006/07/10(月) 20:38:16 ] CHAR PTCHAR TCHAR WCHAR型の違いを教えてください
735 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 21:49:40 ] typedef char CHAR; typedef wchar_t WCHAR; #ifdef UNICODE_ typedef WCHAR TCHAR; #else typedef CHAR TCHAR; #endif typedef TCHAR *PTCHAR;
736 名前:726 [2006/07/10(月) 21:50:19 ] >> 728 サンクス
737 名前:デフォルトの名無しさん [2006/07/10(月) 21:58:42 ] putchar だけで文字コード 112、117等 を出力するプログラムを教えてください。
738 名前:734 [2006/07/10(月) 22:08:03 ] >>735 アリガ10
739 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 22:28:49 ] >>737 putchar(112)
740 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 22:58:26 ] そのまんまですな。
741 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 02:29:38 ] ワロタ
742 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 02:33:22 ] CでGUI? WindowsならWin32 LinuxならGTK+ どっちもCライブラリ
743 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 09:08:17 ] >>728 BorlandC++と一緒にTurboDebugger落として使ってみたら、 このデバッガって、キャラクタ画面ベースのUIなのな。 あまりに懐かしいスタイルにめまいがしたyo!
744 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 16:09:48 ] GUIのデバッカってメモリ喰うしデバッカに落ちた時点で表示できないと思う。
745 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 22:50:17 ] DLL内でmallocした物をexeからfreeしてはいけないと聞いた事があるのですが malloc以外のHeapCreateやHeapAlloc(GetProcessHeapとかなら問題ないのでしょうか?
746 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:12:42 ] >>745 確保するときと解放するときとで、同じヒープハンドルを用いれば問題ない。 けれどDLLでメモリを確保して、そこへのポインタをEXEに返すのだったら、 DLLはそのメモリを解放する関数も公開するのが一般的だと思う。
747 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:19:17 ] >>745 ちなみに前者がいけない理由が、ことなるメモリマネジメントルーチンを使っている 可能性があるから。VCのDebug/Releaseモードとか。
748 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:45:52 ] >>746-747 そのルーチン覗いてみるのも勉強になるかもしれませんね。 とりあえず一般的な方法でしてみたいと思います。 ありがとうございました。
749 名前:デフォルトの名無しさん [2006/07/12(水) 01:01:46 ] VC++なんですが、以下のように配列を定義しています。 signed short foge[]={ 0x0001, 0x7fff, 0x8000, 0xffff }; コンパイルするとマイナス値(0x8000と0xffff)で warning C4305: 'initializing' : 'const int ' から 'short ' へ切り詰めます。 というワーニングがでます。 C言語ではsigned 16bitを表す接尾子が無いようなんで、 キャストで回避するしか無いんでしょうか?
750 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 01:04:40 ] 素朴な疑問。 何故const signed shortにしないのだろう。 それはさておき、-0x8000, -0x0001ではダメ?
751 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 01:11:56 ] >>749 よくわからないけど、キャスト以外の方法で、警告消したいだけなら 0x8000 → -32768 0xFFFF → -1 とか、#pragma とかがあるよ。
752 名前:デフォルトの名無しさん mailto:age [2006/07/12(水) 01:26:04 ] すみません ファイルからの読み込みなのですが 改行がCR(0D)のみで書かれているテキストファイルから テキストモードでデータを読み込みたいのです fscanf(fp,"%d",&data1); のように書くと、だいたいはCRのみの改行も改行として読んでくれるのですが たまに改行をすっ飛ばして変な値を読んでしまいます 改行がCRのみのテキストファイルをうまく読み込む方法はありませんでしょうか
753 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 01:27:43 ] fgets()
754 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 10:47:28 ] >>752 だいたいうまくいくけど、たまに変になるって、違うところでバグってるんじゃないの?
755 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 11:17:19 ] 3.4E-38って 0.00000000000000000000000000000000000000034?
756 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 11:49:45 ] >>755 0.000000000000000000000000000000000000034
757 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 14:13:29 ] >>756 あ、ごめん、3のところが38番目になればいいのね。 じゃあfloat型って3.4E-38〜3.4E+38って書いてあるから 34000000000000000000000000000000000000〜0.000000000000000000000000000000000000034? でも有効桁7桁ってどういうこと?
758 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 14:42:48 ] >>757 >でも有効桁7桁ってどういうこと? 数学の時間寝てたのか それともまだ習ってないのか まあとにかくググれ。
759 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:01:17 ] ぐぐってもわからん float fe; fe=5e2; って書くと 500.000000 って出力されるけど、どこが7桁?
760 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:21:00 ] >>759 俺のところで実行したらこうなるよ。 #include <stdio.h> main() { float f = 1.0 / 3; double d = 1.0 / 3; printf("%.30f\n", f); printf("%.30f\n", d); return 0; } 結果 0.333333343267440795898437500000 0.333333333333333314829616256247
761 名前:デフォルトの名無しさん [2006/07/12(水) 15:22:11 ] グローバル変数を多用してしまうのですが、 変数を各関数で共有する方法ってグローバル変数以外に何かありますか?
762 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:31:49 ] >>757 3.4E-38 は 3.4 * 10の-38乗 だ。 有効桁数は扱える桁数。7桁なら 1.234567 とか 1.234567E+100 とか、 とにかく 7 桁は扱えるが 1.2345678 と書いても最後の 8 が扱えない。 >>759 どう出力されるかということと内部的に何桁保持されているかという ことは別の話。
763 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:35:45 ] >>760 いやそうなるのはわかるけど、 float型が3.4E-38〜3.4E+38で有効桁7桁ってどういう意味? float f = 1.0/3 printf("%f") だと 0.333333 で7桁まで出力されるって意味? 3.4E-38〜3.4E+38ってどういうこと? 出そうと思えば50桁以上出せるけど…
764 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:39:15 ] >>761 必要な変数は構造体のメンバにして その構造体へのポインタを受け渡しする。
765 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:39:28 ] >>762 どうも じゃあfloat型が3.4E-38〜3.4E+38っていうのは?
766 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:50:21 ] 普通に3.4*10^-38〜3.4*10^38でしょ? 3.400000*10^38のほうが正しいかな?
767 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:53:15 ] >>764 ありがとうございます、さっそくチャレンジしてみます
768 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:53:27 ] >>766 はあ・・・ でも10の50乗でも100乗でも入力できるし出力も出来るよ?
769 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:56:39 ] なんかよくわかんないけど、まあこれでも読んでよ。 「浮動小数点型と誤差」 ttp://www.kyoto-su.ac.jp/~yamada/programming/float.html
770 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:04:31 ] >>769 ああ…それよんだんだけど 1.175494 10-38 < float の絶対値 < 3.402823 10+38 って書いてあるよね。 私の本は 3.4E-38〜3.4E+38 って書いてあるよ。 それで、例えば、 float f=1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001; printf("%40.40f",f); って書いても 1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001; って表示されるよ。38超えてるよ?
771 名前:770 mailto:sage [2006/07/12(水) 16:07:09 ] あ、ちょっとコピペミスしたけど、気にしないで
772 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:11:00 ] >>770 コンパイラ何使ってるの?
773 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:11:58 ] floatよりdoubleの方が速いってよ
774 名前:770 mailto:sage [2006/07/12(水) 16:12:42 ] >>772 cygwinのgccだけど・・・
775 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:16:17 ] >>774 >>770 のソースを「全部」コピペしてみて。動かしてみるから。
776 名前:770 mailto:sage [2006/07/12(水) 16:20:30 ] >>775 え・・・でも770そのまんまだよ? #include <stdio.h> main(){ float f=1000000000000000000000000000000000000000.0000000000000000000000000000000000000001; printf("%40.40f\n",f); } 終わり。
777 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:22:13 ] >>776 うちでは"Inf"って表示されるけど・・・ gccのバージョンはいくつ?
778 名前:770 mailto:sage [2006/07/12(水) 16:24:22 ] gcc version 3.4.4 (cygming special) です。
779 名前:770 mailto:sage [2006/07/12(水) 16:26:21 ] コンパイラの問題なの?
780 名前:777 mailto:sage [2006/07/12(水) 16:30:09 ] >>778 おかしいな・・・。うちとまったく一緒のコンパイラなのに。 ちなみに printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001)); ってやってみて。 8って表示されるはずだから。これはその数値がdouble型のリテラルだって コンパイラが判断してることを示してる。それをfloat型に代入するときに 暗黙の型変換が行われるはずなんだけど・・・。 ってことで、俺はお手上げ。
781 名前:777 mailto:sage [2006/07/12(水) 16:30:42 ] あ、ちなみに"Inf"ってのはInfinityね。正の無限大。
782 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:34:30 ] >>770 そのソースでそのgccだと、警告が表示されると思うのだがそれをコピペして見給え。
783 名前:770 mailto:sage [2006/07/12(水) 16:38:20 ] >>777 printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001)); ってしたら core dump しました。 うちの環境がおかしい?WinXP Cygwin最新のものだけど… 入れなおすか…? どうもありがとうございました。うちがおかしいってことが分かったのでうれしいです。
784 名前:777 mailto:sage [2006/07/12(水) 16:39:20 ] >>782 -Wallでも出ない。
785 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:39:53 ] 釣りか? 壮大な釣りだったのか?
786 名前:770 mailto:sage [2006/07/12(水) 16:41:12 ] >>783 あ、いや、間違ってた printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001)); でちゃんと8って表示されました。 >>782 警告も何にも出ませんよ。普通にa.exeすると結果表示されます。
787 名前:777 mailto:sage [2006/07/12(水) 16:42:35 ] >>786 んじゃ、最後にuname -aした結果をコピペしてくれ。
788 名前:782 mailto:sage [2006/07/12(水) 16:46:07 ] >>770 >>777 警告出ないか? main()の戻り値の型がないと。漏れの端末だとこうなるのだが。 -- $ gcc --version ; gcc foo.c gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. foo.c:3: warning: return type defaults to `int' foo.c: In function `main': foo.c:6: warning: control reaches end of non-void function
789 名前:770 mailto:sage [2006/07/12(水) 16:47:14 ] う〜Cygwinコピペできないからつらい uname -a は CYGWIN_NT-5.1 ****** 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin です。名前は伏せ。珍しくもないけど
790 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:48:04 ] >警告も何にも出ませんよ。普通にa.exeすると結果表示されます。 make使ってて更新されたと認識されていないとか、違うところのa.exeが起動されているとか。 make使わず直接gccを動かしてみるとか、明示的にパスを指定してみるとかしてみたら?
791 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:49:54 ] 普通にcygwinをインストールすると所謂dos窓で動くから、 マウスで範囲選択して右クリックでコピペされると思うけどなぁ。
792 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:50:08 ] sizeof(float) が 8 だったりしたら…
793 名前:777 mailto:sage [2006/07/12(水) 16:51:56 ] >>788 あ、すまん、そこは警告出る。警告でないといったのは、4,5行目に関して。 手間かけさせてスマンかった。
794 名前:777 mailto:sage [2006/07/12(水) 16:53:26 ] >>789 うちより一つ新しいバージョンだな。ちなみにうちは、 CYGWIN_NT-5.1 MARS 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin 最新の1.5.20も怪しいところがあるみたいだから、しばらく更新はしないでおこうw
795 名前:770 mailto:sage [2006/07/12(水) 16:53:38 ] >>782 あ、範囲指定できたんだCygwinて・・・ gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. しかでません。makeつかってません。フォルダの中にa.exeもソースも一個しかありません。
796 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:56:04 ] 実行するときに ./a または ./a.exe でやってる?
797 名前:770 mailto:sage [2006/07/12(水) 16:56:57 ] >>796 やってますよ〜 そこまでバカではない・・・w
798 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:58:25 ] じゃあ sizeof(float) はいくつ? printf("%d\n", sizeof(float)); で出してみて。
799 名前:770 mailto:sage [2006/07/12(水) 17:01:15 ] 8ですた。
800 名前:782 mailto:sage [2006/07/12(水) 17:03:02 ] 漏れの方は同じだな。Win2Kだけど。 CYGWIN_NT-5.0 whee 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin コンパイラよりも疑うべきはライブラリか?
801 名前:782 mailto:sage [2006/07/12(水) 17:04:57 ] >>799 それが原因か…… #じゃぁなんでfloatが8バイト? 64ビットLinuxでも4バイトなのに……
802 名前:770 mailto:sage [2006/07/12(水) 17:09:16 ] >>801 やっぱおかしいんすね。環境作り直します。 Cygwin入れなおします。ちゃんと正規のルートで(学校の先輩からもらわずに)。 どうも失礼しました。
803 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 17:13:31 ] いやまぁ先輩から貰っても全然OKなんだが、オチを知りたいんだよなぁオチを・・・
804 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 17:14:13 ] はっ、その先輩がスーパーハカーだったというオチ!?
805 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 13:27:50 ] 自分でコンパイルしたのかな? >>804 gcc を自分でコンパイルできるとスーパーハカーなの? じゃあ俺も10年ぐらい前からスーパーハカーだったんだね。
806 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 13:38:59 ] 猫でもわかるC言語プログラミングって本を読んで勉強はじめたんだけ この本の説明めちゃくちゃ解り辛い・・・ まぁ単に俺が知識0ってこともあるんだろうけど、どの入門書籍もこんなもん?
807 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:12:46 BE:224654459-#] 猫でもわかるの書籍版は読んだことないけど、プログラムそのものが まったく初めてなら、入門書一冊読んだだけじゃなかなか難しいと思う。
808 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:15:29 ] どの本でも同じだけど、HelloWorldが動いているのを見て喜べるピュアな心の持ち主なら どんな本読んでも上達出来ます。
809 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:15:50 ] 猫以下なんじゃね?
810 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:31:58 ] プログラムそのものが難しいって言うより、説明が言葉不足だったり 説明なしでいきなり「ここはこうなりますね、ここはこうなるので」 みたいなところが多くて・・・ Cからはじめるのがそもそも間違いなんだろうか
811 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 17:53:08 ] >>810 まずはAから段階を踏まないと
812 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:32:39 ] >説明なしでいきなり「ここはこうなりますね、ここはこうなるので」 そういうのに一々疑問を持ってストレスを貯めるやつはプログラム書けないよ すべてそういうもんなんだと素直に覚えないと。 そもそもプログラミングの入門書って根幹に触れないからみんな説明不足といわれれば説明不足になる罠
813 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:44:26 ] 英語だって、なんでアルファベットなんだろうとか思い始めたらダメだよ。 挨拶はハローとか決まりきった定型パターンがあるからそう言うのは理屈無しに覚えるしか無い。 日本語でも、10年以上話して使っていて未だに表現方法とかの新発見がある様に、覚えたてでその言語の全てを理解するのは無理。 とりあえず義務教育の英語の教科書の様に、入門書を最後まで一通りやってみて、分からない所は他の書籍や先輩に訊くとかセミナーや研修にでも出るとかで補完していかないと。 自分でそう言う学習法が出来ない香具師は、金出してスクールに通ったほうがいいよ。
814 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:49:56 ] 心配しなくてもあとで「そういうことだったのか!」って気づくことになるから安心してその本をまずは読破すれ。
815 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 19:04:24 ] 理系が文章力カスなのはわかりきったことだろ
816 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 22:45:20 ] とりあえずは鵜呑み丸暗記にしておいて 必要が出てきたり気になったら自分で調べたりこういう場所とかで聞けばいいよ 入門書の中には一部間違ったことが書いてあるものもあるから 完全に鵜呑みってのもちょっとまずいことはまずいんだけどね まあ気にするな
817 名前:デフォルトの名無しさん [2006/07/14(金) 01:46:26 ] C++で7桁×7桁の計算プログラム組んでるんですが float使ったら小数点以降が表示されてあまり美しくない。 小数点以降を表示しない方法、教えてください。
818 名前:デフォルトの名無しさん [2006/07/14(金) 01:52:24 ] main() { Card deck[40]; int *face[] = {1,2,3,4,5,6,7,8,9,10}; char *suit[] = {"hart","daiya","kurab","superd"}; srand(time(NULL)); fillDeck(deck, face, suit); shuffle(deck); printf("baeojunnbisimasu"); return 0; } プログラミングの一部なんですが コンパイルが通りません int faceのところがだめらしいのですが何処が悪いんでしょうか? どなたか解る方おしえてください
819 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 01:54:23 ] >>817 整数型にcastして表示しろ
820 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 01:55:12 ] >>818 int *faceではなく、int face
821 名前:デフォルトの名無しさん [2006/07/14(金) 02:02:38 ] ごめん、castって何? #include <stdio.h> int main(void) { float alfa, beta, ganm; printf("7桁の整数を入力して下さい(1回目):"); scanf("%f",&alfa); printf("7桁の整数を入力して下さい(2回目):"); scanf("%f",&beta); printf("\n%f * %f = %f\n", alfa, beta, alfa * beta); }
822 名前:デフォルトの名無しさん [2006/07/14(金) 02:11:56 ] >>820 さん マジでありがとう^^ 通りました
823 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 03:31:14 ] %fではなく%gを使う習慣をつけよう。 #って話か?
824 名前:デフォルトの名無しさん [2006/07/14(金) 08:34:11 ] #include<stdio.h> int main(void) { int n,temp,m=0; FILE*fp1=fopen("2バイト文字.txt","r"); FILE*fp2=fopen("改行テスト.txt","w"); while((n=fgetc(fp1))!=EOF){ if(n=='\n'){ m=0; } else if(m==40){ fputc('\n',fp2);/*ここが上手くいかない模様*/ m=0; } fputc(n,fp2); m++; } fclose(fp1); fclose(fp2); printf("end\n"); return 0; }
825 名前:824 [2006/07/14(金) 08:37:11 ] 2バイト文字、日本語のテキストを行の文字数20で改行するようなプログラムを作りたいです。 例えば、行の文字数40のやつを、原稿用紙の形式に変換したい。 しかし、>>824 のやつだと、改行後の一文字目が変になってしまいます。 文字コードの問題なのかどうかすら分かりません。 ここが変だ、という場所の指摘をお願いします。
826 名前:824 [2006/07/14(金) 08:44:11 ] 失礼。 tempとprintf("end\n")は気にしないで……。
827 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 10:15:49 ] 超基本問題です。 main(){ int i; float f; double d; long l; char st[80]; printf("文字1文字,%%c,int,%&i="); scanf("%c",&i); printf("%%c,int,i=%c\n",i); printf("文字列,%%s,char,st="); scanf("%s",st); printf("%%s,char,st=%s\n",st); printf("文字列入力の時には&は不要\n"); printf("8進数%%o,int,%&i="); scanf("%o",&i); printf("%%o,int,i=%o\n",i); printf("%%d,int,i=%d\n",i); printf("10進数%%d,int,%&i="); scanf("%d",&i); printf("%%d,int,i=%d\n",i);
828 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 10:17:35 ] printf("16進数%%x,int,%&i="); scanf("%x",&i); printf("%%x,int,i=%x\n",i); printf("%%d,int,i=%d\n",i); printf("long型%%ld,long,%&l="); scanf("%ld",&l); printf("%%ld,long,l=%ld\n",l); printf("%%d,int,l=%d\n",l); printf("実数float型%%f,float,%&f="); scanf("%f",&f); printf("%%f,float,f=%f\n",f); printf("%%d,int,f=%d\n",f); printf("実数double型%%lf,double,%&d="); scanf("%lf",&d); printf("%%lf,double,d=%lf\n",d); printf("%%d,int,d=%d\n",d); } これやると、例えば 8進数%o,int,&i=70 とか入れると、iに7しか入ってくれなくて、0が次の10進数の処理に自動的に入っちゃうんだけど、なぜ?
829 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 11:01:09 ] 親から習う日本語が方言訛りで一部怪しかったりしても、使ってるうちに標準語の表現に気づいて修正できるものだよ。 もちろん最初から標準語で覚えられるような環境を探すのも手。 gcc方言とか、IA方言とか、VC方言とかウィンドウズ方言とかいくらでも環境依存の癖はある。
830 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 11:39:34 ] >>829 その直前の文字列の入力をコメントにしたらどうなる?
831 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 13:17:59 ] すいませんこのプログラムのどこがわるいかおしえてもらえないでしょうか うるう年の判定プログラムで #include<stdio.h> int main(void){ int n; n=1; printf("年数を入力してください"); scanf("%d",&n); if(n%400=0)printf("うるう年である"); else if(n%4=0&&n%100!=0)printf("うるう年である"); else printf("うるう年ではない"); return(0);} 左辺の値がないとかエラーがでるんですけど
832 名前:デフォルトの名無しさん [2006/07/14(金) 13:30:41 ] 初心者乙
833 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 13:44:21 ] >>831 ==だよ。 >>830 今度は、 8進数%o,int,&i=179 と3桁にすると、iに17が入って、9が次の10進数の処理に自動的に入ります。 なぜ?
834 名前:824 mailto:824をたのむ…… [2006/07/14(金) 17:19:31 ] >>833 scanf("%c",&i);の時、1000とか入力すると、%cの分の1をscanf("%c",&i);で取り込み、残りの000は次のscanf("%s",st); に勝手に入力されてしまう。 8進数だから、7、8、9なんかは入力できない。 すると179は17まで8進数と見なされ、残りの9は型が違うものと認識される。 17dとか入力しても同様。 型が違うものと認識されたものは、次のscanfに勝手に入力されてしまう。 標準入力ストリームがバッファリングの構造を取るから。 型が違うもの、と認識されたものは、一度バッファに戻ってから、次のscanfに入力されてしまう。 環境によっては、scanf("%d",i);のところで、a、とか入力すると、 型が違うものだからバッファに戻す→バッファからaがscanfに入力される というルーチンを延々と繰り返してしまう。 この繰り返しが起こらない環境ならば、型が違うものでも強制的な変換が行われ、scanfに取り込まれるということ。
835 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 18:40:08 ] >>834 どうもありがとう なるほどね・・・
836 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 21:29:18 ] >>824 while((n=fgetc(fp1))!=EOF){ fputc(n,fp2); m++; if(n=='\n'){ m=0; } else if(m==40){ fputc('\n',fp2); m=0; } } 入力ファイルがすべて 1文字==2バイトと決まっているならこれで良いけど wchar_tを使うか、文字コードの判定をするかしたほうが良いかも。
837 名前:824 mailto:sage [2006/07/14(金) 21:55:49 ] >>836 なるほど。
838 名前:デフォルトの名無しさん [2006/07/15(土) 08:47:40 ] パチンコのシミュレーターを作ろうと思ってるんですが、 確変をひいた場合にループをさせる時どのようにすればいいのでしょうか? for(;;){ switch(GetRandom(1,2)){ case 1:b++; case 2:break; } } 乱数で1だったらループ2だったらfor文を抜けたいとおもうのですが、 これだと止まってしまいます。何故でしょうか。
839 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 09:19:20 ] >>838 直接の原因は、break は一つ外側の構文に対してしか作用しないこと。 switch 内で break しても、その switch の外側に抜けるだけ。 それで結局、for を抜け出せなくて無限ループになっている。 ネストされた構文から任意の場所に制御を渡したい場合は goto を使うか、 関数を書いてそれを呼ぶしかない。 あと、その case の書き方はやめておけ。 switch はフォールスルーと言って、break を書いておかないとその後の case にある処理に突入してしまう。 for(;;){ switch(GetRandom(1,2)){ case 1: b++; break; case 2: goto end_for; } } end_for: ;
840 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 09:27:03 ] >>838 なんか初めの方の文章がよくわからねいけど そのbreakでは、switch文しか抜けられない。 for文を抜けたければ、goto文とかflagをつかえばいい。 ◆goto文の場合 for(;;){ switch(GetRandom(1,2)){ case 1:b++; case 2:goto FOR_EXIT; } } FOR_EXIT:; ◆flag int flag = 1 ; for(;flag;){ switch(GetRandom(1,2)){ case 1:b++; case 2:flag=0; break; } }
841 名前:840 mailto:sage [2006/07/15(土) 09:28:39 ] かぶった。しかも劣化している。。。839のいうとおりだ。
842 名前:デフォルトの名無しさん [2006/07/15(土) 09:33:50 ] >>839 ,840 ありがとうございます。 gotoが便利そうなんでそっちを使いたいとおもいます。 これでやっと先に進めそうです。 ありがとうございました。
843 名前:デフォルトの名無しさん [2006/07/15(土) 09:39:09 ] 1と2しか判定しないなら素直に for(;;){ if(GetRandom(1,2)==2) break b++; } も頭の隅っこに置いとくといいかも
844 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:24:29 ] 質問です〜 char st[10]="text"; char *p; p=st; すると、st[10]の先頭アドレスがpに入るって書いてあるんですけど、 printf("%p,%p",p,&p); pの値と&pの値が違うのはどうしてですか?
845 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:32:48 ] いくらpにstを代入しても、あくまでpはpという1つの変数だから。
846 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:44:26 ] あーなるほど。どうも〜
847 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 17:31:59 ] pと&pの違いは重要 と言ってみる
848 名前:デフォルトの名無しさん [2006/07/15(土) 22:31:54 ] 念のため聞いておきたいんですが、参考書を見るとコマンドプロンプトで表示させるだけっぽいですけど ちゃんと画像のついたソフトやゲームなんかも作れるんですよね?
849 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 23:51:47 ] >>848 できるけど、標準Cと言われるものの範囲では、画像を表示するなどと言ったことができず、 また、コマンドプロンプトで文字を入出力するのとは、桁違いに面倒だから、入門レベルでは扱わないというだけ。
850 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:37:48 ] 質問させてください。 自分はVB8アカデミック(=SE)を使っているのですが。 #include <stdio.h> int main(void){ printf("HELLO"); return 0; } のようなDOS窓で動作するようなコードは正常にコンパイルできるのですが、 #include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MessageBox(NULL, "Kitty on your lap","メッセージです。", MB_OK); return 0; }のようなウィンドウズアプリケーションをコンパイルしようとすると必ずエラーがでてしまいます。 ↑のコードは今思い出しながら書いたものなのでもしかすると間違っている箇所もあるかも しれませんが書籍を参考に10個ほどサンプルを丸写ししてコンパイルしても同じ結果だったので コードに問題はないと思います。 VB8を再インストールしてみたりもしたのですがまったく効果がなく、もしかして インストール後になにか他にもインストールしたり環境設定したりと別の作業が必要なのかとも思ったのですが・・・・ どなたか原因がわかる方がいらっしゃいましたら助言いただけないでしょうか。 BBSもプログラミングも初心者なもので失礼もあるかとは思いますがよろしくお願いします。長文ですみません^^;
851 名前:デフォルトの名無しさん [2006/07/16(日) 03:41:08 ] if(){}って()内が1なら{}が実行されるんですか? それとも0以外なら実行されるんですか?
852 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:50:05 ] 真なら実行され偽なら実行されない
853 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:50:16 ] >>850 書店に行って、自分に合う入門書を買ってくること。
854 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:51:47 ] >>851 ()内に=や<>なんかがない場合は ()の中に入る数字(変数でもいい)が0以外なら真と見なしループを続ける(=実行) 0以外なら偽と見なしループを抜け出します。
855 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:56:20 ] >>854 ありがとうございました >>853 入門書読んでるんですけど、そこがかいてなかったのです
856 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:59:06 ] ここは回答者の入門スレなのか? 堂々と間違った回答をされても困るんだが。
857 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 04:09:32 ] >>851 さんごめんなさい。。。 while文とごっちゃになってましたOrz 真ならループではなくただ実行されるだけでした 偽ならスルーします。 >>856 さんこれであってますでしょうか?
858 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:15:37 ] 1と2しか判定しないなら素直に for(; GetRandom(1, 2) != 2; b++) ;
859 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:49:25 ] そして結局 while(GetRandom(1, 2)!=2)b++;
860 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:58:25 ] >854 >0以外なら偽と見なし(略)
861 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 09:00:28 ] >>850 エラーメッセージを書け。 あと、CのコンパイルにVBは関係ないだろ。
862 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:04:57 ] あの〜 2進数表記する型ってないんですかね。 ライブラリさがしてるんですけど・・・
863 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:30:54 ] >>862 #include <stdio.h> /* 静的アサーション */ void SASSERT_(int(*p)[1]) { } #define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0) /* 2進1バイトリテラル */ #define BYTE2(x) \ (SASSERT(1 < sizeof (#x) && sizeof (#x) <= 9), /* 1〜8 文字に制限 */ \ SASSERT((0x##x & ~0x11111111) == 0), /* 余計なビットがあるとエラー */ \ (0x##x >> 0) & 0x01 | \ (0x##x >> 3) & 0x02 | \ (0x##x >> 6) & 0x04 | \ (0x##x >> 9) & 0x08 | \ (0x##x >> 12) & 0x10 | \ (0x##x >> 15) & 0x20 | \ (0x##x >> 18) & 0x40 | \ (0x##x >> 21) & 0x80) /* 2進2バイトリテラル */ #define WORD2(x1, x0) ((BYTE2(x1) << 8) | BYTE2(x0)) /* 2進4バイトリテラル */ #define DWORD2(x3, x2, x1, x0) ((WORD2(x3, x2) << 16) | WORD2(x1, x0)) int main() { printf("%X\n", BYTE2(01011011)); printf("%X\n", WORD2(11001011, 10000011)); printf("%X\n", DWORD2(01011011, 11001011, 10000011, 00000000)); }
864 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:31:52 ] 型…? もしかしてBASICの&Bみたいに2進でリテラル書きたいってこと??
865 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:56:36 ] >>863 ちゃいまんねん >>864 そうそう。型指定文字のこと。
866 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:42:03 ] ない
867 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:43:17 ] ないからこその代案が>863なわけだな。
868 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:44:15 ] 2進でリテラル書きたいだけなら、 >>863 で何か不都合でもあるんだろうか。 文法的な事を知りたかっただけなの?
869 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:46:04 ] >>863 の(0x##x >> 0) & 0x01ってどういういみですか? すいませんが説明していただけるとたすかります
870 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:48:24 ] やっぱいちいち計算しなきゃ駄目なのか・・・
871 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:50:36 ] 256通りのテーブル作って、テーブル引きしたほうが早くないか?
872 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:52:09 ] 0x##x は、0x と x(マクロの引数)をくっつけるもの。 例えば、BYTE2(01011011) なら 0x##x は 0x01011011 になる。 この時、結局 (0x##x >> 0) & 0x01 は (0x01011011 >> 0) & 0x01 になる。 つまり、0 ビット目を抜き出す操作に相当する。 (0x##x >> 3) & 0x02 は 4 ビット目を 1 ビット目に持ってきて、 それ以外のビットを消す。 (0x##x >> 6) & 0x04 は 8 ビット目を 2 ビット目に持ってきて(ry こうやって、0x01011011 を2進数 01011011 にしている。 これらの計算は静的に行われるので、 コンパイル時に全部計算が行われて、 単なる定数に置き換わる。 速度は気にする必要ない。
873 名前:862 mailto:sage [2006/07/16(日) 14:52:11 ] あ!そういうことか! どうもトンクス>>863-868
874 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:57:22 ] >>872 へー、それ知らんかった。勉強になった。
875 名前:850 mailto:sage [2006/07/16(日) 19:52:59 ] >>861 訂正。 ×自分はVB8アカデミック(=SE)を使っているのですが。 ○自分はVS8アカデミック(=SE)を使っているのですが。 エラーメッセージは850で書いたコードをコンパイルした場合、 (9) : error C2664: 'MessageBox' : 2 番目の引数を 'const char [18]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 というメッセージがでます。
876 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 20:05:10 ] >>875 _T("Kitty on your lap") _T("メッセージです。") とするか プロジェクトのプロパティ→構成プロパティ→全般→文字セット→マルチバイト文字セットを使用する に設定。 LPCTSTRはUnicodeを使うかマルチバイト文字を使うかでLPCWSTRかLPCSTRになる。 MessageBoxもMessageBoxWとMessageBoxAで切り替わる。 単にダブルクォーテーションで囲んだだけだとcharの配列 → LPCSTRに変換→引数の型不一致。 文字列リテラルを_T()で囲むとUnicodeの時には頭にLを付けてくれるからLPCWSTRにできる。
877 名前:デフォルトの名無しさん [2006/07/16(日) 20:37:58 ] 質問です。 これの間違いを教えて頂きたいッス! 文字列を入力させる。その中に”ABC”という部分文字列(連続)が含まれていれば「OK」、そうでなければ「NO!」と出力される。 #include<stdio.h> main() { char moji[256]; int n=0,flag=0; scanf("%s", &moji[n]); while(moji[n]!='\0'){ if(moji[n]=='O' && moji[n+1]=='U' && moji[n+2]=='P')flag=1;n++;} if(flag=1){printf("OK\n");} else printf("NO!\n"); }
878 名前:875 mailto:sage [2006/07/16(日) 20:48:57 ] >>876 詳しい説明ありがとうございますっ しかし知識がなさすぎて理解できませんでしたOrzすみませんホント 林○比古の本でも買って勉強してきます。 ありがとうございました。
879 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 20:50:04 ] scanf("%255s", moji); printf("%s\n", strstr(moji, "ABC") ? "OK" : "NO!");
880 名前:デフォルトの名無しさん [2006/07/16(日) 20:56:51 ] DirectXで全画面で動いてるゲームとかの画面上に自分のアプリのウィンドウ出したいんだけど できるの? できるなら何かヒントちょうだい
881 名前:デフォルトの名無しさん [2006/07/16(日) 20:56:56 ] >>879 いただきましたーーーー!! ありがとうございました☆
882 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 21:04:59 ] >>880 全画面ゲームの場合排他モードで動作してるかもしれないので無理かも
883 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 21:11:11 ] なんかネトゲのボットを作りたいらしき質問をあちこちでみるな
884 名前:デフォルトの名無しさん [2006/07/16(日) 23:49:46 ] >>882 そうなんだ。排他モードなんてものがあるのか。どうも。
885 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 04:07:28 ] >>880 そういう場合はd3dx9のラッパーを書いて Presentメソッドに細工して自分が描画したいものを割り込ませる
886 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 04:40:50 ] 必死にチートしようとしてるとか? 鯖側でプログラムやってる香具師はちゃんとチェック機能付けて排除する対策してると思うよ。
887 名前:デフォルトの名無しさん [2006/07/17(月) 05:50:48 ] >>885 へー、なんか凄いヒントもらっちゃった。ありがと >>886 ボットも面白いかもね。でも後ろで動かしとけばいいんじゃないの?分かんないけど いいヒント貰ったのであとはDXスレ見てくる
888 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:07:25 ] ポインタがわからない・・・ main(){ char *c; *str='c'; int *i; *i=1; printf("*c=%c\n",*c); printf("*i=%d\n",*i); } これの何がわるいんだか教えてちょんだい・・・
889 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:09:25 ] あ、間違えた *str='c';->*c='c';
890 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:10:51 ] ポインタは虚構
891 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:12:54 ] >>888 cもiも、まだどこも実体を指していないうちに*で間接参照しているから。
892 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:19:11 ] >>888 >これの何がわるいんだか教えてちょんだい・・・ あんたの頭。 ・エラーがでた。 →エラーメッセージを張れ。 ・想定したとおりの動作をしない。 →想定した動作と実際の動作を書け。 ・間違いを指摘された。 →指摘した人間に聞くか、どう指摘されたか書け。
893 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:26:12 ] >>890-891 これならいい? main(){ char *c; char ch; ch='c'; c=&ch; int *i; int in; in=1; i=∈ printf("*c=%c\n",*c); printf("*i=%d\n",*i); } でもこんな書き方してるソースなんて見たことないぜ。
894 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:32:40 ] >>893 そんな書き方する意味がないからな
895 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:33:36 ] >>893 お前入門者以下だからよそ池
896 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:44:42 ] (´・ω・`)ショボン
897 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:46:06 ] >>893 まず、なにをしたいのか日本語で説明してもらえまいか?
898 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:01:11 ] fish...
899 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:09:10 ] (´・ω・`)エサだったのか
900 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:10:07 ] >>897 俺が持ってる林晴比古著新C言語入門シニア編のポインタの初期化てところに ex1 int d; int *p=&d; ex2 char s[80]; char *p=s; ex3 char s[80]; char *p=&s[3]; ex4 char *p = "ABCDE"; ex5 char *p=(char *)malloc(100); って書いてあったけど、あれ*pって配列ABCDEなら文字A(p[0])が入るよな〜と思って、 char *c; *c='c'; ってやってみたら*cの値に'c'が入るのかなと思ってやってみたらできなかったので なぜだか聞いてみた。 でも int *i; *i=1; はちゃんと1って出てきたよ?char型とint型って違う動きするの?
901 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:14:56 ] >>900 > int *i; > *i=1; > はちゃんと1って出てきたよ?char型とint型って違う動きするの? たまたま動いてるだけ。実際はメモリを破壊してる。 あと char *c = (char *)malloc(100); は char *c; c = (char *)malloc(100); と同義で、*c = とは別
902 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:28:03 ] 他の参考書を見てみたら?
903 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:41:06 ] 親父の本はこれとこれのビギナー編しかない 発行見てみたら1992年だった 古すぎ?
904 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 12:11:37 ] >>903 古いか新しいかじゃなくて、肝心な事がちゃんと書いてあるかどうか。 >>900 の疑問に答えてくれる本、っていう基準で探すのもテだぞ。
905 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 12:30:42 ] 本屋いってくるか・・・雨だけど・・・
906 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 15:49:17 ] void make_fare_table(int num, double *dist_list, COSTUNIT *cost_list, int **fare_table) { ていう関数を書いたとき、 引数のint **fare_tableはmainでどーやって指定すればいいんですか? ちなみにfare_tableは2次元配列です。fare_table[30][30]って感じ。
907 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 16:06:42 ] void foo(int t[30][30]){ } main(){ int f[30][30] ; foo(f) ; } でいいんじゃない?
908 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 16:37:58 ] >>907 引数の型が指定されてるんですわ これ基本情報技術者試験の過去問なんだけど
909 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 16:52:32 ] >>908 int **fare_tableが二次元配列なんてありえない。 移し間違えじゃないのか。
910 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:00:03 ] 全部写すよ #include typedef struct { int max_dist; /* 上限距離(km) */ int unit_dist; /* 単位距離(km) */ int unit_cost; /* 単位距離ごとの運賃(円) */ } COSTUNIT; void make_fare_table(int, double *, COSTUNIT *, int **); int calc_fare(double, COSTUNIT *); void make_fare_table(int num, double *dist_list, COSTUNIT *cost_list, int **fare_table) { int idx0, idx1; double dist; for (idx0 = 0; idx0 < num; idx0++) { fare_table[idx0][idx0] = 0; dist = 0.0; for (idx1 = idx0 + 1; idx1 < num; idx1++) { dist += dist_list[idx1-1]; fare_table[idx0][idx1]=fare_table[idx1][idx0] =calc_fare(dist, cost_list); } } }
911 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:01:17 ] int calc_fare(double dist, COSTUNIT *cost_list) { int fare = 0, idx = 0; int lower_limit; /* 区間の下限(直前の区間の上限距離) */ int upper_limit; /* 区間の上限(現在の区間の上限距離) */ lower_limit = 0; upper_limit = cost_list[0].max_dist; while (upper_limit!=0 && dist > (double)upper_limit) { fare += ceil((double)(upper_limit-lower_limit) / (double)cost_list[idx].unit_dist) * cost_list[idx].unit_cost; lower_limit = upper_limit; upper_limit = cost_list[++idx].max_dist; } fare += ceil((dist - (double)lower_limit) / (double)cost_list[idx].unit_dist) * cost_list[idx].unit_cost; return fare; }
912 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:09:20 ] 試しに入れたメインはこれ main(){ COSTUNIT cost_list[4]; cost_list[0].max_dist=20; cost_list[0].unit_dist=5; cost_list[0].unit_cost=100; cost_list[1].max_dist=100; cost_list[1].unit_dist=10; cost_list[1].unit_cost=180; cost_list[2].max_dist=500; cost_list[2].unit_dist=50; cost_list[2].unit_cost=850; cost_list[3].max_dist=0; cost_list[3].unit_dist=100; cost_list[3].unit_cost=1650; double dist_list[10]={3.0,5.5,10.0,3.8,8.2,7.6}; int **fare_table[30][30]; make_fare_table(4,dist_list,cost_list,fare_table); }
913 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:14:32 ] >>910 写し間違いじゃないのなら、問題が間違ってる。
914 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:17:41 ] つか、俺試験受けたこと無いけど、まさか「誤りを探せ」という問題じゃ ないだろうな。
915 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:21:02 ] うそーん。マジ?
916 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:23:22 ] >>914 ちがうよ。ここみてよ ttp://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H17a2/pm10.html
917 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:33:29 ] >>916 問題が間違ってる。特にfare_table[m][n]のm != nだとありえない度うp。
918 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:33:34 ] for(i=0;i<30;i++)fare_table[i]=(int*)malloc(30*sizeof(int)); なヨカン
919 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:37:40 ] どうも・・・ でも普通間違ってる問題出すか!?仮にも国家試験だろう! 他の問題からベンキョします
920 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:49:23 ] >>918 fare_table[m][n]で、m != nダヨ。
921 名前:920 mailto:sage [2006/07/17(月) 17:51:32 ] いや、問題を読み違えてた。スマソ。 >>918 で正解な予感。 int *fare_table[30]で、実引数はfare_table。 動かしてないけど。
922 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 18:10:02 ] >>918 ,921 それで出てきました。アリガトン
923 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 18:32:06 ] 乗数演算子って無いの?
924 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 18:44:38 ] >>923 ない。 www.kouno.jp/home/c_faq/c14.html#7
925 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 18:45:01 ] fscanfで文字を読み込んだ場合、ファイル位置表示子は移動しますか?
926 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 19:50:26 ] >>925 「位置表示子」とはなんぞ? 読み出しオフセットが気になるならftell()でもして味噌。
927 名前:デフォルトの名無しさん [2006/07/17(月) 22:05:12 ] 問題1.キーボードから63以下の2つの整数を変数a,bに入力して、a+bの結果がアスキーコードの対応する文字・記号となって出力されるプログラムを作れ。 問題2キーボードから英字1つを入力し、その英字より2つ前の英字(または数字、記号)を出力するプログラムを作れ すみませんまったくの初心者です 宿題でまったくわかりません
928 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 22:05:56 ] >>927 C/C++の宿題を片付けます 66代目 pc8.2ch.net/test/read.cgi/tech/1151477344/l50
929 名前:デフォルトの名無しさん [2006/07/17(月) 23:17:58 ] すれ違いでしたか ありがとうございます。
930 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 11:26:53 ] typedef struct letter { char c; struct letter *follow; struct letter *other; char *trans; } LETTER; LETTER *p_root; void main(){ LETTER *p = p_root; って書いたら、 p には何が入ってるんですか?
931 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 11:30:31 ] >>930 *p_rootに入っていた内容。初期化してないから何が入ってるかわからない。
932 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 11:44:43 ] p_root->c='m'; p_root->follow->c='a'; p_root->other->c='n'; p_root->trans=NULL; だったら?
933 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 12:56:13 ] プログラムから別のプログラムを立ち上げる方法を教えてください。 ブラウザで例えるとmp3などのURLをクリックすると再生プレイヤーが立ち上がるような感じで、 そのmp3のURLを渡して起動させたいのですが よろしくお願いします。
934 名前:デフォルトの名無しさん [2006/07/18(火) 13:36:38 ] 野球チームがnチームあり,1日にm試合ずつ消化して,総当たり戦を行うものとする. 各チーム名はA, B, C,...Zのようにアルファベットの頭文字で表されるものとする. nは26以下,mは4以下とするとき,以下のような試合の日程表をつくりなさい. 全試合が終了するのに必要な日数と全試合数も表示すること. Number of Teams -> 4 Number of Games per Day -> 4 -------- Schedule ---------- Day 1 Game 1 : A vs B Game 2 : A vs C Game 3 : A vs D Game 4 : B vs C Day 2 Game 1 : B vs D Game 2 : C vs D --------------------------- Total Number of Days : 2 days Total Number of Games : 6 games --------------------------- 誰か作ってくれ・・・ わからん・・・
935 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 14:43:07 ] >>934 留年しろ。
936 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 15:01:43 ] >>932 pはポインタ。p_rootもポインタ。 その値は代入によって同じになっているはず。 つまり、p->c == p_root->c && p->follow->c == p_root->follow->c && p->other->c == p_root->other->c && p->trans == p_root->transということ。 >>933 環境依存でよければ、例えばWindowsならShellExecute()辺りが向いているかもしれない。 しかし、その程度のことも調べられないようなら手を出さない方が無難だとも思う。 >>934 宿題スレにでも逝ってみたら?
937 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 15:20:11 ] >>933 ありがとうございます。 これを足がかりにもう少し調べて見ます。
938 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 15:20:42 ] >>937 は>>936 あてです。すみません。
939 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 15:58:56 ] >>936 次にね while( p!=NULL ){ p=p->other; } って書いてあるんですよ。 このpって何を示してるの? pのメンバ全部のこと示してる? ちなみにこれも基本情報の過去問だけど… www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H18a2/pm10.html ↑ここ
940 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 17:17:26 ] >>939 LETTER型のオブジェクト
941 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 17:17:33 ] pは構造体先頭を指している。
942 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 18:03:43 ] p->cのことでええんかな? どうも〜
943 名前:デフォルトの名無しさん [2006/07/18(火) 18:17:53 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2392.txt Cでシェルを実装し、パイプラインをpipeシステムコールを使ってできる ようにしたいのですが、3つ以上のコマンドを繋ぐことができません。 どのようにすればよろしいでしょうか?
944 名前:936 mailto:sage [2006/07/18(火) 19:00:14 ] >>939 だからpはポインタなんだってばさ。ポイントしている先があるかないかのチェックをしているわけだね。 だから>942は間違い。>941もおかしいな、先頭のみを指しているわけではないのだから。 つーか、ポインタの勉強してきなさいよ。 >>943 コメントもろくにないソースをいきなり読まされる身になってくれ。 つーか、どこが入門レベルなんだか。
945 名前:943 mailto:sage [2006/07/18(火) 19:30:15 ] >>944 すいません、実行後に標準入力からコマンドを入力し、そのコマンドをgetcl関数で スペース毎にでargmv[0],argmv[1]...に格納し、exec_one_command関数で実行。 その中にパイプがあればパイプの処理をするという仕様です。 自分でやったところはexec_one_command内でgetclでできたコマンドからパイプを 見つけてそれをNULLに置き換え、パイプの数に応じてexecvpで実行していくという ところです。 なんとかして完成させたいのですが、ここじゃ不味いですか('A`) どこいけばいいでしょうか・・・
946 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 20:07:28 ] >>944 すいません どこでベンキョしてくればいいでしょう お勧めの本とかページとかあります?
947 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 20:08:56 ] void funcB() { return; } void funcA() { funcB(); printf(); } こういう場合ってprintf()って作動しますか?
948 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 20:11:12 ] するよ
949 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 23:20:14 ] >>947 funcA()を呼べばね。 >>946 書籍スレにでもどうぞ。 >>945 ここでもいいけど、みての通りここだとレスつかないねぇ。 pipeなんて非標準だし、環境依存OKスレかUnixプログラミングスレ辺りかね。
950 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 00:36:41 ] >>944 先頭指してなかったら、キャストもせずに、->演算子使えるわけないじゃん。
951 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 00:51:03 ] >>950 アホ?
952 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 01:02:50 ] p->otherはstruct letter* だから>>941 を間違いってのはアレだよな
953 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 07:50:03 ] for(;;)とwhile(1)はどっちがはやいんですかね?
954 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 08:03:07 ] >>953 大丈夫、お前よりもよっぽど賢いコンパイラにとって、それらはどちらも同じと解釈されるから気にするな。 #まぁ、前者を推奨するがな。
955 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 09:10:13 ] 大昔の頭の悪いコンパイラだと for(;;) の方が早いとか聞いた気もするが、 今のコンパイラならどっちでもいいな。
956 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 09:12:34 ] (;;)
957 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 09:52:47 ] (;o;)
958 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 10:03:37 ] (;A;)
959 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 10:14:25 ] ('A')
960 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 10:46:03 ] ("ω")
961 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 11:29:39 ] ( ; _ ; )
962 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 16:27:56 ] (T-T)
963 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 17:36:00 ] (:-D)
964 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 17:42:05 ] :-D~~
965 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 22:24:10 ] >>863 void SASSERT_(int(*p)[1]) { } #define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0) は、単に #define SASSERT(b) ((void)(int(*)[(b) ? 1 : -1])0) でいいことに今頃気づいた。
966 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 00:37:15 ] K&R本の1.5.2 文字のカウント のプログラムをちゃんと打って、シグウィンでコンパイルしても 実行したら全くカウントしてくれないのですが、 どうしてでしょうか?誰か教えて下さい。
967 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 02:24:54 ] >>966 そのプログラムを貼れ。
968 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 07:27:35 ] #include <stdio.h> /* 入力される文字をカウント;第1版 */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); }
969 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 08:29:16 ] 入力を終了しないからいつまで経っても表示されないだけに一票。
970 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 09:21:38 ] でもこっちはちゃんとできるんですよ。 #include <stdio.h> /* 入力された文字を複写;第2版 */ main() { int c; while((c = getchar()) != EOF) putchar(c); }
971 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 10:54:10 ] いやだから・・・。
972 名前:デフォルトの名無しさん [2006/07/21(金) 11:50:37 ] ST.c: 関数 `function2' 内: FLIST.c:75: 警告: 引数 2 個の `strcat' を渡しますにより、キャストなしで整数からポインタを作りました :wq! 上記の警告がでました。問題の75行目 strcatは以下です。 strcat(strLine,ctime( &buf.st_mtime ));/*警告箇所*/ st_mtimeはファイル情報を取得する処理【stat関数】のメンバでbufの変数定義は struct stat buf;、strLine変数はchar strLine[255];としております。 警告を回避するキャストの方法を教えてください。環境はLinux redhatです。
973 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 12:24:15 ] >>972 #include <time.h> してないってことはない?
974 名前:デフォルトの名無しさん [2006/07/21(金) 12:40:43 ] レスありがとうございました。インクルード記述はあります。 プラットホームをUnixからlinuxに移した際に リコンパイルで警告がでました。
975 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 13:04:56 ] >>974 その周辺ロジックだけのプログラム作っても再現する? こちらでは問題ないのだが。 以下、テストコード。 -- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> int main(int argc, char ** argv) { char strLine[255]; sprintf(strLine, "%s:", argv[1]); struct stat buf; stat(argv[1], & buf); strcat(strLine,ctime(&buf.st_mtime)); puts(strLine); return 0; }
976 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 13:32:38 ] >>968 それは何か入力後に EOF を渡す必要がある。 これは Cygwin だとどうなっているのか分からないが、 UNIX 系 OS だとデフォルトでは Ctrl+D でできるのが 普通だ。Windows のコマンドプロンプトや MS-DOS プロンプトでは Ctrl+Z だ。どちらかを入力してみれば できるんじゃないだろうか。
977 名前:968 mailto:sage [2006/07/21(金) 15:13:46 ] >>976 ありがとうございます。Ctrl+Zで出来ました。
978 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 15:18:18 ] 結局>969じゃん。
979 名前:968 mailto:sage [2006/07/21(金) 16:38:45 ] 間違えました。Ctrl+Dでした。 >>978 入力を終了しなくても出来そうだな、とか 馬鹿な考えを起こしていたもので...m(_ _)m
980 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 14:43:42 ] > 賢いコンパイラにとって、それらはどちらも同じと解釈されるから while(1) だと警告がでる for(;;) だとでない
981 名前:デフォルトの名無しさん [2006/07/23(日) 12:03:52 ] プロトタイプ宣言のない関数’printf'の呼び出し(関数main) という警告文が出るけどなに?
982 名前:デフォルトの名無しさん [2006/07/23(日) 12:07:13 ] >>981 #include <stdio.h>がないとか printfがpirntfになってたりとかじゃないかな?
983 名前:981 [2006/07/23(日) 12:10:28 ] >>982 その辺は確認しているのだけど そのへんが問題なのかな?
984 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 12:33:16 ] こういう場合、ソースを貼り付けたら一発で分かったりすることも多い。
985 名前:981 [2006/07/23(日) 12:46:51 ] #include <sudio.h> int main( ) { int n=500+ 150; printf("%d", n); return 0; } こんな感じなんだけど諸兄の 意見はいかがですかね?
986 名前:デフォルトの名無しさん [2006/07/23(日) 12:48:02 ] int a; char s[3] = "FF" ↓ a == 255 みたいなイメージで、文字データとして16進の形でcharの配列に入ってるものをint形の変数に代入する方法ってない?
987 名前:デフォルトの名無しさん [2006/07/23(日) 12:48:41 ] 1はツンデレ
988 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 12:52:46 ] >>985 1行目で既に破綻が
989 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 12:59:38 ] >>986 strtol
990 名前:981 [2006/07/23(日) 13:00:32 ] >>988 ありがと。いまきずいた(汗
991 名前:986 mailto:sage [2006/07/23(日) 13:04:15 ] >>989 さんくす、助かった
992 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 18:01:34 ] よくコンパイルまで行ったな。
993 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 10:40:46 ] おまいら日本語よりC言語のほうが意思疎通出来るんだな(w
994 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 10:55:00 ] 次スレは>>995 が立てるそうです。
995 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 18:38:56 ] 次スレはいらない。
996 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 09:49:42 ] 入らなかったら拡張しろ
997 名前:デフォルトの名無しさん [2006/07/25(火) 16:42:16 ] 1000
998 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 18:11:33 ] スマン…まさか携帯から立つとは思わなかったんだ… 次スレ C言語なら俺に聞け(入門篇) ぱぁと2〜 pc8.2ch.net/test/read.cgi/tech/1153818463/ スレタイについては反省していない
999 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 18:21:20 ] >>998 乙
1000 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 18:29:03 ] >>998 おまえというやつは・・・乙
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。