スレを勃てるまでもないC/C++の質問はここで 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/17(水) 15:41:48過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0523デフォルトの名無しさん
2008/12/08(月) 22:30:52class CHoge
{
const int path
public:
CHoge();
void Show();
};
CHoge::CHoge() : path(1024){}
void CHoge::Show(){
char lo[path]; // ここでエラー
printf( "%d\n", path ); // ここはOK
}
void main()
{
CHoge hoge;
hoge.Show();
}
う〜ん
error C2057: 定数式が必要です。
error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。
error C2133: 'lo' : サイズが不明です。
とエラーがでるんですが、#define の変わりにはならないんでしょうか?
0524デフォルトの名無しさん
2008/12/08(月) 22:34:22CHoge::pathとかいろんな言語でありがちな書き方だと思うけど
0525デフォルトの名無しさん
2008/12/08(月) 22:37:070526デフォルトの名無しさん
2008/12/08(月) 22:45:11あとそうすると定義方法が変わるけど
0527デフォルトの名無しさん
2008/12/08(月) 22:46:20C++ではできるよ
0528デフォルトの名無しさん
2008/12/09(火) 00:04:01これ、クラス・関数外ならstaticは要らない。
0529デフォルトの名無しさん
2008/12/09(火) 11:59:20while(a!=c) a++;この文ってa++だけ繰り返すんだよね?
0530デフォルトの名無しさん
2008/12/09(火) 12:00:25static ではない const は「インスタンス生成後に書き換えないよ」というだけで
コンパイル時に決定できないかも知れない。なので、
>#define の変わりにはならないんでしょうか?
ならない。ここは素直に頭に static 付けて、後ろに = 1024 付けるよろし。
但し、もし VC++ 6.0 だとこれもできないんで enum hack 使うしかない。
>>529
是。
0531デフォルトの名無しさん
2008/12/09(火) 12:07:40529だけどおkと解釈しますね
0532530
2008/12/09(火) 12:42:49そです。おk。
0533デフォルトの名無しさん
2008/12/09(火) 13:02:42a!=c も繰り返すよ、というのが正確だけどまあいいか
0534デフォルトの名無しさん
2008/12/09(火) 14:23:28なんでa=c;にしないの
0535デフォルトの名無しさん
2008/12/09(火) 14:36:210536デフォルトの名無しさん
2008/12/09(火) 15:01:030537デフォルトの名無しさん
2008/12/09(火) 15:43:060538デフォルトの名無しさん
2008/12/09(火) 16:28:47言われてみればそうだな
指摘あんがと
0539デフォルトの名無しさん
2008/12/09(火) 18:14:40大丈夫、中国語では「そう」って感じの意味だ
0540デフォルトの名無しさん
2008/12/09(火) 18:43:190541デフォルトの名無しさん
2008/12/09(火) 19:59:200542デフォルトの名無しさん
2008/12/09(火) 20:15:130543デフォルトの名無しさん
2008/12/10(水) 02:06:45「是」は「はい」だ
「対」が「そう」に近い
0544デフォルトの名無しさん
2008/12/10(水) 02:46:18対か。謝謝。
0545デフォルトの名無しさん
2008/12/10(水) 08:30:11つまり、「「はい」ではなく「いいえ」だとしても」という意味だね。
0546デフォルトの名無しさん
2008/12/10(水) 09:24:260547デフォルトの名無しさん
2008/12/10(水) 09:36:53台詞からして、相良軍曹だな。
0548デフォルトの名無しさん
2008/12/10(水) 12:46:39scanf()は入力したものを受け取る関数だと思うのですが、
受け取れる箇所は1つだけなのでしょうか?
例:scanf("%d",&a)は10進数で受け取り、aに保存?すると思いますが
scanf("%d",&a,&b)のように複数に保存できるようにはできないでしょうか?
変な質問でスマソ、意味がわからなかったら軽くスルーしてください orz
0549デフォルトの名無しさん
2008/12/10(水) 12:48:08scanf("%d %d", &a, &b);
//コンマ区切り
scanf("%d,%d", &a, &b);
0550デフォルトの名無しさん
2008/12/10(水) 17:40:07b=a;
とするしか。
0551デフォルトの名無しさん
2008/12/10(水) 18:09:08馬鹿だな。
0552デフォルトの名無しさん
2008/12/10(水) 21:41:53下記画像のようにスペース部分に色つき矢印やらドットやらが表示されて消えなくなってしまいました。
どこかでキーボード押し違えたみたいで・・
この設定の解除の仕方を分かる方いたら教えてください><
↓
http://imepita.jp/20081210/770880
0553デフォルトの名無しさん
2008/12/10(水) 21:42:55#-------------------------------------- リンカ(GUI)
linkexe = $(linkopt) -Tpe -aa
#-------------------------------------- リンカ(CONSOLE)
linkcon = $(linkopt) -Tpe -ap
#-------------------------------------- リンカ(DLL)
linkdll = $(linkopt) -Tpd -aa
linkconとlinkdllのマクロが使用されている箇所が、
この行以下にはありません。
しかし、linkconとlinkdllの記載を削除すると、リンク時にエラーが出ます。
$(name)T.EXE: FOO1.OBJ $(sobj) $(name)T.RES
$(linkexe) @&&|
$(C0GUI) FOO1 $(sobj)
$(linkout)$.
!if $(UseBCC)
$&
$(DebugLib) NOEH32 IMPORT32 CW32
!endif
$&.RES
|
質問
�@リンクエラーでは、 $(linkexe) @&&| という部分に関係がしていると思われるのですが、
@&&| の意味が分かりません。この意味について教えて頂けませんでしょうか。
または参考になるサイトがあれば、そちらを教えて頂きたいです。
�A$(linkout)$.
$. の意味も分かりません。
0554デフォルトの名無しさん
2008/12/10(水) 21:46:49Make専用スレへどうぞ。
>>552
VisualStudio専用スレへどうぞ。
どちらもC/C++の質問ではありませんね。
0555552
2008/12/10(水) 22:31:10またよろしくお願いします。
0556553
2008/12/10(水) 22:32:45またよろしくお願いします。
0557なめ
2008/12/10(水) 22:39:29というフォーマットのファイルがあるとします。
これを、それぞれを文字列として、構造体に格納するとします。
構造体の例:
struct{
std::string a; // IDを格納
std::string b; // 名前を格納
std::string c; // 性別を格納
}_dataType;
各行には、上記の3つのレコードだけだとして、
区切り文字は、半角空白か、Tab('\t')
行末には空白文字は許容するけど、それは、構造体の「性別」を格納する変数には
含まない
てな条件で、データファイルを読み込む場合、
std::stringで、std::getline() を使う
char * で、fstream::getline()をつかう
char * で、fgets()を使う
その他
どれが一番楽なのか教えてほしいっす。できれば、切り分けするところのサンプルなんかも。。。
環境:gcc + cygwin
できれば、Linuxにも流用したいので、Win系のライブライは使いたくないです。
0558デフォルトの名無しさん
2008/12/10(水) 22:45:46http://pc11.2ch.net/test/read.cgi/tech/1226229627/57,60-61
0559デフォルトの名無しさん
2008/12/10(水) 22:51:07短絡的な意味で最も簡単なのはfscanfだろうね
0560デフォルトの名無しさん
2008/12/10(水) 22:55:56char tId[1000];
char tName[1000];
char tGener[1000];
fscanf(fp, "%999s%999s%999s", tId, tName, tGender);
fclose(fp);
_dataType foo = {tId, tName, tGender};
0561デフォルトの名無しさん
2008/12/10(水) 23:16:19え?
0562デフォルトの名無しさん
2008/12/11(木) 09:02:29そういう質問みたいだが。
>>548
>scanf("%d",&a,&b)のように複数に保存できるようにはできないでしょうか?
>>557
楽なのは stream I/O で >> 演算子。
>>560
無根拠に1000とか。
0563デフォルトの名無しさん
2008/12/11(木) 10:21:06としたいだけだろ。b)を全角で書くような奴の質問だぞ。
0564デフォルトの名無しさん
2008/12/11(木) 10:41:120565デフォルトの名無しさん
2008/12/11(木) 11:56:03if elseで場合わけしてっていうのならわかりますが
0566デフォルトの名無しさん
2008/12/11(木) 12:09:060567デフォルトの名無しさん
2008/12/11(木) 12:13:53判定: (true→true)∨(false→false)
0568デフォルトの名無しさん
2008/12/11(木) 12:18:57言いたいことがよくわからん。
複数のフラグをint型の変数に保存していて、その簡単な取り出し方法
ということなら (質問の意味は) わかるが。
0569デフォルトの名無しさん
2008/12/11(木) 12:19:38すいません
0570デフォルトの名無しさん
2008/12/11(木) 12:21:340571デフォルトの名無しさん
2008/12/11(木) 12:22:20else flag = true;
これを一発でかけないものかと思ったんです
0572デフォルトの名無しさん
2008/12/11(木) 12:33:140573デフォルトの名無しさん
2008/12/11(木) 12:40:45flagがtrue, 0以外の値を取るときはだめ
0574デフォルトの名無しさん
2008/12/11(木) 12:49:020575デフォルトの名無しさん
2008/12/11(木) 12:49:120576デフォルトの名無しさん
2008/12/11(木) 12:55:36真偽値が入った変数ならif(flag)で良いのに
0577デフォルトの名無しさん
2008/12/11(木) 13:42:55if や while の条件式には比較演算子がないといけない、と
思い込む人が多いね。
0578デフォルトの名無しさん
2008/12/11(木) 13:57:10そうしたほうがわかりやすいから、わざわざそうしてるよ
0579デフォルトの名無しさん
2008/12/11(木) 14:02:250580デフォルトの名無しさん
2008/12/11(木) 14:05:130581デフォルトの名無しさん
2008/12/11(木) 14:05:360582デフォルトの名無しさん
2008/12/11(木) 14:09:26実行コードに差は出ないからどっちでもいいじゃん
0583デフォルトの名無しさん
2008/12/11(木) 14:29:29話題を実行コードに限定して「差は出ない」とか、どんだけ勝手なんだ。
0584デフォルトの名無しさん
2008/12/11(木) 15:03:40使ってない変数を放置とか、変数名に適当に連番つけちゃうタイプでしょ。
どうせ実行コードには関係ないしーって。
0585デフォルトの名無しさん
2008/12/11(木) 15:48:09というより、初心者は条件式について誤解してるんだよな。
ifやwhileが条件式を要求してる=条件式を解釈してると思ってるみたいな。
・条件式は値を返す
・if、whileなどは値が真か偽かを見てるだけ
ということを理解出来たらそんな誤解しないんだけどね。
0586デフォルトの名無しさん
2008/12/11(木) 16:00:46if((hoge=func()) != 0)
条件式の中で代入すんなって言われそうだがw
0587582
2008/12/11(木) 16:03:11変数名はきちんとつけるよ
0588デフォルトの名無しさん
2008/12/11(木) 16:15:01hoge=func()がブール型でないなら、!= 0はありだと俺は思うよ。
ブール型なら、次のどっちかにするけど。
1.
hoge = func();
if (hoge)
2.
if (bool hoge = func())
0589デフォルトの名無しさん
2008/12/11(木) 16:48:09int i = 0; // iに0を代入
こんなコメント付けるタイプですね?
0590デフォルトの名無しさん
2008/12/11(木) 17:10:38いや、iを0で初期化、だよ。
0591デフォルトの名無しさん
2008/12/11(木) 17:33:280592デフォルトの名無しさん
2008/12/11(木) 18:19:38だからお前修正前のコードを#if 0で残しておくなって
0593デフォルトの名無しさん
2008/12/11(木) 18:36:20・戻したくなる時とかあるでしょ
・修正に至る経緯を知るためにも大切なんですよ
あたりかな。
0594デフォルトの名無しさん
2008/12/11(木) 18:40:230595デフォルトの名無しさん
2008/12/11(木) 18:53:13コンフリクト祭りになるんだけど、どうにかならない?
0596なめ ◆dHe9wXXwgk
2008/12/11(木) 21:44:46ありがとうございます。
fscanf で、delimiterが、'\t'とか扱えるんですか?また、複数の' 'を1つの区切りとして扱えましたっけ?
>>560
ありがとうございます。
[1000]の部分は、可変長(極端な話、65535 とか)にしたいですが、その場合この方法だと難しいですよね
>> 562
>楽なのは stream I/O で >> 演算子。
ありがとうございます。
速度の面でどうなんでしょうか?
あと、delimiterが、TABの場合は可能でしょうか?
0597デフォルトの名無しさん
2008/12/11(木) 21:48:190598デフォルトの名無しさん
2008/12/11(木) 22:12:51スレ違いながらもいい機会だと思ったのになー
vcprojファイル内の順番がぐちゃぐちゃにならない方法でもいいんだけど。
0599デフォルトの名無しさん
2008/12/11(木) 22:36:31double log2(double a,double b){
return log(b)/log(a);
}
とやるしかないんかのぉ。
0600デフォルトの名無しさん
2008/12/11(木) 23:07:08なんでプロジェクトファイルをみんなで弄るんだ?
つーか、Subversionスレに行けって。
>>599
ない。
>>596
1000が65536でも別に構わんと思うが。どっちみち、最大サイズの仮定なんだから。
0601デフォルトの名無しさん
2008/12/12(金) 08:12:13ユーザーが入力するのは52進数か62進数のパスワードです。このとき変数がオーバーフローしないようにすることを考えると、
いちいち52進数ないし62進数の最大値を求めてそれ以上上がらないように設定するしかないでしょうか?
(例えばある桁がAで左の桁がBでさらにその左の桁がCならその桁は上げることができない)
それともif文でif(変数 + 上昇量 > 2147483647)のようにif文の中だけでオーバーフローするようなことができるのでしょうか?
0602デフォルトの名無しさん
2008/12/12(金) 08:27:5752進数は「A〜Z,a〜z」、62進数は「0〜9,A〜Z,a〜z」ってことか?
> if文でif(変数 + 上昇量 > 2147483647)のようにif文の中だけで
> オーバーフローするようなことができるのでしょうか?
可能かどうかと言えばできる。
環境や言語は知らんが、WindowsでVC++(MFC)なら、CEdit派生クラスで
OnCharをオーバーライドかな。
それよりも問題は、入力途中の段階で52進数か62進数かを、どうやって
判断するのかだ?
それと52進数で「A」と入力した時と、62進数で「A」と入力した時では、
数値に変換した際に値が違うのか?
0603デフォルトの名無しさん
2008/12/12(金) 08:32:20解答ありがとうございます。
52進数か62進数と言ったのは単に自分が仕様をまだ決めてないだけです。
環境はSolaris コンパイラはcc or gccです。
0604601
2008/12/12(金) 09:41:27pass[1] * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 +
pass[2] * 62 * 62 * 62 * 62 * 62 * 62 * 62 +
pass[3] * 62 * 62 * 62 * 62 * 62 * 62 +
pass[4] * 62 * 62 * 62 * 62 * 62 +
pass[5] * 62 * 62 * 62 * 62 +
pass[6] * 62 * 62 * 62 +
pass[7] * 62 * 62 +
pass[8] * 62 +
pass[9] > 2147483647) pass[now_i]--;
実際にプログラミングしてみたらこのコードがうまく動きませんでしたどうしたらいいでしょうか?
0605デフォルトの名無しさん
2008/12/12(金) 09:44:24お馬鹿さんや、62の9乗を計算してご覧。
高高6桁で桁溢れするわけだが。
0606601
2008/12/12(金) 09:46:03でもオーバーフローするif文も書けるんじゃなかったんですか?
0607601
2008/12/12(金) 09:50:20pass[10] = 60 のときでも if文がなぜか false になってしまいます。
if(pass[10] * 62 * 62 * 62 * 62 +
pass[11] * 62 * 62 * 62 +
pass[12] * 62 * 62 +
pass[13] * 62 +
pass[14] > 99999) pass[now_i]--;
0608デフォルトの名無しさん
2008/12/12(金) 10:08:1162^ 4= 14776336
62^ 9= 13537086546263552
62^ 13= 200028539268669788905472
0609デフォルトの名無しさん
2008/12/12(金) 10:12:39プロジェクトにファイルを追加するのが複数人いるってそんなに珍しいことか?
うちはロックするようにして回避してる。
>>607
うちではtrueになるよ。
0610デフォルトの名無しさん
2008/12/12(金) 10:53:05if((最大値-進数) < 前の桁までの合計値 ) && (新しい桁の数値 > (最大値-前の桁までの合計値))
{
//オーバーフロー処理
}
あってるかどうかは試してないから分からんが方向性はこんなんのはず
オーバーフローする直前のタイミングを捕まえて、本当にオーバーフローするかどうかを「オーバーフローさせないで」判定する
0611デフォルトの名無しさん
2008/12/12(金) 12:01:54なるほど!!!式変形すれば良かっただけでしたか。
その方針でプログラミングしてみます。
0612デフォルトの名無しさん
2008/12/12(金) 12:04:52あと、unsignedなら42億じゃないかと思う。
0613デフォルトの名無しさん
2008/12/12(金) 12:20:51うちの環境では unsigned u; と定義した変数が21億までしか持てませんでした
あとなぜかオーバーフローしたら負の値になりました。
0614613
2008/12/12(金) 12:28:28unsignedの最大値は42億かもしれません。
0615デフォルトの名無しさん
2008/12/12(金) 12:51:040616デフォルトの名無しさん
2008/12/12(金) 13:15:050617デフォルトの名無しさん
2008/12/12(金) 14:26:47約9.6桁。
0618デフォルトの名無しさん
2008/12/12(金) 14:32:32unsignedが負になるわけないだろ
どうみてもsigned longの値
0619デフォルトの名無しさん
2008/12/12(金) 15:01:480620デフォルトの名無しさん
2008/12/12(金) 18:58:41int NUM = 100; グローバル変数
int func(){
NUMを使う
}
とするのと
int func(int NUM){
}
int main(){
int NUM =100;
func(NUM);
}
では実行速度かわりますかね??funcを1000回ぐらい呼び出すんですが・・・
0621デフォルトの名無しさん
2008/12/12(金) 19:06:30って思ってるのであれば全く問題ない最適化の対象だからうまいことやってくれる
つか高々1000回かよwwwwwww
0622デフォルトの名無しさん
2008/12/12(金) 19:30:09余分な命令が実行されるので、実行速度は確実に変わる。
でも1000回なら誤差の範囲。
■ このスレッドは過去ログ倉庫に格納されています