- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/
- 237 名前:デフォルトの名無しさん [2007/06/12(火) 01:12:37 ]
- #define STR_SIZE 157
char str1[STR_SIZE]; scanf("%文字数s",str1); printf("%d\n",(strlen(str1)) OS:XP C言語の質問なんですが scanfの文字数の部分に#defineで定義した記号定数名を入れると入力した文字数が1と表示されてしまいます しかし直接、数値を指定してやるとちゃんとした文字数が表示されます ここには記号定数名は使えないってことでしょうか? そうだとちょっと不便ですね 何か良い方法ありませんか?
- 238 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 01:22:31 ]
- >#define STR_SIZE 157
> >char str1[STR_SIZE]; なんだよ、その超中途半端なサイズはw
- 239 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 01:27:36 ]
- >>238
問題文(含コード&リンク): 長さ157以下の英数字,空白の並びからなる文字列を二つ入力し, それぞれをa1, a2とする. a1が"abc",a2が"ab"の場合のように, a2の先頭部分がa1の先頭部分に含まれるときは1を,そうでないときは0を値として 返す関数 int match(char *a1, char *a2);を作成しなさい. 配列宣言を除きすべてポインタを用いて処理すること. 文字列は157文字以下が入力されるものとし,文字列の長さに関するエラー処理を する必要はない. 計算の手順としては,文字列の先頭から一文字ずつ一致するかどうかを比較する. a2にあたる文字列中の比較対象となった文字が'\0'であれば,a2はa1に包含された ものとして扱う.これ以外で比較時に,一文字でも一致しない場合があれば 包含されていないとして扱う. この関数をもちいて,2つの文字列を与えたとき,一つ目の文字列の中に二つ目の 文字列が含まれている場合(この場合先頭が必ずしも一致していなくてもよいものとする) には "一致"をさもなければ"不一致"を出力するプログラムを作成しなさい.
- 240 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 02:54:09 ]
- 今、sizeofについて勉強しているんですが、
参考書通りに入力してもエラーになってしまいます。 皆様、どうかご助力願えないでしょうか? 開発環境はBorland C++ Compiler 5.5です。 #include <stdio.h> int main(void) { int a=1,b=0; printf("short int型のサイズは%dバイトです。\n", sizeof(short int)); printf("int型のサイズは%dバイトです。\n",sizeof(int)); printf("long int型のサイズは%dバイトです。\n",sizeof(long int)); printf("float型のサイズは%dバイトです。\n",sizeof(float)); printf("double型のサイズは%dバイトです。\n",sizeof(double)); printf("long double型のサイズは%dバイトです。\n", sizeof(long double)); printf("変数aのサイズは%dバイトです。\n",sizeof(a)); printf("式a+bのサイズは%dバイトです。\n",sizeof(a+b)); return 0; }
- 241 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:00:02 ]
- >>240
エラー内容も書けよ。
- 242 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:09:35 ]
- >>241
エラー内容も書いてくださいませ と言うように
- 243 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:29:58 ]
- 申し訳ありません。
エラー内容は、 警告 W8004 sample5.c 21: 'b' に代入した値は使われていない(関数 main ) 警告 W8004 sample5.c 21: 'a' に代入した値は使われていない(関数 main ) です。以後気をつけます。すみませんでした。
- 244 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:38:00 ]
- >>243
それは警告であってエラーではない。 int型のa,bに値を入れてるけど、その値を参照してないからコンパイラが 警告だしてるだけ。動作に問題は無い。
- 245 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:44:53 ]
- >>244さん、ありがとうございます。
確かに実行してみたら正常に動作しました! こんな時間に助けていただきありがとうございました!
- 246 名前:デフォルトの名無しさん [2007/06/12(火) 18:39:49 ]
- >>126>164
すみません、遅くなりました。ネットカフェでしかネットに繋げなかったので申し訳ありません。 回答ありがとうございます。 「何が」閉じるのが早いの? どうやって実行しているの? コンパイラです。ソースファイルをドラックして実行しているのですが、エラーなどの文がスラスラ流れるように出て すぐ閉じてしまうので、エラーなどの文が読めません。 仕方なく「pauseキー」を押して止めたりしてるのですが、これが至難の技で・・。 コンパイラをクリックして起動させても、同じくすぐに閉じてしまいます。できあがった実行ファイルも・・。 解決策があるようなので、少し安心したりしています。よろしければ教えて下さい。 上にも質問させて頂いたの事なんですが #include<stdio.h> #include<float.h> int main() { double what; what=3.14159265358979; printf("もう少し詳しい値は%20.18fです\n",what); return 0; } の結果は3.141592653589790007になるんだけど、最後の「7」はバグなんですか? なにぞとよろしくお願いします。(泣)
- 247 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 18:54:28 ]
- 丸め誤差
- 248 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 18:58:46 ]
- >>123の質問の次のレスは読んでないのか。
- 249 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 19:39:34 ]
- 自分はJavaをやろうとしたのですが、教本がちんぷんかんぷんだったので、
プログラミング言語の雰囲気だけ知っておこうと思い、Cの本を読み漁りました。 おかげでつまづいていた部分は何とか理解できたのですが、 ポインタの部分でつまづき、Cの理解を半ばにJavaに移行しようか、迷っています。 他言語に移る前提ならポインタ等C特有の概念の理解を飛ばしてもOKでしょうか? 後学のためになるなら喜んで労力を払いたいのですが、 なにぶんCを先達の方々のように使いこなせる自信がありません…
- 250 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 19:45:56 ]
- > ポインタ等C特有の概念
( ゚д゚)ポカーン
- 251 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 19:54:16 ]
- >>250
そうだな。ポインタなんて Pascal、PL/M、C++ にもあるもんな。 >>249 ここで訊くことじゃないと思うんだが。 まあ Java に戻ればいいんじゃね?
- 252 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:01:05 ]
- いきなり無知を晒してしまって恐縮ですorz
いっそう自信を無くしたのでCは諦めます(-_-;)
- 253 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:06:17 ]
- ポインタ演算を除けばJavaの参照みたいなもんだろ
- 254 名前:デフォルトの名無しさん [2007/06/12(火) 23:06:31 ]
- Visual C++2005 を使い始めました。
フォームにピクチャーボックス1つとボタンを2つ配置しました。 1つ目のボタン(開始)をクリックすると、 ピクチャーボックスにグラフのようなものを書くようなプログラム をつくりました。 ここまでは上手く動作しています。 次に、2つめのボタン(停止)で、 グラフの描写(For文で繰り返しているため時間がかかります) を途中で一時停止させたいのですが、 グラフをすべて書き終えるまで、ボタンが押せる状態になりません。 どのような方法を使えばいいのか教えてください。 よろしくお願いします。 分かりにくくてすみません。
- 255 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:17:07 ]
- C/C++の問題じゃない。
Win32ApiだかMFCだか.NETだか分からないがソッチのスレのが良いかと。 とりあえずWin32APIかMFCなら、デフォルトのWindowProcじゃなくて、 自分で回してるfor文中でイベントの取得と処理をやることになると思われ。
- 256 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:37:32 ]
- エスパーするとスッドレを使うべし
- 257 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:45:06 ]
- x68k環境用(ぶっちゃけいうとTI-89)でC++使うと
コンパイラがどんなに頑張ってもstd::cout << "Hello, World!" << std::endl; だけで5kbytesになるって本当ですか? ちなみにC(TIGCC)のprintf("Hello, World!\n")だと700bytes程でした
- 258 名前:254 mailto:sage [2007/06/12(火) 23:46:09 ]
- >>255
アドバイスありがとうございます。 ちなみに、プロジェクトの種類はCLR テンプレートはWindowsフォームアプリケーション を使っています。 スレを汚してしまい、すみませんでした。 >>256 ありがとうございます。 少し、スッドレの勉強をしてみます。
- 259 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 10:55:25 ]
- >>257
x68kて…w 誰も知らないだろ。 サイズがでかくなるのは最適化が弱いだけじゃね?
- 260 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:12:26 ]
- >>257
それは、全てスタティックリンクされているのか? printf()の実装だけで、軽く数十キロバイトにはなるはずだぞ。
- 261 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 13:14:50 ]
- リアルタイムで動くゲーム作ってます
マルチスレッドについて教えてください それ使うと全体の実行速度は速くなりますか? もし速くなるならたくさん使えば使うほど速くなりますか?
- 262 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 14:36:54 ]
- >>261
すでにCPU100%使ってるなら、さほど変わらないだろう 別にマルチスレッドにしたからって、CPUの限界を超えられる訳じゃない ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89
- 263 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:31:58 ]
- >>237
> scanfの文字数の部分に#defineで定義した記号定数名を入れ 具体的に、ソースコードの該当箇所をコピペして見せて。 (コピペだよ。打ち直したりしちゃダメだよ。) > 文字列は157文字以下が入力されるものとし それなら、 char str1[157] ; というのは間違い。 char str1[157+1] ; とすること。 文字列には、文字列の終わりを示すための特殊な文字'\0'が必要だから。 もしかしたら、一見正しく動いているように見えても、トンデモナイ大間違い。
- 264 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:33:26 ]
- >>243
エラーや警告のメッセージが出たら、ちゃんと読もうよ。 読まない人がほんとうに多い。 メッセージを読まないのは、パソコンのドシロウトだけにしてくれ。
- 265 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:36:39 ]
- え?
「メッセージを読まないのは、パソコンのドシロウトだけ」、だろ
- 266 名前:126 mailto:sage [2007/06/13(水) 15:55:26 ]
- >>246
どうやら察しの悪い人のようなので、諦めて、答えを書くよ。 単体のコンパイラやなどのCUIの実行ファイルを、 エクスプローラ上でダブルクリック(設定によってはクリックか)して実行すると、 プログラムが終了し次第、ウィンドウが閉じられてしまうのは、 Windowsの(エクスプローラの)仕様です。 コマンドプロンプトを開いて、 そこからコンパイラや、作ったプログラムを実行させればいい。 それでも、あっという間にスクロールして見えなくなるので、 コマンドプロンプトのウィンドウの左上のアイコンを右クリックして出てくるメニューから、 プロパティを開いて、タブのレイアウトで、画面バッファのサイズの高さを、数百くらいにするといい。 > 最後の「7」はバグなんですか? コンピュータで小数がどのように扱われるのか勉強しよう。
- 267 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:03:41 ]
- >>249
C言語のポインタくらいで、つまずくようでは、先が思いやられる。 世の中には、C言語のポインタで つまずく人が大勢いるが、 決して、C言語のポインタが難解なのではない。 その本が前提としている知識を持ち合わせていないため、本に書かれていることが理解不能 とか、 その本の説明が悪くて、著者本人か、すでに理解している人にしか、理解不能 いずれにしても、本のチョイスの問題です。 前提知識がないのであれば、それを学ぶために別の本を予め読むのも含めてね。 それから、本に書いてあることを読んだだけでは、はっきりとは理解できないこともあるので、 実際にプログラムを書いて、デバッガ上でステップ実行して確かめるのも大切なことです。
- 268 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:05:39 ]
- >>254
スレ違い。 ちなみに、 ボタンの押下に対するハンドラは、速やかに制御を返すべき。 時間のかかる処理を、そのコンテキストでやってはいけない。
- 269 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:09:24 ]
- >>257
本当かどうか、自分で試してみればいいじゃないか。 まぁたぶん本当だろうね。 C++のストリームのライブラリがスタティックリンクされれば、 mainにたった1行でも、かなりのサイズになる。 >>261 スレッドの話はスレ違い。 C/C++は基本的にスレッドの面倒を見ません。 マルチスレッド対応といっても、複数のスレッドからライブラリ関数を呼ぶことができるようになっているだけです。 だから、OSのスレッドの機能の勉強をしてください。
- 270 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:31:45 ]
- >>262,>>269
申し訳ない 出直してくる
- 271 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:03:47 ]
- みんなガンバレ!
言葉はキツいが諸先輩方は応援してるぞ。
- 272 名前:デフォルトの名無しさん [2007/06/14(木) 00:19:17 ]
- getchar();で入力された英字の他に改行コードも一緒にラインバッファに保存され
次の入力で改行コードが返されてしまう問題で、ラインバッファに保存されてる改行コードをクリアする方法 はありませんか? for(i=0;i<10;i++){ ch = getchar(); printf("%c\n",ch); ch = 改行コードをクリア } こんな感じで とりあえず今は下のような感じで対処してるのですが、他に方法があったらお願いします ちなみに入力関数はgetchar();のみしか使用できません for(i=0;i<10;i++){ ch = getchar(); printf("%c\n",ch); ch2 = getchar(); }
- 273 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:18:02 ]
- 無理
- 274 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:37:04 ]
- >>272
いまどき、CUIでインタラクティブなプログラムを作るのに慣れたところで、大して役に立たないと思うが・・・ 自分なら、とりあえず、こうする。 for(i=0;i<10;i++){ do { ch = getchar(); } while ((ch == '\r')||(ch == '\n')) ; printf("%c\n",ch); }
- 275 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 11:01:35 ]
- >>272 >>274
言わないと気づかないだろうたからあえて言うが、無駄な改行はやめてくれ。 見づらい。
- 276 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 11:42:36 ]
- >>275
改行にも意味があるのだが。
- 277 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 11:44:38 ]
- レスの改行? \n のこと?
- 278 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 14:48:21 ]
- レスの空行に決まってるだろ。
- 279 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 14:51:50 ]
- だったら意味無い気が。ソースの空行だべ
- 280 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 14:56:09 ]
- >>276 のいう「意味」とやらを訊こうか。
いや引っ張る程の話じゃないから、やっぱりいいや。
- 281 名前:274 mailto:sage [2007/06/14(木) 16:35:11 ]
- え、改行が多すぎる?
1行毎に改行を入れているつもりではないけど、結果的に、そうなっちゃってるねぇ。
- 282 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 16:39:45 ]
- 多すぎるよ。意味の区切れでもないのに空行なんか要らない。
- 283 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 17:35:12 ]
- こまけーw
- 284 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 22:29:39 ]
- >>274
個人的にはインデントが無い前提なら、このぐらいの空行のが見やすい。 まぁ人それぞれじゃね?
- 285 名前:デフォルトの名無しさん [2007/06/14(木) 23:15:35 ]
- TSearchRec Sr;
int Attributes = faAnyFile;//検索対象とするファイルの属性 if (FindFirst(CDirectoryOutline1->Directory+"\\*.mp3", Attributes, Sr) == 0) { do { if ((Sr.Attr & Attributes) == Sr.Attr) { ListBox1->Items->Add(Sr.Name); //Sr.Sizeでファイルのサイズを取得できる i=i+1; max=i; } }while (FindNext(Sr) == 0); FindClose(Sr); } 環境 Windows XPsp2 C++Buileder6.0 CDirectoryOutlineで選択したフォルダ内にあるmp3ファイルのファイル名をListboxに表示させたいと思っているのですが、 ファイルを選択→右クリック→プロパティ→全般タブ→詳細設定 の、 「内容を圧縮してディスク領域を節約する」 にチェックの入っているファイルが表示されません。 分かる方いましたら解決方など教えてくださいm(__)m
- 286 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:17:23 ]
- VC++.NET2003を使っています。
CPointをint型に入れたいのですがどのようにすればよいのでしょうか。 どうか、教えてください。
- 287 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:21:06 ]
- CPoint pt(10, 20);
int n = pt.x << 16 | (0xFFFF)pt.y;
- 288 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:21:25 ]
- 無理言うな
- 289 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:22:03 ]
- ちがった、こうやりたかった。
int n = pt.x << 16 | (0xFFFF & pt.y);
- 290 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:23:27 ]
- CPoint pt;
int x = pt.x; int y = pt.y;
- 291 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:27:13 ]
- >>287
>>288 >>289 >>290 ご返答、ありがとうございます。 あの、int x=みたいな初期値を設定するようなやり方じゃなければ 入れることが出来ないのでしょうか?
- 292 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:34:31 ]
- そんなことは無い。
単に変数宣言せずに書くのが嫌で、 2行に分けるのが面倒だっただけだと思うが。
- 293 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 00:33:24 ]
- >>292
そうでしたか。 ここまでのお付き合い、本当にありがとうございました。
- 294 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 01:01:20 ]
- 最近C++の勉強をはじめたのですが、どうもCのような設計になりがちで困ってます。
クラス内で作成する関数なんですけど、良く使うキー情報は関数にパラメータを増やして 渡すやり方はC++ではあまりしないんですかね? クラスのメンバ変数にすると便利そうなんですが、知らないうちにメンバ変数が どんどん増えていって、収拾がつかなくなることが多くついついパラメータ渡しに なってしまいます。いまのやり方はまずいですかね?
- 295 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 02:06:08 ]
- ・まずはどういう処理について述べているか、具体的に(例でもいいから)挙げてください
・クラス内で作成するって何を作成する関数なんですか? ・キー情報って何ですか?
- 296 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 03:17:47 ]
- >>285
まずは、デバッガ上でステップ実行しろ! このスレで何度も言っているが、 書いたプログラムが思い通りの結果を出さない場合、 たいていは注意深くステップ実行する(変数の内容もチェックする)ことで間違いに気がつく。 ということで、原因はわかるが、あえて、教えない。 他の人も教えるなよ!
- 297 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 03:25:29 ]
- >>294
> 良く使うキー情報は関数にパラメータを増やして渡すやり方 そういうのはCでも、やらないなぁ。 構造体のポインタを渡すよ。 もし、複数の関数で、同じ引数群を渡すのなら、 どうせスタックに同じものを積むのだから、構造体で値渡しするよ。 構造体を使うにしても、1つの構造体にフラットにメンバを並べるのではなく、 データどうしの関係に合わせて、構造体をネストする。 そういうのはCとC++で違いはないよ。
- 298 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 06:11:00 ]
- 入力された数値がマイナス数値だった場合それを自然数に変えるにはどうやるんですか?
- 299 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 06:32:40 ]
- 入力した数値を2に変える。3でも良いけど。
- 300 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 09:41:16 ]
- オレだったら4かな、、、って
abs()の事を聞いてるのか?
- 301 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 11:13:42 ]
- >>298
何をしたいのが不明瞭。 このスレで質問する人は、C/C++が云々という以前に、日本語が不自由すぎる。
- 302 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:10:46 ]
- わかるように書いて質問すれば、
より早く適切な答えを貰えるのにね。
- 303 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:13:26 ]
- 自分でも何をしたいのか分かってないんだろ。
この程度のレベルなら、人に説明できれば自ずから解決できる。
- 304 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:28:30 ]
- プログラミング云々という以前に、
問題を切り分ける気がないんだろう。 たとえば>>285みたいなのは、 問題を切り分けていけば、 おのずと原因がわかるのだが。
- 305 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:29:18 ]
- int a;
scanf("%d",&a); if(a < 0) a = 2; もしくは int a; scanf("%d",&a); while(a < 0) a++; ってこどだろ?
- 306 名前:298 mailto:sage [2007/06/15(金) 15:54:33 ]
- 5が入力されたら5
マイナス5を入力されても5として扱う方法を聞こうと思ったんですが、、 自分にレスしてくれたんじゃないかもしれないけど305をヒントにできました。
- 307 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:01:25 ]
- そういうのを絶対値と呼ぶんだってことは中学生でも知ってそうなもんだがな
- 308 名前:298 mailto:sage [2007/06/15(金) 16:03:48 ]
- 小学生ですが何か?
来年から中学ですけど
- 309 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:05:41 ]
- 入力した負の数に-1かけりゃいい話だがや
- 310 名前:298 mailto:sage [2007/06/15(金) 16:10:17 ]
- だから、もうわかったって言ってるだろ
しつこい馬鹿
- 311 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:11:54 ]
- しつこい馬鹿
- 312 名前:デフォルトの名無しさん [2007/06/15(金) 16:24:31 ]
- 変数を宣言して初期化する場合、普通は
int a,b,c; a=1; b=2; c=3; ってやるけどさ ↓こうした方がコンパイラも高速なコード生成できるし入力数も少なく見やすくてよくね? int a=1, b=2, c=3;
- 313 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:27:36 ]
- >>312
天才
- 314 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:42:21 ]
- >>305
intが32ビットや64ビットで、 負の最大値のような巨大な数字が入力されたら、 大変だぞ。 >>306 とりあえずC標準ランタイムライブラリのabs()を使ってみようよ。 >>308 高校生くらいまでは、 プログラミングよりも学校の勉強とかに時間を使ったほうがいいぞ。 プログラミングなんて大人になってからやっても遅くはないが、 子供のころに勉強することは、大人になってからでは遅いんだよ。 自分も小学生の頃からプログラム書いてたけど、 もっと数学や物理をよく勉強すれば良かったと後悔してるよ。 >>309 今は乗算のコストが加算と同じだけどさ、 普通は減算を使って if (a < 0) a = 0 - a ; とやるよね。 >>310 うわぁ。 プログラミングの勉強よりも、対人コミュニケーションの勉強しようよ。
- 315 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:49:25 ]
- >>312
コンパイラの最適化を有効にしていれば、 どっちでも同じコードが出力されると思うぞ。 ちなみに、 int a, b, c ; というように複数をまとめて宣言するのは、 int* p, q, r ; のようなトラブルを起す可能性があるので、良くない。 面倒でも、 int a = 1 ; int b = 2 ; int c = 3 ; としたほうがいい。
- 316 名前:デフォルトの名無しさん [2007/06/15(金) 19:17:02 ]
- >>126>>266
ありがとうございます。書くの遅くなりましたが解決できました。本の後ろの方に書いてありました。 回答ありがとうございました。 「7」についてなんですが、本には「0」って書いてあるんです。 でも実行ファイルにすると「7」と表示されるんでバグなのかな?って思って聞いてみました。
- 317 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 19:59:47 ]
- >>316
ライブラリの実装の違いかもしれない。 いずれにしても、 floatやdoubleは内部では二進数なので、 10進数との相互変換は100%完璧にはできない。
- 318 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:08:58 ]
- >if (a < 0) a = 0 - a ;
if (a < 0) a = -a;
- 319 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:19:18 ]
- マイナスを前に付ければ符号反転なんだけどさ、
算数的には、0から引いたほうが、わかりやすいっしょ。 いまどきのコンパイラは、両者で出力するコードが変りはしないし。
- 320 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:27:49 ]
- >算数的には、0から引いたほうが、わかりやすいっしょ。
??????
- 321 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:28:13 ]
- どっちでもいい
- 322 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:29:38 ]
- 算数的ではなく314的だろ
- 323 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 06:36:33 ]
- 314のマスターベーションだろ?
- 324 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:13:26 ]
- じゃ結論はこうってことで、 a * -1
- 325 名前:285 [2007/06/16(土) 17:18:08 ]
- do while 内のifを外したところ解決しました。
お騒がせしましたm(__)m
- 326 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:20:55 ]
- >>325
>>296の言うとおり、デバッガ使った?
- 327 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:23:13 ]
- >>325
一応聞いておくけど、なんでifを外せばいいのかは理解してるんだよね? というか、ifを外して良いのか? バグを修正すべきなんじゃないのか?w >if ((Sr.Attr & Attributes) == Sr.Attr) { この式、変じゃない? Attributesと&取ってて、その結果が Sr.Attrであるためには、 Sr.Attr == Attributesでなくてはならないのでは?
- 328 名前:デフォルトの名無しさん [2007/06/16(土) 17:27:51 ]
- while(gets(str);strcmp(str,"quit"); )
って書き方はありですか?
- 329 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:29:36 ]
- 間違えました
for(gets(str);strcmp(str,"quit"); ) でした for文しか使えなかった場合の話で
- 330 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:29:41 ]
- なしです。
こうしてください。 while(fgets(str, sizeof(str),stdin) && strcmp(str,"quit") )
- 331 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:31:29 ]
- for(fgets(str, sizeof(str), stdin); str&&strcmp(str,"quit");fgets(str, sizeof(str), stdin) )
- 332 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:32:55 ]
- ちがった、こうかな。
for(fgets(str, sizeof(str), stdin);EOF!=*str&&strcmp(str,"quit");fgets(str, sizeof(str), stdin) )
- 333 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:34:49 ]
- >>330
出来るだろうけど、fgetsは改行コードまで取るから、 "quit"に改行コード入れるか、strncmp使うか、 何かしないと狙い通りに動かんと思うよ
- 334 名前:296 mailto:sage [2007/06/16(土) 18:45:16 ]
- >>325
解決してよかったね。 ちなみに今回の質問の件とは違うが、まだバグが残ってる。 ディレクトリ名の末尾が.mp3の場合もファイルとして扱ってしまう。 int Attributes = faAnyFile ; ↓ int Attributes = faAnyFile ^ faDirectory ; にして、ディレクトリ名は取得しないようにしたほうがいい。 >>327 条件文自体は間違ってないよ。 (Sr.Attr & Attributes) == Sr.Attr というのは (Sr.Attr & ~Attributes) == 0 と同じことだからね。 適当にテストプログラムを書いてステップ実行して、 TSearchRec::Attrに渡される値をみてみなよ。 Borland氏ね!と叫びたくなること請け合いだよ。
- 335 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 19:00:59 ]
- >(Sr.Attr & Attributes) == Sr.Attr
>というのは >(Sr.Attr & ~Attributes) == 0 >と同じことだからね。 本当に? (Sr.Attr & Attributes) == Attributes ではなくて?
- 336 名前:296 mailto:sage [2007/06/16(土) 19:20:10 ]
- >>335
ごめん、間違ってた。その通りです。 だがしかし、 (Sr.Attr & Attributes) == Attributes や (Sr.Attr & Attributes) に直しても、問題は解決しないのよ。 VCLの定数faAnyFileは0x3Fで、 TSearchRec::Attrに返される値は 圧縮ファイルの場合には0x800がORされているから。 faAnyFileを-1に変更するか、 0x3Fを指定された場合にはVCLのリファレンスヘルプに書いてない隠しビットフラグ0x800を立てるのをやめるか、 どっちかにしてほしいぞ > Borland FindFirstがフィルタしてるんだから、自前でもう一度フィルタしようとするのが変といえば変なのだが。
- 337 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 19:38:56 ]
- いやあのね、それ、DOSの頃からのファイル属性の仕様だから(無属性が通常ファイルは)。
VCL上だけ変えたら、よけい混乱する人が続出するだけ。
|

|