[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/29 13:41 / Filesize : 252 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.47【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:14:51 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.46【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1198755167/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

652 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:12:25 ]
有った

653 名前:デフォルトの名無しさん [2008/01/30(水) 15:30:11 ]
C言語の質問です。コンパイラはgccです。

while(fgets(buffer,filesize,fp)){
flug=strstr(buffer,str);
if(flug!=NULL)puts(flug);
}

これでなぜ出力文字列が検索できないのでしょうか。
教えてくださいませんか?

私の頭の中ではまず改行までのファイルの一行をbufferに読み込む。
その後、bufferに格納されている文字列とstr(検索したい文字列)を比較して検索。
その返り値がflugに入るので、NULLポインタ以外(失敗)のflugは出力。
これで検索した値からの文字列が出力されると思っておりました。

654 名前:デフォルトの名無しさん [2008/01/30(水) 15:40:40 ]
cin.getline
って文字列を入力させるときに使うの?
普通に50桁の配列に数字を入れたいときって
cin >> a[50]
でいいのかな??

655 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:43:25 ]
きもい

656 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:49:42 ]
>>653
その部分だけじゃわからん。
つーか、その部分に問題は無い。

657 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:50:58 ]
>>653
・flugという変数名がキモい
・filesizeは本当にbufferが指すバッファのサイズ?

buffer, filesize, str の宣言や初期化などを詳しく開示しましょう。


658 名前:デフォルトの名無しさん [2008/01/30(水) 17:03:00 ]
>> 654
getlineの使い方(ファイルからの一行単位の読み込み)
string line;
ifstream ifs(filename);
while (getline(ifs, line)) {
lineには一行がはいってる。
}

> cin >> a[50];
これでは配列aの51番目の要素に代入してるだけでは?



659 名前:デフォルトの名無しさん [2008/01/30(水) 18:54:56 ]
>>658
やっぱりだめなんですね・・
cin>>a[50]
だと50桁も入力できないんです
ありがとうございました

660 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:19:46 ]
例外がcatch{}の中では生存していると仮定して
関数でnew | malloc した文字列を返して
デストラクタでdelete[] | freeするのはありですか?



661 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:29:05 ]
言っている意味が分からん。
コードで書いてくれ。

662 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:47:17 ]
エスパーな俺が翻訳すると、

catch内で作ったインスタンスでもデストラクタは呼ばれるのか?

ではないかと。

663 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:59:41 ]
ふつうにわかるだろ

664 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:03:22 ]
>>660
文字列クラス返せば?

665 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 21:42:46 ]
>>659
「桁」が何のことか分からん
配列のサイズのことならfor引数足してまわせばいいだけ
50桁の数値(10の50乗とか)を扱いたいなら普通には無理

666 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 21:43:28 ]
引数じゃなかった添え字だ

667 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:27:02 ]
自作クラス内に、CreateWindowというメソッドを作りたいんですが、エラーが出てしまいます。
エラーメッセージを見るとどこかで定義されてるようなんですが、
クラス内は独立した名前領域で、同じ関数名を使えるのではないのですか?
どなたか、回答をお願いします。

668 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:29:10 ]
>>667
windows.h から同名のマクロが include されているのかも知れない

669 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:32:01 ]
回答ありがとうございます。
windows.hは確かにインクルードしていました。
windows.hをインクルードしないわけにはいかないし、
CreateWindowという名称を使うのはあきらめたほうがよさそうですね。

670 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:10:41 ]
すみません、質問です.
C++言語のソースを読んでいて、疑問に感じた所があります。
struct Hoge{
unsigned Wakeup(void) const { return wakeup_time; }
Hoge(Container& container);
~Hoge();
private:
unsigned int hoge_time;
Container& fuga;
};

これ構造体ですよね?クラスみたいですけど・・・。
本を読んだりしてクラスと構造体はまったく別物と認識していたんですが。
混乱しています。



671 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:12:12 ]
C++では同じ
違いはデフォルトのアクセスがpublicな事

672 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:19:54 ]
>>670
実装は同じだけど、考え方としては区別したほうが良いんじゃないかな、

673 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:21:02 ]
>>671
もうちょい違うっしょ。

