【初心者歓迎】C/C++室 Ver.34【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/01/17(水) 22:16:00ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.33【環境依存OK】
http://pc10.2ch.net/test/read.cgi/tech/1164376287/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0232デフォルトの名無しさん
2007/01/26(金) 15:49:12キー入力する部分の inp() が君の使っているコンパイラには無い。
他の1文字入力を待つ標準関数を探そう。
# 最後に押されたASCIIコードが port 60h のリードで得られるって OS&PC は何なんだろ?
0233デフォルトの名無しさん
2007/01/26(金) 16:00:26HELPが見つかりませんとでます。MFCでもダイアログ以外を選択するとでません。
またMFCでなくWindowsフォームアプリケーションにしても出ません。
これは仕様なのでしょうかね?HELPを作成せずにメッセージを出さなくする方法
はありますか?こちらのスレの方が適切だと後で思ったのでこちらにも書いてみ
ました。マルチポストすみません。
0234デフォルトの名無しさん
2007/01/26(金) 16:01:39簡単なゲーム作成で、藤川ソフトウェア工房で
「C言語のget系の標準関数を使うのは問題外です。2つ以上のキーを同時に認識できないからです。」
「キーボードのデータはI/Oポートのアドレス60hから取得できます。
C言語でI/Oポートのアドレス60hを読むには、conio.hをインクルードしておいて」
ハードウェア割り込みというこでできると書いてありましたが環境が違うので、無理っぽいですが
もう少し調べてみます。有り難うございました。
0235227
2007/01/26(金) 16:05:43>元々の機能ってフックかなんか? それだと DLL 以外は不可能だぞ。
その通りフックです。そうなんですか〜、既存のアプリがランタイム要るので自分で作ろうとしたのにorz
どうもありがとうございました。
0236デフォルトの名無しさん
2007/01/26(金) 16:20:41サイト見つけた。
ttp://www14.big.or.jp/~amiami/fsk/old/stg/stg2.html
AT互換機で DOS/Win9x限定(ポート直たたきするから)
+ コンパイラはWatcomC という縛りの元で Webの内容を構成してるぞ。
環境あわすか、他のページを参考にしたほうが良いんじゃねーかな?
0237デフォルトの名無しさん
2007/01/26(金) 16:33:20そうでした。コンパイラが違うから使えない・・・
あらためて、互換性の高い壁を感じました。(>_<)
コンパイラ変更も含め検討します。
どうもでした!
0238デフォルトの名無しさん
2007/01/26(金) 16:35:01Win32API使えばいいじゃん
0239デフォルトの名無しさん
2007/01/26(金) 16:52:46まじっすか!get系を使っていて同時押しできなくて、どうしようかと悩んでいました。
(真剣にコンパイラ変更を考えていた)コマンドプロンプト用のゲーム。
色や位置設定などでコンソールAPIを使っていました!Win32APIもためしてみます!
有り難うございます。m(_ _)m
0240デフォルトの名無しさん
2007/01/26(金) 17:01:49コンパイラ変更だけじゃなくて、動作OSも変えないと意味ないぞ。 (XP じゃ port 60 のリードできない)
素直に WinAPIを使う=Windows のプログラミングするべし
0241デフォルトの名無しさん
2007/01/26(金) 17:06:21> 私のOSはXP
お前、XP で動いてるんか。
0242デフォルトの名無しさん
2007/01/26(金) 17:09:150244227
2007/01/26(金) 18:35:36既存のアプリが実行ファイルとランタイムの構成で、
それを1つにまとめたくて同じ機能の物はランタイム不要で作れたんですけど、
フックした方がもっと便利なものが作れると思ったら、
DLLとEXEの複数ファイルが必要だったって状態です。
0245デフォルトの名無しさん
2007/01/27(土) 15:28:33何故「一つのファイル」に拘るの?
0246デフォルトの名無しさん
2007/01/27(土) 15:30:350247デフォルトの名無しさん
2007/01/27(土) 16:34:36int size = 128;
int n = size >> 1;
という記述があったんですが">>"はどういう意味なんですか?
0248デフォルトの名無しさん
2007/01/27(土) 16:38:560249デフォルトの名無しさん
2007/01/27(土) 16:39:260250デフォルトの名無しさん
2007/01/27(土) 18:13:52先生に
「どうして”int size = 64;”にしなかったのですか?」
って聞いたら教えてあげる
0251デフォルトの名無しさん
2007/01/27(土) 18:18:34いかがなものでしょうか先生、
ぐらい言うと良い
0252デフォルトの名無しさん
2007/01/27(土) 18:19:550253デフォルトの名無しさん
2007/01/27(土) 19:09:130254デフォルトの名無しさん
2007/01/27(土) 19:10:190255デフォルトの名無しさん
2007/01/27(土) 19:45:080256デフォルトの名無しさん
2007/01/27(土) 23:09:45#include <iostream>
int main()
{
std::cout << "Hello!" << std::endl;
}
ていうのを書いてあるとおりにしたらエラーなんですけど何が違うのでしょうか?
ちなみにエラー文はこちらです。
エラー E2209 hello.cpp 1:インクルードファイル'iostream'をオープンできない
エラー E2290 hello.cpp 7:型限定子'std'がクラス名または名前空間ではない(関数
main())
エラー E2379 hello.cpp 7:ステートメントにセミコロン(;)がない(関数 main())
0257デフォルトの名無しさん
2007/01/27(土) 23:13:33環境書けボケ
0258デフォルトの名無しさん
2007/01/27(土) 23:15:06BCCならbcc32.cfgとilink32.cfgの中身晒せ
それとBCC32.EXEのあるフルパスと
0259デフォルトの名無しさん
2007/01/27(土) 23:31:44中身の見方とは?
素人なのですいません(汗)
0260デフォルトの名無しさん
2007/01/27(土) 23:37:390261デフォルトの名無しさん
2007/01/27(土) 23:37:44OSと使っているコンパイラとコンパイラのある場所のフルパス書け
それが環境だ
0262デフォルトの名無しさん
2007/01/27(土) 23:38:26PC初心者板行け
0263デフォルトの名無しさん
2007/01/27(土) 23:40:34┐(´ー`)┌
0264デフォルトの名無しさん
2007/01/27(土) 23:41:46Intel Pentium CPUおよび互換性のあるCPU(推奨Pentium/166MHz以上)
Windows 2000、Windows 95,98,NT 4.0(SP3以降)
32MB以上のメモリ(推奨64MB以上)
50MB以上のハードディスク
以上です。
0265デフォルトの名無しさん
2007/01/27(土) 23:43:50間違い
0266デフォルトの名無しさん
2007/01/27(土) 23:48:50この板でこれ関連の質問が何度あったことか・・・
0267デフォルトの名無しさん
2007/01/27(土) 23:57:51プログラミングする人ならそれくらい出来てあたりまえだろうと
ボーランドの中の人が思ってたんだろう。
0268デフォルトの名無しさん
2007/01/28(日) 01:01:550269デフォルトの名無しさん
2007/01/28(日) 02:15:530270デフォルトの名無しさん
2007/01/28(日) 06:25:20下位互換のために残っているんじゃないかな?
0271デフォルトの名無しさん
2007/01/28(日) 10:03:24VC++2003では既に無くなってる。
0272デフォルトの名無しさん
2007/01/28(日) 10:23:45それはそのソフトが要求する性能。
こっちが知りたいのは、とりあえずお前が実際に使っているOSとそのバージョン、そして使っているコンパイラ。
>>269
ANSI/ISOの規格ではC++98の当初から削除されていると思う。
0273デフォルトの名無しさん
2007/01/28(日) 12:02:42↓こんなことしてみたんですけど、なにがなんだか。
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
string str = "ABC";
cout << str.c_str() << "\n";
cout << str.data() << "\n";
for ( int i = 0 ; (str.c_str())[i] != '\0' ; i++ )
{
cout << (str.c_str())[i] << "\n";
}
for ( int i = 0 ; (str.data())[i] != '\0' ; i++ )
{
cout << (str.data())[i] << "\n";
}
}
0274デフォルトの名無しさん
2007/01/28(日) 12:14:34ゼロ終端が保証されてるかどうかの違い。
0275デフォルトの名無しさん
2007/01/28(日) 12:15:55data() はつけてくれる保証がない
0276デフォルトの名無しさん
2007/01/28(日) 12:21:13環境も書くべし
c_str()の場合 A B C \0
data()の場合 A B C
0277デフォルトの名無しさん
2007/01/28(日) 12:28:16ttp://www11.ocn.ne.jp/~ikalu/cplus/5001.html
↑このページの
// 「string」と「vector」を使用して、実行ファイルにドラッグアンドドロップ
// されたファイルのパスを分割する
//
// : stringクラスに対して << をオーバーロードするバージョン(サイズ: 56.0 KB)
を使いたいんですけど、コンパイルすると
path.push_back(string(&s[start], s.end())); の所で
error C2665: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string' : 13 オーバーロードのどれも、すべての引数の型を変換できませんでした
になります。どう直せばコンパイルが通るでしょうか?
環境はVC2005,WinXPです。
0278デフォルトの名無しさん
2007/01/28(日) 12:30:40ありがとうございます。
'\0'を入れるかどうかは、環境によるんですね。
結果のみの出力でみにくいですが、
↓のようになりました。(この環境は、dataでも'\0'が入っているということですよね?)
ABC
ABC
A
B
C
A
B
C
>環境も書くべし
はい。気をつけます。Visual Studio C++ 2005です。
0279デフォルトの名無しさん
2007/01/28(日) 12:39:44たまたま使ってない部分に\0が入っていたか、VC++がそういう実装をしてるかのどっちか。
0280デフォルトの名無しさん
2007/01/28(日) 12:45:490281デフォルトの名無しさん
2007/01/28(日) 13:00:35string str = "ABC" の場合だと '\0' は環境に関係なく入るんじゃないの?
0282デフォルトの名無しさん
2007/01/28(日) 13:05:280284デフォルトの名無しさん
2007/01/28(日) 13:34:42『さて,このにstr()というメンバ関数とほとんど同じ動作をする関数で,
data()というメンバンバ関数があります.このdata()も,コールす
ると文字列へのポインタが返ってきます.そういう点ではc_str()とまっ
たく同じ動作なのです.ではどこが違うのかというと,文字列が設定されていな
いときの挙動です. c_str()は,インスタンスに文字列が設定されてい
ないときには,内部であらかじめ用意されている空文字列(つまり.先頭が冒の
文字列)へのポインタが返ります.それに対してdataOメンバ関数は,NU
LT.ポインタが返るのです.この違いがわかりますか?文穿刺が設定されてい
ないstrir咀クラスインスタンスの内存をp1血Oで出力しようとした際に
,c_str()でポインタを取得すると,空文字列へのポインタが返るので,
画面には単なる改行が出力されます.それに対して,data()でポインタを
取得しようとすると,NULLポインタが返るので,puts()で,それを出
力しようとするとランタイムエラーになります.』
らしいです。
そこで、
// string str = "ABC";
string str1;
string str2;
puts(str1.c_str());
puts(str2.data());
としました。
しかし、いずれも改行が出力されます。
この2種類のメンバ関数の違いを確認する場合どうしたらいいでしょうか?
0285デフォルトの名無しさん
2007/01/28(日) 13:40:58> data()というメンバンバ関数
ワロタ
0286デフォルトの名無しさん
2007/01/28(日) 13:42:230287デフォルトの名無しさん
2007/01/28(日) 13:43:05printf("%p\n", str1.c_str());
printf("%p\n", str2.data());
0288デフォルトの名無しさん
2007/01/28(日) 13:44:090289デフォルトの名無しさん
2007/01/28(日) 13:51:02その奇怪な引用はどこから来たんだ?
0290デフォルトの名無しさん
2007/01/28(日) 13:56:080291デフォルトの名無しさん
2007/01/28(日) 14:58:26あえて違わせておく理由が考えにくい。
0292デフォルトの名無しさん
2007/01/28(日) 15:08:37規格にどう書いているかで解決。
規格書持ってるひとよろ。
0294デフォルトの名無しさん
2007/01/28(日) 15:42:050296デフォルトの名無しさん
2007/01/28(日) 15:54:070297デフォルトの名無しさん
2007/01/28(日) 16:41:03printf("%.*s", str.size(), str.data());
とすれば、ナル文字で終端していなくても問題が出ない。
0298デフォルトの名無しさん
2007/01/28(日) 16:54:06>21.3.6 basic_string string operations
>const charT* data() const;
>3 Returns: (略) If size() is zero, the member returns a nonnull pointer
>that is copyable and can have zero added to it.
0299デフォルトの名無しさん
2007/01/28(日) 17:57:11ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3534.zip
水流と勾配から水深を逐次計算法によって出力するプログラムを作っています。
川は限界水深の地点を境に上流側が上流で動水勾配は1/1000、下流は射流で動水勾配は1/250です
流量2210 川幅200 粗度係数0.02 限界水深2.3175として、適当な値をh2以下に当てはめて計算するのですが
常流では適当な値を入れても悪くても20~30回のループで計算が終了するのですが
射流では1000回超えてもループが止まらない場合が多々あります
計算式としては常流analise.cの
hi = D1->H + D1->Z + term1(D1,D2) + term2(D1,D2,dx) - D2->Z;
ここの部分が
hi = D1->H + D1->Z + term1(D1,D2) - term2(D1,D2,dx) - D2->Z;
に変わるだけなのですが、どう修正すればいいでしょうか?
0300デフォルトの名無しさん
2007/01/28(日) 18:07:53ロジックを追ってないのでぱっと見で気付いた点のみ。
・2乗にpow()を使うのは流石に勿体無い。乗算にした方がよさそう。
・analise(なんてスペリングだ)で再帰しているが、ループで書き直すべき。
#もしかしたら再帰でスタックを消費している所為で巧く動かないのかも知れない。
・当然、ループ回数をグローバルで持つ必要はない。
#グローバル変数は諸悪の根源と知るべし。
・後の編集ミスを防止するためにも、OneLinerでないならブロック化したほうがいい。
#analise()内のelse節はその典型。
0301299
2007/01/28(日) 18:09:39各analise.cも古いものだったので上げなおしました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3534.zip
よろしくお願いします。
0302デフォルトの名無しさん
2007/01/28(日) 18:11:23リロードして確認してから書き込め。
0304300
2007/01/28(日) 18:16:06・tempに絶対値を入れるなら、fabs()を使え。
#>double temp;/*誤差を格納*/
#こんなコメントつけるくらいならdouble gosa;とでもした方がよっぽど理解しやすい。
0305デフォルトの名無しさん
2007/01/28(日) 18:40:30X3014の画像PDFなら誰でもタダで見れるぞ。
0306デフォルトの名無しさん
2007/01/28(日) 19:04:26英語版の最新ドラフトもタダで見れるぞ。
0307299
2007/01/28(日) 20:17:08指摘してもらった部分を修正しました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3537.c
これで下流方向10mの値で
流量2210 川幅200 粗度係数0.02 h1の高さ 2.3175 h1の高さ 0
h2の水深 (任意の予想値) h2の高さ -0.04 距離の差 10
とするとループが止まらなくなるか限界水深より大きい値になってしまいます
hiを求める式の第三項を+にしただけの常流の場合ではちゃんと出るのですが…
0308300
2007/01/28(日) 20:36:11そう言われても式の意味も判らなければ何を求めようとしているのかも判らないから無理w
#動水勾配なんて言葉初めて見たし、限界水深ってのがどういう意味を持つのやら。
##あ、いきなり解説しないでね。どうせ理解する気も暇もないから。
0309デフォルトの名無しさん
2007/01/28(日) 20:37:410310デフォルトの名無しさん
2007/01/28(日) 20:52:16と思ったが>>308と同じ印象を受けたので2分と持たずに挫折した
0311299
2007/01/28(日) 20:55:34>>308-310
分かりました、そちらに移行させて頂きます。
ご協力ありがとうございました。
0312デフォルトの名無しさん
2007/01/28(日) 20:57:09良く理解してないんで確認させてください
VCとBCCはWIN APIのラッパーがあるって記述をWikiで見ました
MinGWもGCC用のラッパーであると思っていいんでしょうか?
0313デフォルトの名無しさん
2007/01/28(日) 23:18:26VCにはMFCがあり、BCCにはVCLがあった。
それはWin32APIをラップして利用者にとって都合のよい方向へ持っていったということ。
MINGWはGCCのラッパーではなくてランタイムライブラリだと思う。
MINGW自体はたしかLinuxの概念をもったなんだっけ。。。
まーそんな感じだったはずなので、ラッパーというよりはエミュレータとかそっちだと思う。
Windows開発にはMinGWでもWin32Apiを使うはずだとおもうけど。
0314デフォルトの名無しさん
2007/01/28(日) 23:20:34> 気も暇も
こういうときはね、頭っていっとくのが一番かっこいいんだよw
0315デフォルトの名無しさん
2007/01/28(日) 23:22:27土木・建築は土質力学・構造力学・水理が重要な三本柱ですよ。
0316デフォルトの名無しさん
2007/01/29(月) 00:23:390317デフォルトの名無しさん
2007/01/29(月) 00:34:440318デフォルトの名無しさん
2007/01/29(月) 02:23:13FALSEだった場合の処理を後に続けたいです。
環境:WindowsXP・VC2005
よろしくお願いします。
0319318
2007/01/29(月) 03:09:28眠いので今日は寝ます、おやすみなさい。
0320300
2007/01/29(月) 06:36:52大丈夫、私の専門では存分に使ってるから。
>>315
なるほど、業界丸ごと縁がないんで知りませんでしたよ。
>>316
私には、そんな無意味なレスしかできない>316が恥ずかしい。
>>317
自己紹介乙。
0321デフォルトの名無しさん
2007/01/29(月) 08:17:12308といい、馬鹿だと思われたくてしょうがないようにしか見えないなw
0322デフォルトの名無しさん
2007/01/29(月) 09:30:07自分で確かめもせずに入に聞くのは良くないと思い以下のコードで実験してみたら
timeBeginPeriod(1);
DWORD t=timeGetTime(),r;
for(int i=0;i<100000000;++i){
try{
if(i<0)throw exception();
}catch(exception e){exit(-1);}
}
r=timeGetTime()-t;
cout<<r<<endl;
t=timeGetTime();
try{
for(int i=0;i<100000000;++i){
if(i<0)throw exception();
}
}catch(exception e){exit(-1);}
r=timeGetTime()-t;
cout<<r<<endl;
timeEndPeriod(1);
結果:
450
270
と出力された。差分180。
でもノイズとしてifの直前にi*=3;i/=3;を入れ、ループ回数を100000000から10000000にしたら
結果:
664
607
となった。差分57。
明らかに差が縮まっていますがこの違いはなんですか?
VC8 最適化なし celeron2.4GHz
0323デフォルトの名無しさん
2007/01/29(月) 10:48:53tryブロックの前処理/後処理より、乗除演算の方が高コストということ。
0324デフォルトの名無しさん
2007/01/29(月) 11:05:420325デフォルトの名無しさん
2007/01/29(月) 11:06:35対照実験として、tryなしのループの速度も測るといいと思うよ。
0326デフォルトの名無しさん
2007/01/29(月) 11:22:230327デフォルトの名無しさん
2007/01/29(月) 11:38:50どうしてかわかりません。
Aは何がよくないのかどなたか教えてください。
A ----------------------
if( month == FEB ){
if(year%4 == 0){
if( day > 29 )
1egal = FALSE;
} else {
if( day > 28 )
1egal=FALSE;
}
}
B ----------------------
if( month == FEB ){
int nday;
nday = 28;
if(year%4 == 0)
nday = 29;
if(day > nday)
1egal = FALSE;
}
0328デフォルトの名無しさん
2007/01/29(月) 11:43:53・1egal = FALSE;の箇所がBは1つしかないから保守が容易。
0329327
2007/01/29(月) 11:48:16わかりました。
(動けばいいと思ってあまりそういうこと考えてことがなかったので)
ありがとうです。
スペルミスでした。
× 1egal
○ legal
0330デフォルトの名無しさん
2007/01/29(月) 12:05:27・未初期化の変数が放置されない
・ローカル変数を節約できる(かも知れない)
但し、三項演算子を否定する方針があると使えない
尚、if文は(1行野郎でないなら)ブロック化したほうがよい
if (month == FEB) {
if (day > year % 4 == 0 ? 29 : 28) {
legal = FALSE:
}
}
0331デフォルトの名無しさん
2007/01/29(月) 12:57:42ま、こういう事さね。
■ このスレッドは過去ログ倉庫に格納されています