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
75 名前:69 [2007/07/19(木) 14:58:47 ] 早速の回答ありがとうございます。 ランタイムなしで作成できるならC++で作成したいです。 C#のコードを捨てるのは全く問題ないのですが、 ある程度慣れたVC++2005ExpressEditionで作成出来ればと思っています。
76 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:02:05 ] >>75 CだろうがC++だろうが、ランタイムは(普通は)使うことになるが、 静的にリンクすることで、外部のDLLに依存するのではなくプログラムに 埋め込むことが出来る。 まあ、良し悪しなんだがな。
77 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:03:46 ] >>75 EEだと、MFCも無いのでマウスで貼り付けるようなのは無いぞ。 まあテキストで全部できるし、リソースエディタを外部ツール使えばいいか。
78 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:06:02 ] >>73 開発環境が 2005EE だと リソースエディタ と MFC は無いんじゃなかったっけ? フォーム風のをフルスクラッチで書くのは泣ける希ガス
79 名前:69 [2007/07/19(木) 15:06:29 ] >>76 ,77 ありがとうございます! >>76 EEだと、MFCも無いのでマウスで貼り付けるようなのは無いぞ。 まあテキストで全部できるし、リソースエディタを外部ツール使えばいいか。 その方法が知りたいのですが良く分かりません。 ご教示頂ければ幸いです。
80 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:09:23 ] wxWidgetとかQTとか使うといいんじゃね
81 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:10:33 ] >>79 freepg.fc2web.com/cpp/topic_vce_001.html www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ この辺読んでみて 自分はPro版持ってるからやったことないけど
82 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:13:52 ] >>80 スタティックリンクできるっけ。 インストール不要なら検討の余地はあるね。
83 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:15:14 ] >>82 ライセンスまで含めてマジメに考えるとどうなるか分からん
84 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:15:25 ] てかC++Builder Explorerつかえばいいんじゃないか?
85 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:16:41 ] >>82 インストールは不要だね どうしても実行ファイルは大きめになるけど
86 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:37:07 ] >>79 freepg.fc2web.com/cpp/topic_wx_vc.html 0xcc.net/pub/uu-2004-08/ www.geocities.co.jp/SiliconValley-Cupertino/8526/wxWindows/license.html これもどうぞ
87 名前:デフォルトの名無しさん [2007/07/19(木) 16:11:41 ] 次のようにintとfloatが混在しているとファイルに正しく書き込めないんでしょうか? 読み出すとき値が壊れています・・・ for(k=0; k<100; k++) { fp.write(( char * ) &k,sizeof(unsigned int ) ); fp.write(( char * ) &x[k],sizeof( float ) ); }
88 名前:デフォルトの名無しさん [2007/07/19(木) 16:14:03 ] 87です すみません バイナリモードで開いていませんでした
89 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 16:22:32 ] >>88 というか…2行目の fp.write((char *)&k, sizeof(unsigned int)); もうこの時点で何をしたいのかよく分からない。 変数kのアドレスを出力してるの? 何のために? …俺が勘違いしてるのかな。
90 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 16:27:53 ] >>89 > …俺が勘違いしてるのかな。 うん。
91 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 16:40:25 ] 普通に見られる書きかただと思うけど、何と勘違いしたのだろう。
92 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 18:26:31 ] 確かによく使われる書き方だけどキャストしまくりでソースが汚れるからこういうのを考えました template <typename Rng, class OutStream> OutStream& binWrite(Rng& rng, OutStream& os) { using namespace boost::lambda; using boost::addressof; using boost::range_value; boost::for_each(rng, bind( &OutStream::write, &os, ll_reinterpret_cast<char*>( bind( addressof<typename range_value<Rng>::type >, _1 ) ), ll_static_cast<std::streamsize>( ll_sizeof( _1 ) ) ) ); return os; } 使い方は std::ofstream ofs("test.dat"); std::string a("abcdefg"); として binWrite(a,ofs);だけでおk どうよ?
93 名前:92 mailto:sage [2007/07/19(木) 18:40:35 ] すいません 横からserialization使えとか言われて気づいたので>>92 は見なかったことにしてくだしあ><
94 名前:デフォルトの名無しさん [2007/07/19(木) 22:56:36 ] VC++ 2005 Express で std::ofstream file("c:\\日本語ファイル名", std::ios::out | std::ios::binary | std::ios::trunc); とするとファイル名が文字化けしていまいます、ofstreamでは日本語ファイル名が使えないのでしょうか? プロジェクト設定をUnicode、マルチバイトどちらにしても結果は一緒でした
95 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 22:58:55 ] >ttp://miyano.s53.xrea.com/cgi-bin/sb/log/eid89.html だってさ
96 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:04:57 ] >>95 ありがとうございます setlocale(LC_ALL, "Japanese"); を呼ぶことで無事できました。 VCのバグっぽいですね
97 名前:94 mailto:sage [2007/07/19(木) 23:07:46 ] プロジェクト設定Unicodeでやってもだめだったのは L"ファイル名" としていなかったからでした
98 名前:デフォルトの名無しさん [2007/07/19(木) 23:43:15 ] VC++ 2005 Expressを使用しています。 画像表示に関する質問です。 PictureBoxに複雑な画像を描写しました(Setピクセル)。 その画像に、Drawlineで線を描きました(マウスmove等を使用)。 この線を書き直したいのですが、線を消すために DrawlineのWhitePenを使用すると、せっかく読み込んだ複雑な画像まで、 白抜きになってしまいます。 後から書き加えた線だけを消去したい場合は、 どのような方法で消去すればいいでしょうか? ご指導お願いします。 複雑な画像を一旦保存しておけばいいのかなぁ と思っているのですが・・・ よろしくお願いします。
99 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:45:05 ] >>94 次からは、文字列には頑張って TEXT("とりあえずTEXTつけときます") ってしとこうな。 それがいやならリソースにしとくれ それにしても、MBCSでも日本語きちんとコンパイルできるサービスパックを早くツクレカス>マイクロソフト
100 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:50:04 ] おまいらよ、まだ、VS2005の文字セットMBCSしているのか? いいかげん、海栗コードにしろよな。
101 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:51:13 ] >>98 >複雑な画像を一旦保存しておけばいいのかなぁ >と思っているのですが・・・ >よろしくお願いします。 うん。 原則として、OnDrawが呼ばれる度に操作と順番通りに書き込むのがウィンドウズの基本。 一回書く毎にピクセルを保存すると、UNDO限界回数と画像の大きさによっては 莫大なメモリが必要になるから。
102 名前:98 mailto:sage [2007/07/20(金) 00:01:58 ] >>101 ありがとうございます。 もしよろしければ、一旦保存する方法を教えて頂けますか? キャプチャというのを使うのかと思ったのですが、 なかなかうまくいきません。
103 名前:94 mailto:sage [2007/07/20(金) 00:07:46 ] >>99 テストコードだから抜けてた・・・ と、言い訳
104 名前:デフォルトの名無しさん [2007/07/20(金) 00:15:27 ] string::find_first_of()で大文字小文字を区別して検索する方法ってある?
105 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:19:40 ] 何も考えずにやったら区別されるはず
106 名前:101 mailto:sage [2007/07/20(金) 00:20:46 ] >>98 一旦保存というのをちょっと勘違いしているかもしれない。 画像をピクセルで保存するのではなく、 白紙の状態からラインを引く関数の始点・終点・色を全て覚えさせておくのですよ。 だから、それを覚えさせるための仕組み(普通は構造体の配列とかリストなど)を作っておいて、 UNDOしたかったら、現在までの手順から1個引いたまでの手順をウインドウに書き込むということ。 例えば、ピクチャーのまま保存して、応用で10回までUNDOできるという作り方もできるが それは↑の課題をクリアしてからじゃないかな。 今のマシンだったら、1000個程度のラインは一瞬で引けるよ。 話は変わるが、単に今の画像をキャプチャしたいのなら、Alt+PrintScreenキーでコピーして ペイントか何かに貼り付ければいい。 残念だがPictureコントロールは使った事が無いのでプログラムでの操作は知らない。
107 名前:98 mailto:sage [2007/07/20(金) 00:30:49 ] >>101 ありがとうございます。 一旦保存を勘違いしていたようです。 これから、再チャレンジしてみます。 ありがとうございました。
108 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 02:05:22 ] >>100 VCLが海栗コード対応しないんだもの(´・ω・`)
109 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 07:12:27 ] すいません、質問です。 enum Type{ UNDEF, SYS }; #define TYPE(t, nargs) ((t)*1000+(nargs)) enum keywords{ READ, WRITE }; struct s_keywords{ char *key int type; int i; }; static struct s_keywords func[] = { {"read" , TYPE(SYS, 0), READ} 省略 というマクロが有るんですが、 TYPE(SYS, 0)の部分はどのように置換されるのでしょうか?
110 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 07:20:58 ] (UNDEF+1) * 1000 + 0 だから恐らく1000
111 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 07:52:49 ] 有り難うございます。 マクロってこんな事も出来たんですねぇ。
112 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 09:21:26 ] eclipse,CDTで開発しています。 普通はprintf("1"); scanf("%d",&num);とやれば1が表示された後入力を求められるのですが、 何故か私の環境では1が表示されずいきなり入力を求められ、 printf("1"); fflush(stdout); scanf("%d",&num); とやらないと正常に表示されません 何か出力ストリームの挙動がおかしいです。 ググってみたところfflush(stdout);をするとそれなりに処理時間がかかってしまうそうですし・・・ これってスピードを求められるcでは致命的ですよね? ググると同じような現象が起こった方が数人居るようですが、解決方がfflush(stdout); しか載っていません。fflush(stdout);以外の解決法教えてください。 コンパイラはMinGW5.0 + msys1.0 CDTはeclipse3.3の更新サイトでついてくる奴 使ってます。
113 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 09:34:40 ] ユーザー入出力にスピード求めるのか? 対象ユーザーどんだけニュータイプなんだよw
114 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 09:38:27 ] 対象ユーザーじゃなく112がニュータイプ
115 名前:112 mailto:sage [2007/07/20(金) 09:54:59 ] そうですか。では普通にfflush(stdout);で解決しても無問題ということですね。 ご回答thx
116 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 11:01:57 ] >>112 その辺は微妙な話だと思う。 stdoutは端末に結び付けられている場合は行バッファリングされ、 そうでない場合はフルバッファリングされるのが伝統的実装のようだが、 規格でそうしろと決まっているわけでもないようだ。 stderrがバッファリングなしというのは決まっていたはずだが。 さらに、入力を行う際は、行バッファリングされている出力を 前もってフラッシュすることになっていたと思うが、よく分からん。 stdoutが行バッファリングされている場合に、>>112 のような コードで、改行なしのプロンプトを表示後に入力できるためには、 そうなっていなければならないのだが。 もしかしたら、>>112 の環境ではstdoutがフルバッファリングされているのかもな。 確実に即座に出力を表示したい場合は、stderrを使うというのが一つの手だが、 いちいち fprintf(stderr, ...) と書きたくないのなら、 setvbuf()を使ってstdoutをバッファリングなしに設定するという方法もある。 stdoutはリダイレクトされることもあるのだから、できれば isatty()などを用いて標準出力が端末かどうかを見たほうが良いのだが、 残念ながらこの方法は移植性があるとは言えないのが難点だ。
117 名前:デフォルトの名無しさん [2007/07/20(金) 14:49:27 ] C++の認定試験てあるの?
118 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 14:51:36 ] ある。俺が創った。
119 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 14:57:04 ] そしてオレが認定。
120 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 17:27:53 ] そして俺が脱落
121 名前:電通女 ◆v1Uy5WkQ7k mailto:sage [2007/07/20(金) 20:38:06 ] #include<stdio.h> struct complex{ double re,im; }; この意味を教えてください。
122 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:43:17 ] ストラクトは構造体、コンプレックスはそれにつけた名前(intとか、charとかに匹敵) その次のダブルはその構造体の構成要素、だと思います 私はc言語暦1週間くらいなので当てにならないかもしてませんが
123 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:43:42 ] 電通女 ◆v1Uy5WkQ7k に一致するページは見つかりませんでしたからダメです。
124 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:45:06 ] >>121 構造体って習った?
125 名前:電通女 ◆v1Uy5WkQ7k mailto:sage [2007/07/20(金) 20:47:29 ] 構造体で、"re"と"im"という変数を定義してるって事ですか?
126 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:49:57 ] それって複素数でそ? 私にもわかるよww
127 名前:電通女 ◆v1Uy5WkQ7k mailto:sage [2007/07/20(金) 20:53:36 ] それは分かってるんですが、プログラムの意味がわからなくて。
128 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:57:50 ] >>121 struct kozotai{ double a; double b; }; これが何か分かるならそれもわかるはず
129 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:58:40 ] double型の変数reとimを含む構造体complexを宣言した。 それだけ
130 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 21:04:39 ] >>127 子宮で考えるんじゃない、脳で考えるんだ!!
131 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:26:39 ] あまりにも初心者すぎる質問ですが、お願いします。 VC++2005EEで新規作成->Win32コンソールアプリケーションを作成(オプションで "空のプロジェクト"を選択)した後、 #include<iostream> int main(){ std::cout << "hello"; return 0; } だけのmain.cppをソースファイルフォルダに作成し、これをビルドしようとすると 以下3つのエラー: main.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::Init(void)" (??0Init@ios_base@std@@QAE@XZ) が関数 "void __cdecl std::`dynamic initializer for '_Ios_init''(void)" (??__E_Ios_init@std@@YAXXZ) で参照されました。 main.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ) が関数 "void __cdecl std::`dynamic atexit destructor for '_Ios_init''(void)" (??__F_Ios_init@std@@YAXXZ) で参照されました。 fatal error LNK1120: 外部参照 2 が未解決です。 が発生します。 思い当たるところがあればお教えください。よろしくお願いします。
132 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:29:55 ] "空のプロジェクト"がダメなんじゃ? "こんにちは、世界"でどうぞ
133 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:37:00 ] >>131 別にその通りにやって普通にコンパイルできるけどな。 MSSDKをインストールしていて、そのlibディレクトリにlibcp.libとかいう 怪しいライブラリが入っていたりしない?
134 名前:131 mailto:sage [2007/07/20(金) 23:41:11 ] libcp.libより怪しい133が入ってますた!!
135 名前:131 mailto:sage [2007/07/20(金) 23:55:59 ] >>134 誰てめえw >>132 すいません、もう少し分かり易く・・・ "空のプロジェクト"のチェックをはずしても同様のエラーが出ました。 (そういう意味じゃなかったですか?) >>133 確かにありました。しかしそのlibファイルをリネームしてみたり、 プロジェクトのプロパティからライブラリの無視リストに入れてみたり しましたが変化なしでした。 133さんで問題なくビルドできるということは、自分の特有の環境が 原因ということなのでしょうか(MSSDKあたり?)。調べてみます。
136 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:01:04 ] >>135 ふうん、変化なしか。 libcp.libはC++のランタイムで、本来はVC++に付属のものが使われるべきで SDKになぜか入っていたりする怪しいのが優先参照されちゃうとマズかったりする。 てっきりそのせいかと思ったんだがな。 コマンドプロンプトからvcvars32.batを実行後に普通にcl.exeでコンパイル するとどうなる?
137 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:35:42 ] >>136 動きました!なぜ。 cl.exeでmain.cppを直接コンパイルすると、下のような警告が大量に出ましたが 問題なく動きました。 C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(751) : warning C4530: C++ 例外処理を使っていますが、アンワインド セマンティ クスは有効にはなりません。/EHsc を指定してください。 main.cpp(6) : コンパイルされたクラスの テンプレート のインスタンス化 'st d::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::b asic_ostream<_Elem,_Traits> &,const char *)' の参照を確認してください with [ _Elem=char, _Traits=std::char_traits<char> ] これで動くということは、VC++の設定の方でどこか変えてはいけない部分を 触っちゃって(かつ忘れて)いるといったところでしょうか。
138 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:41:58 ] >>137 その警告はまぁオプション指定しないと普通に出るね。言われたとおりに /EHscを指定すればよい。 後はまぁ、clで無オプションでコンパイルしたんならデバッグ版のライブラリ じゃないから、IDEからリリースビルドでやってみるとか、 ツール→オプションでVC++ディレクトリの優先順位をチェックするとか、 プロジェクトファイルの中を見てみて、どうなってるかチェックするとか、 色々やってみるんだね。
139 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:52:24 ] まあ、vcvars32.bat内に set CL=/EHsc /Ox /W4 程度を適当に入れとくべきだろ。
140 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:56:24 ] 親切にありがとうございました。 一応動くようにはなったので、いろいろ試しつつ 何が原因だったのか調べてみようと思います。
141 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:34:54 ] 今思ったんだが、「空のプロジェクト」ってなんかカッコよくね? “Project S・K・Y” とか表記するともっとカコ(・∀・)イイ
142 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:35:50 ] から
143 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:36:00 ] 「からのぷろじぇくと」としか読んだこと無い
144 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:37:05 ] empty project
145 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 17:22:05 ] ポインタって何ですか?
146 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 17:26:58 ] >>145 ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%29
147 名前:145 mailto:sage [2007/07/21(土) 17:29:11 ] >>146 ありがとうございました。
148 名前:デフォルトの名無しさん [2007/07/21(土) 19:51:49 ] HARC HWNDっておなじですか??HARCがエラーになります
149 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:20:19 ] HARC?
150 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:26:06 ] A SHARK? No,a dolphin! Watch out!!
151 名前:デフォルトの名無しさん [2007/07/21(土) 20:30:47 ] 書庫のファイル名を取得したいんですけど・・・どうすればいいかわかりますか?? #include <windows.h> #include <iostream> using namespace std; typedef HWND (__stdcall *FND)(const HWND ,LPCSTR , const DWORD ); typedef int (__stdcall *FNE)(const HWND , LPCSTR ,int ); main(){ char buf[128]; HINSTANCE hd = LoadLibrary("UNZIP32.DLL"); FND pd = (FND)GetProcAddress(hd,"UnZipOpenArchive"); FNE pe = (FNE)GetProcAddress(hd,"UnZipGetFileName"); HWND q=(*pd)((HWND)hd, "file.zip",0); (*pe)(q , buf, 128); cout<<buf<<endl; FreeLibrary(hd);}
152 名前:関数はこうなっています・・・ [2007/07/21(土) 20:34:20 ] HARC WINAPI UnZipOpenArchive(const HWND hWnd,LPCSTR szFileName, const DWORD dwMode); 機能 指定ファイルが UNZIP32.DLL に有効な書庫ファイルかどうか調べ、 有効であればオープンし、一意の数値(ハンドル)を返します。 以後の書庫ファイルへのアクセスはこのハンドルでおこないます。 アクセスを終了する時は UnZipCloseArchive 関数を呼ばなければなりません。 引数 hWnd UNZIP32.DLL を呼び出すアプリのウィンドウ・ハンドル。 szFileName 書庫ファイル名。 dwMode 処理モードを指定するフラグ。次の値を|(オア)で 組み合わせる。 戻り値 指定の書庫ファイルに対応したハンドル。エラー時は NULL を返します。 int WINAPI UnZipGetArcFileName(HARC hArc,LPCSTR lpBuffer,int nSize); 機能 書庫ファイル名を得ます。 引数 hArc UnZipOpenArchive() で返されたハンドル。 lpBuffer ファイル名を格納するバッファ。 nSize バッファのサイズ。 戻り値 正常終了時に0、異常時にはエラーコード(0以外)が返ります。
153 名前:151 [2007/07/21(土) 20:39:24 ] 自己解決するかもしれないです・・・
154 名前:151 [2007/07/21(土) 20:42:36 ] 自己解決しました
155 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:53:49 ] C++(DirectX)でファイルを入出力する関数を作っています。 現在Cのfopenやfreadなどを使っており、スコアデータはこのファイルのxx番目だからfseekで移動して読み込むといった形を取っています。 しかしこれだと、例えばDirectXのXファイルであればMeshNormalsの位置に移動して、必要な数だけ読み込むといった手段が取れません。 検索してもファイルの入出力の解説を扱っているサイト自体少なく、2行目の方法が中心で困っています。 どこか参考になるサイト、もしくは書籍はありませんでしょうか。 また、ExcelデータはC++で読み書き(データの追加・削除)はできるのでしょうか。 ファイルの入出力周りは私の持っている本ではほとんど書かれていませんでしたので放置していたのですが・・ここに来てツケがorz
156 名前:151 本物 [2007/07/21(土) 20:57:49 ] 自己解決しました #include <windows.h> #include <iostream> using namespace std; typedef HWND (__stdcall *FND)(const HWND ,LPCSTR , const DWORD ); typedef int (__stdcall *FNE)(const HWND , LPCSTR ,int ); main(){ char buf[128]; HINSTANCE hd = LoadLibrary("UNZIP32.DLL"); FND pd = (FND)GetProcAddress(hd,"UnZipOpenArchive"); FNE pe = (FNE)GetProcAddress(hd,"UnZipGetFileName"); FNE pf = (FNE)GetProcAddress(hd,"UnZipFindFirst"); HWND q=(*pd)((HWND)hd, "file.zip",0); (*pf)(q , "*", NULL); (*pe)(q , buf, 128); cout<<buf<<endl; FreeLibrary(hd); }
157 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:59:20 ] www3.uploader.jp/user/mol/images/mol_uljp00012.txt 11000111101111100011 っていう文字列が与えられた時に、1*2 0*3 1*4 .... って簡易圧縮みたいなのをしたいわけです で、文字列に 1と0以外のものが入ってた時に、とりあえずエラーを出したいんだけれど char buff[1024]; scanf("%s",&buff); for( n=0; buff[n] == '\0'; n++) { if ( buff[n] != '0' || buff[n] != '1' ) { printf("Error!\n"); goto endline; } } ここのifがうまく反応してくれません 初歩的なミスがあると思うのですが、よろしくお願いします
158 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:03:18 ] buff[n] == '\0'の条件を逆にしてみたら?
159 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:04:56 ] for( n=0; buff[n] != '\0'; n++)
160 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:06:23 ] ランレンクス圧縮?
161 名前:151 [2007/07/21(土) 21:09:20 ] for( n=0; buff[n] != '\0'; n++) { if ( buff[n] != '0' && buff[n] != '1' )
162 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:09:40 ] buff[n] != '0' && buff[n] != '1'
163 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:11:04 ] >>155 Xファイルは知らないのでExcelだけ。 Excelのファイルは所詮ただのバイナリファイルなのだから、 C++で読み書きできないわけがない。 しかしWindows上ならプログラムからExcelを操作してやるのが楽。 データ形式を考える必要もなく、しかもオブジェクトという形で取り扱える。 ただ、その独特な仕組みに慣れる必要があるけど。
164 名前:151 [2007/07/21(土) 21:14:11 ] CSVとかで出力してあとで変換すればいい
165 名前:155 mailto:sage [2007/07/21(土) 21:48:55 ] レスありがとうございます。 ファイル操作関連の関数は先ほど上げたものぐらいしか知らなかったので、なんとか前進できそうです。 ツール周りをエクセルからデータを引っ張ってくるようにしようかと考えておりましたが >>164 で書かれているように拡張子を変えてやれば配布するデータにも加えれそうですね。 バイナリデータである以上、独自に形式を変えない限りユーザ側で改変するのは容易ですしね。
166 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:08:46 ] (>>158 ),>>159 . >>161 ,>>162 サンクス! for( n=0; buff[n] != '\0'; n++){ if ( buff[n] != '0' && buff[n] != '1' ){ printf("Error!\n"); goto endline; } こうだった
167 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:15:03 ] なんであほの>>151 が混ざってるんだ?
168 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:17:05 ] 私には括弧がついてるよーww
169 名前:166 mailto:sage [2007/07/21(土) 22:43:40 ] あ、そういうことですか。「逆」って||と&&の話かと んだば、かっこは解除させていただくの方針で
170 名前:デフォルトの名無しさん [2007/07/21(土) 22:46:03 ] struct , typedef , class だとどれが一番いいとかありますか? 使わないですむやつありますか
171 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:50:58 ] なぜそこにtypedefが
172 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:51:03 ] >>170 日本語でおk
173 名前:デフォルトの名無しさん [2007/07/22(日) 03:03:23 ] 同じように見えて確保するサイズが全然違いますね bitset<1> a[1024]; bitset<1024> b; cout<< sizeof(a)<<" "<<sizeof(b);
174 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 03:05:48 ] >>173 そりゃそうだろ。でもサイズ自体は実装依存。
175 名前:デフォルトの名無しさん [2007/07/22(日) 04:45:28 ] 配列を引数にして再帰すると駄目なんでしょうか?やってみていませんが int fnc(int a[10]){ a[]に対して処理をする fnc(a); };