674 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:21:53 ]
メンバ変数を public にした方が何かと便利そうなのは構造体に、
そうでないのものはクラスに。
そう考えると、自然と構造体を使う状況は限定される。

675 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:23:22 ]
>>673
デフォルトで public 継承になる、というやつのことか?

676 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:30:12 ]
テンプレート絡み。

677 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:32:36 ]
最近どこかで目にした流れだな

678 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:36:09 ]
はい、STLスレの受け売りです。

679 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:38:38 ]
だからテンプレート引数の話とここの話とは
ちょっと違うんじゃないか、と。

680 名前:670 mailto:sage [2008/01/30(水) 23:43:33 ]
C++だと若干の違いはあるにせよ、classの代わりにstructと書くこともできるんですね。
ありがとうございました。



681 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:26:32 ]
newで多次元配列分の確保ってできない?
char *c;
int p=20;
c=new char[p][255];
こんな感じでしたいんだけどこれだとエラーでる

682 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:26:53 ]
char (*c)[255] = new char[p][255];

683 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:32:46 ]
>>682
ありがとうございます。原理はよく分からないけどできました
勉強してきます

684 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:36:46 ]
配列へのポインタを使ってる。
typedef 使うと多少分かりやすいかと。

typedef char BUF[255]; // BUF は char 型 255 要素の配列型
BUF *c = new BUF[p];

やっぱそうでもないか。

685 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:40:26 ]
つまり、char 型 255 要素の配列を p 個確保して、
c[i] とすると i 個目の配列が得られ、
c[i][j] とするとその配列の j 番目の要素にアクセスできる、と。

686 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:53:06 ]
>>684-685
分かり易くありがとうございます。何となく分かったような気がする
とりあえずもう一度newについて再勉強してきます

687 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 01:23:02 ]
newでもmallocでも同じだよ

688 名前:デフォルトの名無しさん [2008/01/31(木) 04:56:35 ]
template <int N, typename T>
struct array_str {
T array[N];
T &operator[](int n) {
return array[n];
}
};
int p = 20;
const int ssize = 255;
vector< array_str<ssize,char> > c(p);
として、以下のように使う方法は?
c[1][1];


689 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:15:04 ]
>>688 使い方を示しながら使い方を聞く意味がわからん。

690 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:19:04 ]
proxy classの話かな?



691 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:37:32 ]
this->template func<type>(arg); という書き方を見たんですが、
this->func<type>(arg); との違いを教えてください。

692 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:48:03 ]
>>691
template付けないとエラーでコンパイルできない場合がある。
.演算子、->演算子、::演算子の後ろにメンバテンプレート特殊化の
名前があり、それがテンプレート仮引数に属している場合がそう。

693 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:52:19 ]
>>691
テンプレート内で、 this の型がテンプレート引数に依存するとき、前者のように
template を明示しないと、コンパイラは this->func<type という部分を
(this->func) < (type) のような比較式と認識してしまう。

694 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:21:51 ]
"ab"でaとbの間に「"」を入れたい場合って「"a""b"」でおk?

695 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:23:28 ]
>>694
"a\"b"

696 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:23:51 ]
\"

697 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:29:43 ]
ありがとう。あぶなく間違って使うところだった

698 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:05:56 ]
まぁやったところで別に問題はないけどね、表示されないだけで

699 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:07:00 ]
確かになw

エスケープを "" で表現するのって、どこの文化だっけ?
どっかで見た気はするんだが。

700 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:46:44 ]
昔のBASICだろ



701 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:50:26 ]
だっけか。全然覚えてないや。

702 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 10:45:56 ]
試しにVBでやってみたら通ったわ。""

703 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 11:36:23 ]
演算子の優先度と結合規則がいまいちよく分かりません。
下の式を意味が変わらない範囲でカッコを外すとどうなりますか?

a = ( b *= ( ( c+d ) << e ) )

( ( * ( a[b] ) ) . c ) -> d

( a - ( ( b-c ) * d ) ) - e

( + ( ++a ) ) + ( ( b&c ) << ( d+e ) )

( ( ( * ( a.b ) ) . c ) -> d ) ++

あと下の4つは順序を明確にするためにカッコを付ける問題です。

a + b * c - d

a <<= b << c <= d

a = b &= c ==d

* a . b * c


