1 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 09:10:30 ] エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.39【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1182740506/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
910 名前:886 [2007/08/05(日) 18:48:41 ] >>907 説明するのが難しいのでとりあえず論文中にあったInputのサンプルです。 1 2 3 1 0 1.6180339887 0 1.6180339887 1 1.6180339887 1 0 -1 0 1.6180339887 0 1.6180339887 -1 1.6180339887 -1 0 1 0 1.6180339887 0 1.6180339887 1 -1.6180339887 1 0 -1 0 -1.6180339887 0 -1.6180339887 -1 -1.6180339887 -1 0 上のようなInputを与えると、(実際どのような手順で与えるかは 試行錯誤しないとわからないのですが) new record length 18.5529 topology-describing vector 2 3 7 6 7 6 14 ......................... というOutputが出てくるはずです。 Inputは正20面体のすべての頂点の座標で、Outputはこれらすべての頂点を結ぶ木 (サイクルを作らないようなグラフ)の枝の総長を表わしています。
911 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:52:10 ] 最初の scanf("%c",&ch); でその適当に入力した文字が ch に入る。 そして2度目の scanf("%c",&ch); で改行が ch に入る。
912 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:55:22 ] >>907 一様(いちよう)じゃなくて一応(いちおう)ね 一様は「違い・むらが無い」って意味
913 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:56:46 ] なんかお子様多いな
914 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:58:18 ] お前が一番お子様なのにね
915 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:59:23 ] >>911 >最初の scanf("%c",&ch); でその適当に入力した文字が ch に入る。 >そして2度目の scanf("%c",&ch); で改行が ch に入る。 成る程です。 ちなみに、2度目の関数呼び出しの際、1度めに使われた変数の中身はクリアされないんでしょうか?
916 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:01:02 ] >>910 正20面体って正三角形が20個でしょ?
917 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:01:15 ] そもそも関数を抜けた時点で ch の中身は保証されなくなる。
918 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:20:14 ] >>911 >最初の scanf("%c",&ch); でその適当に入力した文字が ch に入る。 >そして2度目の scanf("%c",&ch); で改行が ch に入る。 すいません、何故勝手に改行が入力されるのでしょうか? その辺のFAQってどこかにありませんでしょうか? 勉強したいので。
919 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:22:51 ] 「y」と「改行」を入力したでしょう。別に勝手に入るわけじゃない。
920 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:27:57 ] >>918 scanfの仕様に則っただけだからキニスルナ
921 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:28:59 ] >>918 FAQだけで簡単に済まそうとしているのが間違い。 もっと基礎的なことからちゃんと勉強したら? 基本を知らずにFAQだけ読んでも、得られるものは少ないと思う。 > エラー E2379 steiner-code.c 39: ステートメントにセミコロン(;)がない(関数 buil dtree ) こんなエラーすらを自分で解決できないのでは、先に進みようが無い。
922 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:39:28 ] >>921 ごめんなさい、ごめんなさい あのー、基礎的なことってどんなことですか? 何が基礎的なことなのか分からないのです(>_<)
923 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:40:27 ] 基礎的なこと=何が基礎的なことなのか分からないこと
924 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:44:24 ] C言語を真面目に勉強しろってさ
925 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:46:27 ] HelloWorldは書いたかい?
926 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:47:19 ] a,b,cはint型です。 a=0;b=0;c=0;とするところを、a=b=c=0;としても同じでしょうか?
927 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:49:34 ] >>926 同じ、それくらい入門書でも読んでくれ。
928 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:55:48 ] a=b=c=0;この場合の代入の順序はどうなんですか? a=0,b=0,c=0 順番なのですか? それとも a=0,b=a,c=a
929 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:01:36 ] =(a, =(b, =(c,0) ) );
930 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:04:08 ] 優先順位表見てる? あれに右左も書いてあるべ
931 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:06:11 ] a = (b = (c = 0)); ということ
932 名前:926 mailto:sage [2007/08/05(日) 20:12:50 ] >>928 アフォか俺でも分かるわ
933 名前:928 mailto:sage [2007/08/05(日) 20:22:08 ] >>931 しつこくすみません、低能なもんで a = (b = (c = 0));は c=0,b=0,a=0 なのですか? それとも c=0,b=c,a=b つまりb = (c = 0)の処理の場合、b=0、b=cどちらが実行されるのでしょうか? >>930 優先順位表って何ですか
934 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:29:40 ] わざわざ1つの式にまとめて書いといて、順序もクソも無いもんだ。
935 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:32:08 ] >>933 試せよそんぐらい。
936 名前:928 mailto:sage [2007/08/05(日) 20:34:37 ] >>935 どうやってどちらが実行されてるか試すのですか?
937 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:40:12 ] > つまりb = (c = 0)の処理の場合、b=0、b=cどちらが実行されるのでしょうか? なにか違いが?
938 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:45:33 ] c=0の評価値は0だ
939 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:47:20 ] >>936 int a; char b; a = b = 12345; printf("%d %d", a, b);
940 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:47:35 ] a = (b = (c = 0)); cに0が代入される。 bに(c = 0)の式の値が代入される。この場合0なので0が代入される。 aに(b = (c = 0))の式の値が代入される。この場合0なので0が代入される。
941 名前:840 [2007/08/05(日) 22:23:56 ] 説明不足で申し訳ありません。 C/C++でstaticを使用する場合グローバルに変数の宣言が必要かと思いますが、 クラスの部品化の観点から、出来るだけグローバル変数の使用は避けたいと考えています。 で、記憶が曖昧なんですが、以前static_castなど(テンプレートを使用していたかもしれません)を使用して GoFのSingletonパターンを実現している記事を見かけましてこちらで質問させていただきました。 何か情報御座いましたらよろしくお願い申します。
942 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:29:35 ] >>941 グローバル変数は駄目でシングルトンならいいってのは、どういう理屈かね?
943 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:31:51 ] >>941 >C/C++でstaticを使用する場合グローバルに変数の宣言が必要かと思いますが、 いや…、必要ないよ class HOGE { public: static HOGE& get_instance(){ static HOGE hoge; return hoge; } private: HOGE(); };
944 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:42:19 ] >>877 libjingleではboostからshared_ptrだけとりだしてコピペしてる箇所があるって聞いたぞ。 そんなに面倒とも思わんけどなぁ
945 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:56:04 ] >>877 依存関係の調査自体は bcp 使えば要らない。結果の膨大さにびびるだろうけど。
946 名前:909 mailto:sage [2007/08/05(日) 23:23:53 ] >>919 >「y」と「改行」を入力したでしょう。別に勝手に入るわけじゃない。 え、でもscanfで1文字標準入力を取得した後、 returnでmain関数に戻って、もう一度ifでMesssage関数を呼び出してるから たとえ、改行文字があっても無視されるんじゃないんですか? それにこのプログラムが意図したと売りに動く場合の、 一度目にenterおしてifでMessage関数呼び出して、2度目のifでMesssage関数 を呼び出してyを入力した場合、 huga$ ./a.out question Push Enter> How do you do? y/n>y good の場合はHow do you do? y/nでyとenterを押しているのに なんで正確に動くんですか? もしかして標準入力の内容ってバッファみたいなところに貯められるんですか? >>921 自分は886では無いですよ。 少なくともコンパイルエラーを直してから、質問します。
947 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 23:27:12 ] >>941 例えstaticやグローバル変数を避けてシングルトンを実装したとしても、 目的を達成する手段が変わっただけで、本質的には何も変わっていない。 そう書いてから942の焼き直しだと気付いた。
948 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 23:28:01 ] >>946 >もしかして標準入力の内容ってバッファみたいなところに貯められるんですか? そのとおり。 標準入力に限らず入出力にはバッファを利用されることが多い。
949 名前:909 mailto:sage [2007/08/05(日) 23:42:42 ] >>948 へぇ、知らなかったです。 そんなこと、本には書いてなかったので。 イメージとしては 入力した文字がメモリのどっかに hogehugamoge みたいに保存されて、 そこからscanfの引数の変数の型の分(今回はchar型) コピーされるみたいな感じなんですかね?
950 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 23:58:44 ] そう。 正常に動くケースは、1文字目が改行で2文字目がyで3文字目が改行でしょ。 3文字目は読まれずにバッファに残ったままプログラムが終了するだけ。
951 名前:909 mailto:sage [2007/08/06(月) 00:11:27 ] ありがとうです。 んで、何文字バッファに保存されるかはOSの実装によると。
952 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:39:39 ] 普通の使い方なら充分なくらいのバッファはあるはず・・・ 10文字程度で満杯とかそんなことはまずない。
953 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:45:25 ] ストリーム入出力ってのは、バッファリングされる入出力のことだ。
954 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 03:34:18 ] すみません質問させてください。 txtファイルから、例えば40.123/42.591/43.569という文字列を読み込んで、 真中の42.591だけを数値として変数に格納したいのですが、 どうにも巧い方法が思いつきませんorz 何卒お力をお貸し頂けますようお願い致します。
955 名前:909 mailto:sage [2007/08/06(月) 03:35:24 ] / ̄ ̄ ̄ ̄\ / ( ( ( ) .) )\ / ( ( / ̄ ̄ ̄”\ .) ) / ( ( |. | ) ) ( ( ( | \ハ/ | ) ) ( ( ( | ゚ ̄ 〈 ゚ ̄ | ) ) ( ( ( | > | ) ) (. ( ( | /へ) / ) ) \_/|\ ー //\/ / ̄ ̄\ ゛ーー/ ̄ ̄\ ./ \ ̄ ̄ ”/ \ | ●|・| ||/ | | | ●|・| ||/ | | \_ ●|・| ||/ | .\ 》||つ【♪1076】___/
956 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 03:40:07 ] >>954 C なのか C++ なのか、まずはそれからだ。
957 名前:954 [2007/08/06(月) 03:41:45 ] ごめんなさい、Cでお願いします。 後、sage禁止だったのですね。重ね重ねすみませんorz
958 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 03:49:30 ] 自己判断で ~~~~~~~~~~~~ 寧ろage禁止
959 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 03:50:58 ] sage禁止とはなんという斬新なルールなのか
960 名前:954 mailto:sage [2007/08/06(月) 04:01:48 ] すみません、以後下げるようにしますorz
961 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 04:22:28 ] どっちでもいいよ。自分で判断しる。
962 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 04:28:03 ] >>957 いろいろ方法はある。 scanf 系関数を使うなら、 %*f のように書式に * を挟むことで 変数に格納しなくなるようにできるのを利用するとか。 あとは1行取得して、 それを strtok で "/" をデリミタにして処理した2番目の文字列を atof するとか。 strtok を使うのが気持ち悪いなら strchr を使ってもいいかもしんない。
963 名前:957 mailto:sage [2007/08/06(月) 04:48:30 ] 了解です、状況で判断しますorz >>962 ご解答頂きありがとうございます。 教えていただいた通り、今回はstrtokを使ってみたいと思います。 %*fという表記は知らなかったので勉強になりました。 本当にどうもありがとうございましたm(_ _)m また皆様のお力をお借りすることがあるかと思いますが、その時はどうぞよろしくお願い致します。
964 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 04:52:45 ] strtok()は癖が強すぎるのでお勧めしない。 scanf()でフォーマットを'%*f/%f/%*f"にしてはいけないのか?
965 名前:957 mailto:sage [2007/08/06(月) 05:55:20 ] >>964 strtok()は癖が強いのですか。 strtok()を使ったことが無かったので使ってみようかと思ったのですが、 そういうことであれば素直に%*fを使ってみたいと思います。 アドバイスありがとうございましたm(_ _)m
966 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 05:56:20 ] test
967 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 08:26:44 ] for(int i=0;i<n1;i++) { ←ここに飛びたい場合どうするのが一般的でしょうか? // 処理 ↑ for(int j=0;j<n2;j++) { ↑ if (a[j] == b) // 条件が成立したらループを抜けて↑ } //処理 }
968 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 08:35:09 ] >>967 つ[goto] まぁ、アルゴリズムを見直してbreakだな。
969 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 10:36:46 ] 中のループをboolを返す関数にしてしまって trueだったらcontinueとかね
970 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 12:31:43 ] void f() { static char *theTxt; strcpy(theTxt,"TEST¥n"); printf("%s",theTxt); } これってtheTxt;がstaticでnull初期化されているから 駄目なんですか?
971 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 12:38:10 ] >>970 theTxtはポインタ。 strcpyはポインタの指すアドレスにデータをコピーする関数。 問題は、theTxtがどこも指していないこと。 mallocで確保するとか、配列にするとか、データの領域をまず用意
972 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 12:39:01 ] どこも指してない、つーかNULLで初期化されてっからアドレス0を指してる、とも言えるか。 まあ同じだけど。
973 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 12:41:58 ] 理解出来ました。 有り難うございます
974 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 13:35:12 ] >>972 >アドレス0を指してる、とも言えるか。 いえない。 因みに、初期化されていないポインタは 「何処を指しているかわからない」
975 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 13:35:58 ] >>974 staticがついてると0に初期化される
976 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 13:36:57 ] static だから = 0 で初期化されている。 ただ、アドレス 0 だとは限らない。
977 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 13:40:29 ] もうヌルポインタが0じゃない話はいいから
978 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 13:57:16 ] >>977 「ぬるぽはどこも指していない話」じゃないのか?
979 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 14:04:28 ] NULLが0なんじゃない、0がNULLなんだよ。
980 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 15:01:18 ] ぬるぽ! ぬるぽ! ぬるぽ! ぬるぽ! ぬるぽ! ぬるぽ! ∩ ∩ ノ) ぬるぽ! ぬるぽ! 川 ∩ 川彡'三つ ぬるぽ! ぬるぽ! ⊂ミ∩、⊂ミ∩彡⊃ ぬるぽ! ぬるぽ! ⊂三ミ( ゚∀゚)彡三彡三⊃ ぬるぽ! ぬるぽ! ⊂彡川⊂彡川ミ⊃ ぬるぽ! ぬるぽ! ⊂彡川∪⊃ U川彡⊃ ぬるぽ! ぬるぽ! (ノ ∪ 川 ∪ミ) ぬるぽ! ぬるぽ! ∪ ぬるぽ! ぬるぽ! ぬるぽ! ぬるぽ! ぬるぽ! ぬるぽ! ぬるぽ!
981 名前:デフォルトの名無しさん [2007/08/06(月) 21:47:18 ] #define NULL ぬるぽ #define 0 NULL
982 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 22:40:13 ] fopenやifstreamがどういう処理をしているか気になります。 遠回しにAPIを呼んでたりするんですか?
983 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 22:47:34 ] そりゃシステムコール呼ばないとファイル開けまへんがな(´・ω・`) そこらのOS毎の差異を吸収するのも標準ライブラリの役目
984 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 22:48:24 ] そう。 遠まわしに、WindowsならCreateFileとかのAPIを呼んでる。
985 名前:デフォルトの名無しさん [2007/08/06(月) 22:51:22 ] まー結局、細部まで一致しないからWINDOWS API使うのが賢い かなり単純なものでないとCのみでしょり出来ないからな
986 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 22:53:31 ] ×>>972 ,>>974 ○>>976 C言語の仕様によれば、staticな変数は『定数ゼロ』(K&R第2版)で初期化される。 だから static char *theTxt; は、 static char *theTxt = 0; と置き換える。 ここで、定数ゼロは整数型に代入されれば整数0であり、ポインタに代入されればヌルポインタになる。 ヌルポインタは、(アドレス0を指す処理系もあるかもしれないが、) 『どこも指していないポインタ』が正解。実際のbit列がゼロの連続とも限らない。 従って、ヌルポインタはprintf()の引数として処理できない。 ちなみに、『ぬるぽ』はNullPointerExceptionの略で、ヌルポインタではない。
987 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 22:54:54 ] BCCで書いているのですが、突然ファイルオープンができなくなりました。 #include<stdio.h> main(void){ int i,j,k,t; int No1,No2; int Rs[3500][20],Hn[3500]={0}; double u,x,y; double Odds[3500][20],Poll[3500][20],Poll_S[3500][20],Poll_T[3500][20]; FILE *fpr,*fpw; fpr=fopen("horse.txt","r"); fpw=fopen("r.txt","w"); while(fscanf(fpr,"%d %d %lf %d",&No1,&No2,&u,&k)!=EOF){ Odds[No1][No2-1]=u; Rs[No1][No2-1]=k; Poll[No1][No2-1]=0.788/(u-1.0); Hn[No1]++; Poll_T[No1][No2]=0; Poll_S[No1][No2]=0; } 何か問題はありますか?教えてください。
988 名前:gotoです mailto:sage [2007/08/06(月) 22:55:51 ] たまには私を思い出してください。 ほら、try-catch句がなかったあの頃を思い出してください・・・
989 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 22:58:45 ] >>987 釣り?
990 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:02:37 ] マジです
991 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:03:22 ] >>987 とりあえずmainの'{'に対応する'}'と、fcloseが足りない。
992 名前:987 mailto:sage [2007/08/06(月) 23:07:22 ] すみません。 ソースが長いので省略しています。 コンパイルエラーはないんですが テキストファイルが読み込めないんです。
993 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:09:38 ] >>993 実行方法は? まさか、カレントディレクトリにファイルがないって落ちじゃないよな?
994 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:10:31 ] horse.txtが無いんじゃね?
995 名前:デフォルトの名無しさん [2007/08/06(月) 23:11:32 ] errno調べてみ
996 名前:987 mailto:sage [2007/08/06(月) 23:16:06 ] horse.txtはあります。 今まで動いていたプログラムもファイルが開かなくなりました。 ライトファイルはできます。
997 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:18:07 ] どっか別のアプリケーションがファイルを開いてるんじゃない? アプリケーションを全部終了するか、最悪OS再起動したら直るんじゃないかね。
998 名前:987 mailto:sage [2007/08/06(月) 23:19:45 ] と思って再起動したんですが直りませんでした。
999 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:22:17 ] errno !!!
1000 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:49 ] 次スレ!!! pc11.2ch.net/test/read.cgi/tech/1186410368/
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。