【初心者歓迎】C/C++室 Ver.54【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/05/14(水) 01:00:02ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.53【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1208989385/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0736デフォルトの名無しさん
2008/06/07(土) 19:36:13とりあえず
1/fact;
これの結果は切り捨てになるぞ?
0.いくつとかにはならずに
0737デフォルトの名無しさん
2008/06/07(土) 19:37:14main(){
int i,fact;
double j = 0.0,e;
fact=1;
i=1;
while(i<=10){
fact=fact*i;
j+=1.0/fact;
i=i+1;
}
e=1+j;
printf("e=%lf\n",e);
}
0738デフォルトの名無しさん
2008/06/07(土) 19:38:4813番目の状態が>>730で欠落している2箇所にあたります
ポリゴンは正しいけど黒丸の表示位置がそれとずれていました
0739デフォルトの名無しさん
2008/06/07(土) 19:46:36doubleで定義すると1.0としないとだめなんですか?
>>736
なぜですか?
>>737
なぜそういう風にしないといけないのか教えてもらいたいのですが・・・
0740デフォルトの名無しさん
2008/06/07(土) 19:50:150741デフォルトの名無しさん
2008/06/07(土) 19:53:34整数同士の演算結果は整数だから、そんでその結果をdoubleにして代入だから
暗黙の型変換とかでぐぐれ
0743デフォルトの名無しさん
2008/06/07(土) 21:25:22doubleだけだとちょっと辛いだろw
0744デフォルトの名無しさん
2008/06/07(土) 21:27:380745デフォルトの名無しさん
2008/06/07(土) 21:30:340746デフォルトの名無しさん
2008/06/08(日) 09:04:59[2]問題文
三つの整数値を読み込んで、それらの値が全て等しければ、「三つの値は等しいです。」と、どれか二つの値が等しければ、「二つの値が等しいです。」と、そうでなければ、「三つの値は異なります。」と表示するプログラムを作る。
[3-1]windows
[3-2]gcc
[3-3]C言語
[4]明後日まで。
[5]if文を使って下さい。お願いいたします。
0747デフォルトの名無しさん
2008/06/08(日) 09:07:45スレ違いです
こちらへどうぞw
http://pc11.2ch.net/test/read.cgi/tech/1211980711/944
0748デフォルトの名無しさん
2008/06/08(日) 09:19:330749デフォルトの名無しさん
2008/06/08(日) 10:20:13[5]が増えてるw
0750デフォルトの名無しさん
2008/06/08(日) 12:18:02ttp://moyashi.air-nifty.com/hitori/2006/09/gsplayer225_0036.html
を読んでGSPlayerをビルドしようとしたんですが上手くいきません
そこに書いてあるようにVisual C++ 4.0などを入れてファイルを開いたら固まるので
Visual C++ 2005 Express EditionとPlatform SDKを入れてみたんですが上手くいきません
他に何かインストールしなきゃダメな物があるんでしょうか?
0751デフォルトの名無しさん
2008/06/08(日) 12:21:51目的はWin32版のビルドです
0752デフォルトの名無しさん
2008/06/08(日) 12:39:540753デフォルトの名無しさん
2008/06/08(日) 12:40:10上手くいきません、だけじゃ回答の仕様が無い。
何をやって、どういう状況になったか明確に説明せずに、回答者側にそれを想像することを求めている?
そもそも、そのブログに
>eVC++ 4.0、eVC++ 4.0のサービスパッチ、PPC2003 SDK、PPC2003のエミュレータを順次インストールすればOK。
と書いてあるのに、勝手にVC++2005を使って上手くいかないと言われても。
VC++2005の他に何かインストールしなければいけないのではなく、上記のものを正しくインストールすべき。
>Visual C++ 4.0などを入れてファイルを開いたら固まるので
これについてはどこか他スレで。
0754デフォルトの名無しさん
2008/06/08(日) 12:43:34自分では試せないので、上記を参考に試してみてください。
現在GSPlayer2は「Windows Mobile 2005」にも対応してます。この場合は、「Visual Studio 2005 Standard Edition」でビルドするんですかね。
相応のSDKも必要になるでしょう。
ただ、上記の手順で作ったバイナリは、H/PC系を除き、各種WMで動くと思います。
をやろうとしたんだと思う。多分。
0755750
2008/06/08(日) 13:02:52>VC++ 4.0、eVC++ 4.0のサービスパッチ、PPC2003 SDK、PPC2003のエミュレータを順次インストール
はやったのですが固まってしまうので下の方に書いてあるVisual Studio 2005 Standard Editionを入れました。
libmad.vcwを開くとあるのですが見つからないので、libmad.dspをダブルクリックで開くと
「Visual C++ プロジェクト形式に変換されなければなりません」と出たので変換して開いてソリューションのビルドをすると1 失敗となってしまいます
>>754
それをやろうとしたんですが上手くいきませんでした
>相応のSDKも必要
とあるので何かインストールしなければならない物があるのかと思ったのですが見当違いでしょうか
0756デフォルトの名無しさん
2008/06/08(日) 13:19:11勝手に、インクルードのパス変えてみたりフォルダの構造変えてみたり・・・
聴いてみれば、あれがなかったからかえてみた。とか、パスを通すの面倒だからコピーしたとか・・・・
どんな経験者でも、他人が作ったプロジェクトのどこにノウハウが隠れているか分からないものを変更するのは細心の注意が必要なのにな。
0757デフォルトの名無しさん
2008/06/08(日) 13:37:33>ソリューションのビルドをすると1 失敗となってしまいます
ビルドエラー時にもっと詳細なメッセージが出ているはずだけど、それについて調べる努力はした?
自分にとって意味不明なメッセージはスルー?
>>753も書いているけど、失敗というだけでなくもっと詳細な情報を出さなければ回答してもらえないよ。
たぶんこのスレで聞く様な問題ではなく、visual stdioとかそっち系を探すべきだとは思うけど。
0758750
2008/06/08(日) 13:54:49すみません
エラーが多いので環境自体が整ってないのかと思っていました。
長いのでttp://uproda.2ch-library.com/src/lib030582.txt
スレ違いのようでしたら移ります。
0759デフォルトの名無しさん
2008/06/08(日) 14:13:530760デフォルトの名無しさん
2008/06/08(日) 14:18:09d:\gsplayer\libmad\libmad.c(2) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
0761デフォルトの名無しさん
2008/06/08(日) 15:42:11++a; /* lvalue required as increment operand */
printf("%p", &a);でアドレスは取れるのにもかかわらず、このaは左辺値じゃないんですか?
0762デフォルトの名無しさん
2008/06/08(日) 15:43:040763デフォルトの名無しさん
2008/06/08(日) 15:49:24lvalueでもmodifiableなものとそうでないものがある。
その例のほかに、たとえばconst修飾されたlvalueはmodifiableでない。
0764761
2008/06/08(日) 16:00:36代入が不可能である時点でインクリメントが出来ないんだろうなという気はするんですが、
>lvalue required as increment operand
というような表現なんで不思議に思ったのですよ
>>763
じゃあこのエラーメッセージは罠で、
aが変更不可能な変数であることがポイントって事なんでしょうか?
0765デフォルトの名無しさん
2008/06/08(日) 16:06:37char a[] は、
char* const a だと思っておけ。
0766デフォルトの名無しさん
2008/06/08(日) 16:14:06The pointer shall be created explicitly, using the unary & operator, or
implicitly using a non-type template parameter of pointer type, or using
an expression of array (4.2) or function (4.3) type.
このルールで右辺値じゃないけど&でポインタをとれる
0767デフォルトの名無しさん
2008/06/08(日) 16:15:13そもそもa[0]などがlvalueであって、a自体はlvalueではないだろ。
&演算子が使えるかどうかはlvalueであることとは無関係では?
0768デフォルトの名無しさん
2008/06/08(日) 16:18:320769デフォルトの名無しさん
2008/06/08(日) 16:18:44lvalue の解釈を「アドレスが取れるもの」とせずに、素直に「代入式の左辺に置けるもの」と
考えておけば何も問題ないエラーメッセージじゃないか?
0770768
2008/06/08(日) 16:19:34modifiableでないlvalueだ
0771デフォルトの名無しさん
2008/06/08(日) 16:25:07左辺値なら何でも代入可能とは限らない。
0772デフォルトの名無しさん
2008/06/08(日) 17:58:07#include <bitset>
#include <boost/lambda/lambda.hpp>
#include <boost/cstdint.hpp>
int main() {
double d=1.0;
std::bitset<64> b(*((boost::int64_t *) &d));
namespace bl=boost::lambda;
for (int i=0; i < b.size(); ++i)
std::cout << b[i];
}
doubleのビット表現をbitsetにぶちこむ為に一時変数使ってポインタのキャストしてるんですが
こういう面倒臭いことせずに
std::bitset<64> b( foo(1.0) );
みたいに一発でできる方法ってないですかね?
0773デフォルトの名無しさん
2008/06/08(日) 18:16:38std::string("0110110101")みたいな
0774デフォルトの名無しさん
2008/06/08(日) 18:48:03一時変数を使うほうが分かりやすいと思うぞ。
reinterpret_cast<boost::uint64_t const&>(static_cast<double const&>(1.0))
そもそも標準のbitsetでは、コンストラクタが
773も言っているstringを取るやつと、unsigned longを取るやつ、
あとコピーコンストラクタしかないからうまくいかなくても知らないぞ。
0775デフォルトの名無しさん
2008/06/08(日) 19:00:00double型を引数としてビット表現を文字列表記したstd::string型を返す関数fooを用意すれば
>std::bitset<64> b( foo(1.0) );
という風にかけるんじゃない?
以下は適当に書いてみた。テストもコンパイルもしてない。
template<typename T>
std::string foo(T d)
{
char buf[sizeof(T)];
for (int i= 0 ; i < sizeof(T) ; i++)
{
buf[i] = *(reinterpret_cast<char*>(&d))[i/8] & (0x80 >> i%8);
}
return std::string(buf);
}
0776デフォルトの名無しさん
2008/06/08(日) 19:00:53○ (reinterpret_cast<char*>(&d))
0777デフォルトの名無しさん
2008/06/08(日) 20:13:530778デフォルトの名無しさん
2008/06/08(日) 20:16:040779デフォルトの名無しさん
2008/06/08(日) 20:30:490780デフォルトの名無しさん
2008/06/08(日) 21:35:470781デフォルトの名無しさん
2008/06/08(日) 23:46:000782デフォルトの名無しさん
2008/06/08(日) 23:47:520783デフォルトの名無しさん
2008/06/08(日) 23:50:170784デフォルトの名無しさん
2008/06/08(日) 23:51:520785デフォルトの名無しさん
2008/06/09(月) 00:02:360786デフォルトの名無しさん
2008/06/09(月) 00:10:190787デフォルトの名無しさん
2008/06/09(月) 00:18:270788デフォルトの名無しさん
2008/06/09(月) 00:19:080789デフォルトの名無しさん
2008/06/09(月) 00:19:540790デフォルトの名無しさん
2008/06/09(月) 00:32:22#undef nagato
#endif
0791デフォルトの名無しさん
2008/06/09(月) 00:56:190792デフォルトの名無しさん
2008/06/09(月) 01:13:110793デフォルトの名無しさん
2008/06/09(月) 01:14:500794デフォルトの名無しさん
2008/06/09(月) 01:42:570795デフォルトの名無しさん
2008/06/09(月) 23:34:24構造体の配列をユーザ関数で作って
それをメイン関数に返したいのですが可能ですか?
0796デフォルトの名無しさん
2008/06/09(月) 23:35:40staticな変数なら返してもおk
0797デフォルトの名無しさん
2008/06/09(月) 23:36:250798デフォルトの名無しさん
2008/06/09(月) 23:43:18T data[L];
};
array_wrapper<int, 10> function(){
array_wrapper<int, 10> result_value;
/* ... */
return result_value;
}
0799デフォルトの名無しさん
2008/06/09(月) 23:45:29どうすればメイン関数で使えるか分からないんです
返却値を構造体の配列の0番目の要素のアドレスにして、
メイン関数で使おうとしたら、0番目の要素以外には処理に使えなくて…
どうすれば、メイン関数ですべての構造体の配列が使えるようになりますか?
0800795
2008/06/09(月) 23:47:39使ってるのはCです
0801デフォルトの名無しさん
2008/06/09(月) 23:47:57使えるよ。
どう使えないの?
0802デフォルトの名無しさん
2008/06/09(月) 23:48:500803デフォルトの名無しさん
2008/06/09(月) 23:56:010804デフォルトの名無しさん
2008/06/09(月) 23:57:190805795
2008/06/09(月) 23:57:59printf("%d n",a[i]->num);
}
見たいな処理を関数内とメイン関数内ですると
構造体を作った関数内では表示できるんですけど
メインでは0番目の要素を処理した後に処理が止まります
0806デフォルトの名無しさん
2008/06/09(月) 23:58:570807デフォルトの名無しさん
2008/06/10(火) 00:18:560808デフォルトの名無しさん
2008/06/10(火) 11:20:430809デフォルトの名無しさん
2008/06/10(火) 11:46:51TCHAR bar = foo;
但し、桁あふれに注意。
0810デフォルトの名無しさん
2008/06/10(火) 15:12:36「char型データ(\t)int型データ(\t)int型データ(\t)double型データ(\n)」
この形式で、保存されている分(1件〜無制限)だけデータを表示させたいのですが、
char型データは最大で全角20文字で、この文字数によって表示が崩れてしまいます。
0811810
2008/06/10(火) 15:24:03氏名 英語 数学 平均
ほげ 20 21 20.5
名無しのごんべ 100 100 100.0
このように揃えたいのですが、現状だと
名前 英語 数学 平均
ほげ 20 21 20.5
名無しのごんべ 100 100 100.0
名無し 50 50 50.0
このように表示されてしまいます。
0812810=811
2008/06/10(火) 15:24:550813デフォルトの名無しさん
2008/06/10(火) 15:26:06それはchar型ではなく、char配列だろ。
と言うのはさておき、printf()を使えば済む話なのか?
printf("%20.20s\t%12d\t%12d\t%24.20g\n", string, int1, int2, double1)
0814デフォルトの名無しさん
2008/06/10(火) 15:49:51そうでした、ご指摘ありがとうございます。
printf("%40.40s\t%d\t%d\t%0.1f\n",p->name,p->english,p->mathematics,p->average);
このように記述したところ、一応揃いました。
ただこの構造体は、毎回標準入力でデータを保管していくので、氏名の文字数も毎回変わります。
その都度(全データにおけるの氏名の最大文字数)に合わせて幅を変えたいのですが、可能でしょうか?
そんなのねえよ!というのであれば、ここで諦めるのですが・・・。
0815デフォルトの名無しさん
2008/06/10(火) 16:05:56printf("%*s", 40, "string")
0816デフォルトの名無しさん
2008/06/10(火) 19:52:040817デフォルトの名無しさん
2008/06/10(火) 20:12:48VS2003のVC++のGDI+なんですが、
Font font = new Font(dc, &logfont);
とするとフォントをインスタンス化できますけど、logfontのフォント名に
"@MSゴシック" のように横に傾くフォントを指定すると、うまく指定され
ないように思われます。
たとえば
LOGFONT lf1, lf2;
lf1.lfFaceName = "@MS ゴシック"
Font* font = new Font(dc, &lf1);
font->GetLogFontW(&graphics, &lf2);
というように確認してみると、lf1には確かに"@MS ゴシック"がセットされて
いるのに、lf2には"@"が外れて"MS ゴシック"がセットされてしまいます。
私は何を勘違いしてるでしょうか?
0818デフォルトの名無しさん
2008/06/10(火) 20:25:330819817
2008/06/10(火) 20:31:54ぷーん
それじゃ他のトコで質問してきます…
0820デフォルトの名無しさん
2008/06/10(火) 21:17:12どのように書けばいいのでしょうか
#include <iostream>
using namespace std;
class A {
public: virtual void func() { cout << "func A" << endl; }
};
class B {
public: virtual void func() { cout << "func B" << endl; }
};
enum COMMAND { FUNCA_CMD, FUNCB_CMD, EoC };
int main()
{
A a;
B b;
void (*f[EoC]) = { &a, &b };
//(*f[FUNCA_CMD])->func(); エラー
return 0;
}
0821デフォルトの名無しさん
2008/06/10(火) 21:46:35class Base {
public:
virutal void func() = 0;
}
class A : public Base {
public:
virtual void func() { cout << "func A" << endl; }
};
class B : public Base {
public:
virtual void func() { cout << "func B" << endl; }
};
int main()
{
A a;
B b;
Base* f[2] = {&a, &b};
f[0].func();
f[1].func();
}
0822デフォルトの名無しさん
2008/06/10(火) 21:53:00次は示して頂いた物をテンプレートを使って再現できないか弄ってみます。
0823デフォルトの名無しさん
2008/06/10(火) 22:01:450824デフォルトの名無しさん
2008/06/10(火) 22:28:36template < class _T >
sub( _T & t )
{
A aa;
B bb;
t F[2] = {&aa, &bb}; // error
}
int main()
{
A a;
sub ( a )
}
なんだか二度手間っぽくて面倒だし、型もBはAに出来ないと言われちゃいましたw
0825デフォルトの名無しさん
2008/06/10(火) 22:35:020826デフォルトの名無しさん
2008/06/10(火) 22:36:550827デフォルトの名無しさん
2008/06/10(火) 23:02:030828デフォルトの名無しさん
2008/06/11(水) 01:37:31#include <iostream>
template < class T >
class test
{
friend std::ostream& operator<< ( std::ostream& os, test< T > t );
public:
void set( T val ) { x = val; }
private:
T x;
};
template < class T >
std::ostream& operator<< ( std::ostream& os, test< T > t )
{
os << t.x;
return os;
}
↑のようにfriend宣言したとき、
int main()
{
test< int > t;
t.set( 5 );
cout << t << endl;
}
とするとエラーが出るのですがなぜでしょう・・・。orz
テンプレートクラスでなければ問題なく動くのですが・・・。
0829デフォルトの名無しさん
2008/06/11(水) 02:01:02template < class T >
class test
{
friend template< class U > std::ostream& operator<< ( std::ostream& os, test< U > t );
public:
void set( T val ) { x = val; }
private:
T x;
};
本当は知らない。
0830デフォルトの名無しさん
2008/06/11(水) 02:02:03エラーメッセージぐらい貼ろうぜ。
どうせ friend の <> なんだろうけど。
0831デフォルトの名無しさん
2008/06/11(水) 02:08:06エラーメッセージは「エラー」という意味しか持たないものだから、
どういうエラーが出たかを書くという行為にまったく意味を見出せないんだろうね。
いつか胃ガンにでもなった時、「病気である」とだけ解釈してどういう病気かまったく興味を持たず、
呑気に胃薬飲み続けて死ねばいいと思うよ。
0832デフォルトの名無しさん
2008/06/11(水) 04:30:56実行時クラッシュです・・・
0833デフォルトの名無しさん
2008/06/11(水) 04:31:19コンパイルは通るのです。
0834デフォルトの名無しさん
2008/06/11(水) 04:59:21テンプレート周りにバグ抱えてる処理系はまだまだ多いぞ
0835デフォルトの名無しさん
2008/06/11(水) 05:09:42■ このスレッドは過去ログ倉庫に格納されています