参考になるサイトとかありますか?アドバイスお願いします。

704 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 11:39:36 ]
参考になるのは優先順位表
高低だけじゃなくて、右左にも注意

705 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:06:37 ]
テスト問題とか、与えられた式を最適化するようなプログラムを作っているのでなければ
素直にカッコをつけておくというのはどうだろうか。

前提無視ですね、すみません。

706 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:40:09 ]
言語仕様とはちょっと違うけど今でもDB2のSQLは文字列中の"を""で表すぞ

707 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 15:44:34 ]
>>703
そんなの、K&Rにかいてあるだろ

708 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:40:40 ]
ビット演算の優先順位をちゃんと把握してる人なんてそんないないわ。

709 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:09:03 ]
>>703
優先順位がわかりにくいときは括弧つければいいと思うよ。別にかっこ悪くないと思うよ
括弧減らしてもバグが増えたら意味が無いしな。


710 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:35:35 ]
VC++8使ってるんですけど、グローバルスコープの関数ってやっぱり
::CreateWindowEx とかスコープ演算子つけた方が良いのですか?
ネットにあるサンプルコードだと、両方見かけますが…



711 名前:デフォルトの名無しさん [2008/01/31(木) 21:42:54 ]
boostを使わずにstringの文字列を小文字の文字列に変換するにはどうすればよいですか?


712 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:06:34 ]
>>711
string str("HeLLo");

for (int i = 0; i < str.size(); i++) {
str[i] = tolower(str[i]);
}
cout << str.c_str() << endl;
 あまりよろしくないかも。

713 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:12:35 ]
std::transform(str.begin(), str.end(), str.begin(), tolower);

714 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:20:35 ]
ざんねん、あなたのじっそうでは、tolowerは、「まくろ」だった

715 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:30:15 ]
hoge.hで
// 構造体
struct POI{
int n;
float x;
};

// クラス
class hoge
{
public:
hoge(void ); // コンストラクタ
~hoge( void ); // デストラクタ
private:
POI poi[4];
};

と書き、
hoge.cppの
hogeコンストラクタ上で
poiの初期化を行いたいのですがうまくいきません。
今下のようにやっているのですがどのように直せばいいのでしょうか、どうぞよろしくお願いします。

poi = {
{ 1 , 0.5 },
{ 1 , 0.5 },
{ 1 , 0.5 },
{ 1 , 0.5 },
};



716 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:30:29 ]
そ、そんな実装もあるのか・・・。

717 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:31:24 ]
for(int i = 0; i < sizeof poi / sizeof *poi; ++i) {
poi[i].n = 1;
poi[i].x = 0.5;
}

718 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:37:12 ]
>>710
好きなほうでどーぞ

719 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:40:15 ]
>>715
poi = {
{ 1 , 0.5 },
{ 1 , 0.5 },
{ 1 , 0.5 },
{ 1 , 0.5 },
};
その形式が使えるのは宣言時だけなので
>>717
みたいにしないといけません

720 名前:715 mailto:sage [2008/01/31(木) 22:40:59 ]
>>717
できれば
poi = {
{ 1 , 0.5 },
{ 1 , 0.5 },
{ 1 , 0.5 },
{ 1 , 0.5 },
};

こういう風に一括でやりたいのですがこれは無理なのでしょうか?



721 名前:715 mailto:sage [2008/01/31(木) 22:42:07 ]
>>719
すいません、見逃しました。

そうですか、わかりました。ご丁寧にありがとうございます。

722 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:43:14 ]
>>720
POI poi_src[] = {
{ 1 , 0.5 },
{ 1 , 0.5 },
{ 1 , 0.5 },
{ 1 , 0.5 },
};
std::copy(poi_src, pos_src + sizeof poi_src / sizeof *pos_src, poi);

723 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:44:45 ]
POI poi_src[sizeof poi / sizeof *pos] = { ... };

とサイズ指定してた方が安全か。

724 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:45:24 ]
それでもC++0xなら、C++0xならなんとかしてくれる……

725 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:47:00 ]
static const POI poi_src[sizeof poi / sizeof *pos] = { ... };

とした方がいいか。

726 名前:デフォルトの名無しさん [2008/01/31(木) 23:06:46 ]
>>713
ありがとうございます。でもコンパイル通りません。
下のソースだと、
char my_tolower(char s) {
return tolower(s);
}
int main() {
string s = "Hello world";
transform(s.begin(), s.end(), m.begin(), toupper); // コンパイル通らない
transform(s.begin(), s.end(), m.begin(), my_tolower); // コンパイル通る

下のような結果になります。
test.cpp:14: error: no matching function for call to 'transform(__gnu_cxx::__normal_iterator<char*,
std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
<unresolved overloaded function type>)'


727 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:08:32 ]
>>726
>>714 ということか。

728 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:10:03 ]
何かオーバーロードされてるのか・・・

729 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:12:44 ]
>>726
transform(s.begin(), s.end(), m.begin(), static_cast<int(*)(int)>toupper);

730 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:20:45 ]
>>714
両方あるんじゃなかったっけ?



731 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:26:50 ]
インクルードするヘッダによって違わなかったっけ

732 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:46:02 ]
両方あるなら (tolower) でいいってことか

733 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:46:41 ]
#undef tolowerじゃだめなの?

734 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:00:42 ]
>>732
括弧無くても大丈夫だな。
後ろに ( ) がついてないから。

それにしても、うちの gcc じゃ >>726 みたいなエラーでないんだがなあ。
バージョンが違うのか。

735 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:11:15 ]
tolower(int)のほかに、tolower(char)とかtolower(wchar_t)とかあるんでしょ。

736 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:20:07 ]
Cとの互換関数だから、規格的にオーバーロード出来ないと思うが。

737 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:20:08 ]
なら static_cast<int(*)(int)>(tolower) とかしないといけないのか。
面倒臭いな。

738 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:43:56 ]
<locale>かどこかに、第2引数にロカールをとるバージョンがあったと思う。

739 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:45:47 ]
古いヘッダ .h なら通るんだよな
謎だ

740 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:22:21 ]
>>730
Cでは、関数に加えてマクロを用意しても良かったが、
C++だとそれは認められていない。
(JIS X3014:2003では17.4.1.2の6段落目。更に注(159)で明確に指摘されている)



741 名前:デフォルトの名無しさん [2008/02/01(金) 01:28:39 ]
double pai(){
double i,imax,n;
double x,y,pi;

n=0.0;
imax=10000000.0;
for(i=0;i<=imax;i++) {
x=rand()/(RAND_MAX+1.0);
y=rand()/(RAND_MAX+1.0);
if((x*x+y*y)<1.0) {
n+=1.0;
}
}
pi=n/imax*4.0;
return pi;
}
double px(double t){
double pi=pai();
double x,ans;
ans=exp(-x*x/2t)/sqrt(2*pi*t);
return ans;
}
としたら
エラー E2121 kadai1.c 27: 関数呼び出しに ) がない(関数 px )
と出ましたorz
誰か解決策わかるようでしたら教えてください(;´Д`)

742 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:34:28 ]
exp(-x*x/2t)/sqrt(2*pi*t);

2t?

743 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:43:52 ]
あとx初期化してないよね。

744 名前:デフォルトの名無しさん [2008/02/01(金) 01:44:15 ]
c++でswitch文のcaseの中では変数宣言できないですか

745 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:46:26 ]
case HOGE:
{ int t = 0;}
break;

ブロックで囲めばいいんじゃね


746 名前:741 [2008/02/01(金) 01:58:11 ]
>742
解決しましたw
あざす!!

747 名前:デフォルトの名無しさん [2008/02/01(金) 03:31:40 ]
>>745
こっちも解決しました。ありがとう酢。



748 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:16:42 ]
空を自由に飛びたいな
はーい つLSD

749 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:11:19 ]
LoadLibraryでもらったHMODULEはCloseHandleで処分できますか?


750 名前:デフォルトの名無しさん [2008/02/01(金) 19:24:52 ]
どこで質問すればいいのかわからないほどくだらない質問なのですが、
よく引数であるchar* pszMessageのpszってどういう意味ですか?
Pointer Stringはわかるんですが、Zがいったいなんなのか・・・



751 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:27:11 ]
zはzero、szはヌル終端文字列のこと。

752 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:29:52 ]
pointer string zero-terminated






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<252KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef