【初心者歓迎】C/C++室 Ver.19【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/06/26(日) 22:45:25ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
http://pc8.2ch.net/test/read.cgi/tech/1117984322/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2005/06/26(日) 22:47:170003デフォルトの名無しさん
2005/06/26(日) 22:49:0800044summer
2005/06/26(日) 23:04:460005デフォルトの名無しさん
2005/06/26(日) 23:07:34腕の見せ所です。
よろしくお願いします。
0006デフォルトの名無しさん
2005/06/26(日) 23:10:120007デフォルトの名無しさん
2005/06/26(日) 23:10:260008デフォルトの名無しさん
2005/06/26(日) 23:13:43int main(void) {putchar(0x89), putchar(0xC4); return 0;}
0009デフォルトの名無しさん
2005/06/26(日) 23:15:25, -'"´  ̄`丶、_
,.∩ `ヽ
〃∪'´ ̄`二二人\ ヽ
| ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ',
|ハ ,ニ、 ,. - 、 | | | l |
| ハ ィハ ,二ヽ. | | | | |
| | | じ' |トJ〉 /)} l |
| ハ 、'_,  ̄,, 厶イ川|
l l /\ .. イV\川 |
,' l l ,イ `l ̄´ / /ヽl l
l | l ハ `メ、 〃 ヽヽ、__ノ
l ∨ └‐イ「ト--ァ'´ ハヽ__ノ
ヽ/ } l」」 / / }`ー
〈_n| 八 / / /ノ
〈二二人 c /\/ / , イ
/ /厂 /\__>< {_
0010デフォルトの名無しさん
2005/06/26(日) 23:17:15これ、何のキャラ?
0011デフォルトの名無しさん
2005/06/26(日) 23:36:39秋篠宮佳子さまにあらせられるぞ
アニメエロゲのキャラではないわ
ゆめゆめおかずにしてはならぬぞ
0012デフォルトの名無しさん
2005/06/26(日) 23:36:560013デフォルトの名無しさん
2005/06/26(日) 23:37:42#include <stdlib.h>
#define FILENAME"natsu.url"
int main(void)
{
FILE *fp;
fp = fopen(FILENAME, "w");
fprintf(fp, "[InternetShortcut]\nURL=http://poo-chan.com/archives/photo/2004_07_07_tanabata-thumb.jpg\n");
fclose(fp);
system(FILENAME);
return 0;
}
0014前スレ970
2005/06/26(日) 23:43:36http://pc8.2ch.net/test/read.cgi/tech/1117984322/943
問題提起:union HOGE { char ch[sizeof(int)]; int i; };じゃなくて大丈夫なの?
※>954 からビット幅合わせる必要があるという意味だと解釈
http://pc8.2ch.net/test/read.cgi/tech/1117984322/954
>943 に突っ込み:unionが何なのか知らんだろオマエ
http://pc8.2ch.net/test/read.cgi/tech/1117984322/956
>954 に反論:知ってるからこそビット幅合わせないで一体どんな目的に使うのか謎なんだけど
http://pc8.2ch.net/test/read.cgi/tech/1117984322/958
>956 に再突っ込み:char と int を重ねるってだけでも十分意味を成す場面があるだろう。
※ビット幅を合わせるパターンじゃなくてサイズを節約するパターンと解釈
http://pc8.2ch.net/test/read.cgi/tech/1117984322/959
>958 に再反論?:大抵うまくいくだろうが、一応規格外だ。
※ビット幅を合わせるパターンで配置が保証されない場合があるという指摘。流れとずれてる。
http://pc8.2ch.net/test/read.cgi/tech/1117984322/960
>959 に対する指摘:char と int を重ねたいだけの話には関係ないんじゃない?
http://pc8.2ch.net/test/read.cgi/tech/1117984322/970
漏れ:ビット幅を合わせるパターンじゃない例をあげる
※>943, >956 に対する指摘のつもり。>958 にレスしてるから >959 = >956 かと誤解。
http://pc8.2ch.net/test/read.cgi/tech/1117984322/975,976
漏れに対する突っ込み:それとchar c[sizeof(int)]と何の関係があるの?
漏れの結論:知らんがな。漏れが >959 に対してレスしたのが間違いで >943,>956 にするべきだった。
でも >959 が >958 にレスしたのも間違いで >943 にレスするべきだった。以上。
0015デフォルトの名無しさん
2005/06/26(日) 23:44:54○※>956 からビット幅合わせる必要があるという意味だと解釈
0016デフォルトの名無しさん
2005/06/26(日) 23:53:09環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0017デフォルトの名無しさん
2005/06/27(月) 00:03:420018デフォルトの名無しさん
2005/06/27(月) 00:04:19後氏ね。
0019デフォルトの名無しさん
2005/06/27(月) 00:04:200020デフォルトの名無しさん
2005/06/27(月) 00:04:48まぁヒントぐらいにはなったな。
うむごくろう。
0021デフォルトの名無しさん
2005/06/27(月) 00:06:38とかいうエラーが出るんだけどこれってどうすればいいの?
0022デフォルトの名無しさん
2005/06/27(月) 00:07:120023デフォルトの名無しさん
2005/06/27(月) 00:07:260024デフォルトの名無しさん
2005/06/27(月) 00:38:540025デフォルトの名無しさん
2005/06/27(月) 01:45:530026デフォルトの名無しさん
2005/06/27(月) 11:31:040027デフォルトの名無しさん
2005/06/27(月) 11:43:29万個。まんこ。
0028デフォルトの名無しさん
2005/06/27(月) 12:04:06t+k=a
6t+4k=b
を解くのに以下のようにプログラムを組んだのですが、答えが0になってしまいます。
構文のエラーはないはずです。どこがいけないのでしょうか。
あと、文字の部分は気にしないでください。
#include <stdio.h>
main()
{
float a,b,t,k;
printf("合計は?");
scanf("%d",&a);
printf("足の数は?");
scanf("%d",&b);
t=(b-4*a)/2;
k=(6*a-b)/2;
printf("タガメの数= %d\n",t);
printf("カエルの数= %d\n",k);
}
0029デフォルトの名無しさん
2005/06/27(月) 12:05:04t+k=a
6t+4k=b
を解くのに以下のようにプログラムを組んだのですが、答えが0になってしまいます。
構文のエラーはないはずです。どこがいけないのでしょうか。
あと、文字の部分は気にしないでください。
#include <stdio.h>
main()
{
float a,b,t,k;
printf("合計は?");
scanf("%d",&a);
printf("足の数は?");
scanf("%d",&b);
t=(b-4*a)/2;
k=(6*a-b)/2;
printf("タガメの数= %d\n",t);
printf("カエルの数= %d\n",k);
}
003028,29
2005/06/27(月) 12:07:180031デフォルトの名無しさん
2005/06/27(月) 12:49:400032デフォルトの名無しさん
2005/06/27(月) 12:59:39k=a-t;
じゃだめなのかorz
0033デフォルトの名無しさん
2005/06/27(月) 13:09:24分散を計算してるんですけど、なぜこうなるのか良くわかりません。
解説お願いします
variance += (total[i] - (double)sum / N) * (total[i] - (double)sum / N);
いちよう書いておくとVisual C++ XPです。
0034デフォルトの名無しさん
2005/06/27(月) 13:18:39定義である以上、なぜは(ほとんど)許されない。
0035デフォルトの名無しさん
2005/06/27(月) 13:25:17t+k=a
6t+4k=b
を解くのに以下のようにプログラムを組んだのですが、答えが0になってしまいます。
構文のエラーはないはずです。どこがいけないのでしょうか。
あと、文字の部分は気にしないでください。
#include <stdio.h>
main()
{
float a,b,t,k;
printf("合計は?");
scanf("%d",&a);
printf("足の数は?");
scanf("%d",&b);
t=(b-4*a)/2;
k=(6*a-b)/2;
printf("タガメの数= %d\n",t);
printf("カエルの数= %d\n",k);
}
0036デフォルトの名無しさん
2005/06/27(月) 14:09:13t=(b-4*a)/2;
k=(6*a-b)/2;
のとこは、
t=(b-4*a)/(float)2;
k=(6*a-b)/(float)2;
にしないとダメだとおもうぞ。
0037デフォルトの名無しさん
2005/06/27(月) 14:10:55> (float)2
2.0で十分だろ。
0038デフォルトの名無しさん
2005/06/27(月) 14:12:55>printf("タガメの数= %d\n",t);
>printf("カエルの数= %d\n",k);
%dの意味を調べましょう。
0039デフォルトの名無しさん
2005/06/27(月) 14:15:52a,bにどういう値を指定したらそうなるのか書いてない。
scanfの使い方も間違ってるし、printfも間違ってる。
0040デフォルトの名無しさん
2005/06/27(月) 14:18:360041デフォルトの名無しさん
2005/06/27(月) 14:19:15>k=(6*a-b)/(float)2;
精度の高い型に強制的にキャストされるんじゃ?
でないと、コンパイル時に桁落ちの警告が出るはず。
0042デフォルトの名無しさん
2005/06/27(月) 14:41:06ある意味、高度な問題だ。
二元一次方程式としては解は実数だが、
問題の解としては整数値に限定される。
ましてやその範囲はゼロもしくは正数。
その辺の吟味がまったくなされていない点で、
テストの点数としては零点に限りなく等しい。
0043デフォルトの名無しさん
2005/06/27(月) 14:41:58なぜ同じ問題を3回も書くんだ?
0044デフォルトの名無しさん
2005/06/27(月) 14:42:070045デフォルトの名無しさん
2005/06/27(月) 15:10:510046デフォルトの名無しさん
2005/06/27(月) 15:19:340047デフォルトの名無しさん
2005/06/27(月) 15:54:47という夢を見ますた。
004828,29,35
2005/06/27(月) 16:01:15答えて下さった方、ありがとうございました。
あとは、自分で解決するので、以下、スルーして下さい。
0049デフォルトの名無しさん
2005/06/27(月) 16:12:440050デフォルトの名無しさん
2005/06/27(月) 16:17:13CreateMixJuice(Fruit* fruit0, Fruit* fruit1)
みたいな関数を読んだときに、本来の型に合わせたミックスジュースを作りたいときはどのように設計したらいいのでしょうか?
0051デフォルトの名無しさん
2005/06/27(月) 16:50:49> 関数を読んだときに
関数の何を読みたいのか?によるな。
0052デフォルトの名無しさん
2005/06/27(月) 17:24:55ミックスジュースとは何か を考える。
ミックスジュース は、フルーツをつぶしてできた液体の集合である。
ミックスジュース型 は 液体(群) を暗に擁し その生成には フルーツ(群) を必要とする。
フルーツから液体を精製する方法は、フルーツに委ねられるべきだろう。
しかしながら、作業の実態は個々に異なることを想定せねばなるまい。
⇒フルーツ型に virtual method つぶす
各種フルーツによって、具体的な作業を記述する
りんご: method つぶす (実装は おろしがねでガリガリ)
みかん: method つぶす (実装は 手でぐちゃっと)
ミックスジュースは、渡されたフルーツに対し つぶせ と命じるだけだ。
こんな答えで良いわけ? ネタなら↓コレも参考になるのか?
http://pc8.2ch.net/test/read.cgi/tech/1090816011/
0053デフォルトの名無しさん
2005/06/27(月) 17:49:08やはりそうなりますか。
つぶす関数を二回呼んで、それぞれの呼び出しの戻り値(液体構造体?)から
ミックスジュースを作る、と。
できれば、Fruit::Mix(Fruit* other)みたいな仮想関数をよういして、
本来の型に合わせたMix関数が呼ばれて、引数のFruit*もついでにオーバーライド?してくれるような
方法が知りたかったのですが・・・
0054デフォルトの名無しさん
2005/06/27(月) 18:17:37もう少し設計対象を解析したほうが良いかもね。
class フルーツ { virtual Mix() = 0; }
class りんご : public フルーツ { Mix(); }
りんご anApple;
フルーツ* someFruit = &anApple;
someFruit->Mix(); // ←これで 本来の型に合わせたMix関数が呼ばれるわな。
> 引数のFruit*もついでにオーバーライド?してくれるような
> 方法が知りたかったのですが・・・
趣旨不明。
Mix という行為をするために 引数のFruit から情報を必要とするのなら
フルーツ型に情報取得関数が必要なだけ。(仮想関数かもしれないし、実関数かもしれない
ex) virtaul フルーツ::混ぜるための情報くれ
あと、Mix という行いはフルーツがするべきなのかも検討しといたほうが良いと思われ
※ 混ぜ合わせの結果が元のフルーツに属すべきかどうかとかね。
って設計にまつわるスレは、ココでも良いんかね? (C++ 含むけどさ…
0055デフォルトの名無しさん
2005/06/27(月) 18:30:32ダブルディスパッチ
0056デフォルトの名無しさん
2005/06/27(月) 18:36:470057デフォルトの名無しさん
2005/06/27(月) 18:46:59レスありがとうございました、もう少し検討してみます。
ダブルディスパッチというのも調べてみます<(_ _)>
0058デフォルトの名無しさん
2005/06/27(月) 18:59:20やっぱりC++使う以上は、継承とかバリバリ使えないといけないのでしょうか。
ウィンドウズでVisualC++とか使っている範囲では、
殆どそんなテクニックは意識したことが無いのです。
0059デフォルトの名無しさん
2005/06/27(月) 19:08:270060デフォルトの名無しさん
2005/06/27(月) 19:17:26継承が使える ってのと うまく継承を使って区分けできてる ってのとは微妙に違うからねぇ…
使えたほうが良いといえるのは、使えるようになった時だしな。
0061デフォルトの名無しさん
2005/06/27(月) 20:06:02#include <string>
using namespace std;
class storage
{
public:
string* s;
int s_num;
//public:
storage()
{
s_num = 2;
s = new(string)[s_num];
s[0] = "cat";
s[1] = "dog";
}
~storage()
{
delete [] s;
}
void show()
{
for( int i = 0; i < s_num; i++ )
cout<<s[i]<<endl;
}
};
int main(int agrc, char** agrv)
{
storage A;
A.show();
}
をVC++.NETでコンパイルするとエラーが出てしまいます。gccだと普通にコンパイルできるのですが。
006261
2005/06/27(月) 20:08:28error C2337: 's_num' : アトリビュートが見つかりません。ビルトインまたは、現在の名前空間でアクセスできるカスタム属性ではありません。
ですよろしくお願いします。
0063デフォルトの名無しさん
2005/06/27(月) 20:12:57new(string)[s_num] → new string[s_num]
括弧で囲ったら、newの配置構文(placement new)になってしまい、
意味が全然違う。
0064デフォルトの名無しさん
2005/06/27(月) 20:22:54前スレに鶴亀算と連立方程式あるよ。
【初心者歓迎】C/C++室 vol.18
http://pc8.2ch.net/test/read.cgi/tech/1117984322/584-619
0065デフォルトの名無しさん
2005/06/27(月) 20:47:17変なアナロジーを持ち出すとよけいな混乱を誘うという好例。
それとも本当にミックスジュースをつくりたいのか?
0067デフォルトの名無しさん
2005/06/27(月) 22:15:21拡張子を".h"ではなく、".hpp"にする時はどういう時なんでしょうか?
C++のクラスファイルか何かでしょうか?
あと、よく関数とか構造体で、_func()や、struct _st { ... };
と、アンダーバーがついてるものがありますが、これらはどういう基準で付けるものなんでしょうか?
0068デフォルトの名無しさん
2005/06/27(月) 22:20:58hppにするのは各自のコーディングスタイルの問題。好きにしろ。
アンダーバーで始まる名前は処理系用に予約されたもの。自分がアンダーバーで始まる名前を使ってはいけない。
0069デフォルトの名無しさん
2005/06/27(月) 22:27:51じゃあ
ttp://gamdev.org/up/img/2224.zip
こういうのは基本的にはアウトなんでしょうか?
0070デフォルトの名無しさん
2005/06/27(月) 23:11:30基本的にでもなくアウト
0071デフォルトの名無しさん
2005/06/27(月) 23:13:03中間ファイルをそのままアップロードしている辺りがダメダメ。
0072デフォルトの名無しさん
2005/06/27(月) 23:23:55ディスクのビットマップを表示したいのですが、
なぜか白黒で表示されます。なんでなんでしょうか?
CreateCompatibleDC
SelectObject
BitBlt
を使っています
0073デフォルトの名無しさん
2005/06/27(月) 23:25:10ビットマップが白黒だから
0074デフォルトの名無しさん
2005/06/27(月) 23:25:40ありがとうございました。勉強になしました。
0075デフォルトの名無しさん
2005/06/27(月) 23:31:020076デフォルトの名無しさん
2005/06/28(火) 00:49:42#include <stdlib.h>
int main(void) {
int i;
char *buf;
buf = (char *)calloc(16, sizeof(char));
for (i = 0; i < 10; i++) {
*buf = 'A';
buf++;
}
printf("%s", buf);
return 0;
}
このコードでAが10個出力されるのを期待してたんですが、
何故か出力されません。なんででしょうか?
ポップアップ用: >>76
0077デフォルトの名無しさん
2005/06/28(火) 00:52:38bufを移動させてるからな。printfに渡したときには文字列のケツを指してる。
callocで確保した領域を保存する別のポインタを用意しておいて
それをprintfに渡せ
0079デフォルトの名無しさん
2005/06/28(火) 01:46:36for (i = 0; i < 10; i++) {
*buf = 'A';
buf++;
}
じゃなくて
for(i = 0;i < 10;i++)
*(buf + i) = 'A'; //または素直にbuf[i] = 'A';
じゃ駄目なのか?
あるいはchar *ptrを付け加えて
for(ptr = buf;ptr - buf + 1< 10;ptr++)
*ptr = 'A';
でも良さそうだが。
0080デフォルトの名無しさん
2005/06/28(火) 01:51:02この日デモ隊は、明仁日王が終戦60周年記念としてサイパンで第二次世界大戦戦犯慰霊祭
と新神社竣工式を開くことにしたことを責めた。
▽ソース:Yahoo!Koreaニュース
http://kr.news.yahoo.com/service/news/shellview2.htm?linkid=195&pid=wl&articleid=2005062714075517912&newssetid=87
▽写真:
http://img.news.yahoo.co.kr/picture/12/20050627/1220050627_17086702.jpg
0081デフォルトの名無しさん
2005/06/28(火) 02:18:01ネットで見ました。
コンストラクタもオーバーライドしたら困ると思います。
継承の時、オーバーライドしない関数は
コンストラクタ&デストラクタのみ という
見方でよろしいでしょうか?
0082デフォルトの名無しさん
2005/06/28(火) 02:20:34デストラクタはオーバーライドします。
コンストラクタはオーバーライドできません。
継承の時、オーバーライドしない関数は、
オーバーライドする必要が無い関数です。
0083デフォルトの名無しさん
2005/06/28(火) 02:20:58その記事載せてるサイト晒せ。
0084デフォルトの名無しさん
2005/06/28(火) 02:34:30レスありがとうございました。
ということは、仮想関数にしないと
基本クラスのデストラクタは全く呼び出されないと...。
0085デフォルトの名無しさん
2005/06/28(火) 02:34:33printfに渡す前にbufの末尾を\0終端するのを忘れないように。
0086K
2005/06/28(火) 02:39:460087デフォルトの名無しさん
2005/06/28(火) 02:55:05いやです。
0088デフォルトの名無しさん
2005/06/28(火) 03:18:36違うよ。派生クラスのデストラクタが呼び出されない。
0089デフォルトの名無しさん
2005/06/28(火) 07:00:26キー操作を行うオートパイロットソフトなんてものもあるみたいですが、
これを機にプログラムの勉強もできればと思ったのですが、
どこから手をつけてよいかさっぱりです。
0090デフォルトの名無しさん
2005/06/28(火) 07:58:12標準ではできないが、環境依存の部分で出来ることがある。
0091デフォルトの名無しさん
2005/06/28(火) 08:16:23while(!cin.eof()) {
cin >> c;
if(c == 'a') { count++; }
}
と書くのと、
while(1) {
cin >> c;
if(c == EOF) { break; }
if(c == 'a') { count++; }
}
と書くのとでは結果が違いますが、これはどうしてでしょうか。
上でも良いような気がするのですが。
009289
2005/06/28(火) 08:24:10お返事ありがとうございます。
環境依存で、ということは例えばウィンドウズ依存になるけど、ということでしょうか?
>>1のアップローダーの、「スレッドを立てるまでもないソース」の85に
詳細をうpさせていただきました。
0093デフォルトの名無しさん
2005/06/28(火) 08:28:54結果は変わらないと思うけど。
ただ上のやつでは
if(c == 'a')
のところで c の値が EOF のときにも比較しちゃってるだけの話でもちろん false だし。
>>92
うpしたならそのファイルへのリンクを張るようにしましょう。
0094デフォルトの名無しさん
2005/06/28(火) 09:08:17> C言語で、特定のキーを押しながら他のキーを押す、ということはできますか?
Cで(物理的に)キーは押せないだろう。
0095デフォルトの名無しさん
2005/06/28(火) 09:13:370096デフォルトの名無しさん
2005/06/28(火) 09:15:25まあまあ、それくらいの言葉使い許してやってくれw
0097デフォルトの名無しさん
2005/06/28(火) 09:20:23重箱の隅つついてたのしい?
0098デフォルトの名無しさん
2005/06/28(火) 09:51:02プログラムで特定のキーを押したことにしながらオペレータに他のキーを押させたいのか、
プログラムで特定のキーも他のキーも押したことにしたいのか、
それらをプログラムで検出したいのか、
>89を読んだだけで判るのか?
0099デフォルトの名無しさん
2005/06/28(火) 10:10:36Ctrl+CみたいにA+Bとかやりたいという意味だととったが。
0100デフォルトの名無しさん
2005/06/28(火) 10:41:490101デフォルトの名無しさん
2005/06/28(火) 10:56:18ツールを作っていて、まず起動直後に
GetCurrentDirectory
しているのですが、環境によって内容が違ってしまいます。
私のマシンだときちんと起動された場所が取得できるのですが、友人のマシンですと
C:\Documents and Settings\XXXXXX\
といった、ユーザーフォルダがカレントディレクトリとして取得されてしまうのです。
(ともにWindows2000です)
そういえば昔、私はこの問題に腹を立てて、Windowsの設定から「カレントディレクトリをユーザーフォルダにしない」設定をした覚えがあります。
これについて解決方法を探しているのですが、EXEパスを利用することを考えたのですが問題がありました。
別のツールから「カレントディレクトリを指定した上で呼び出される」という性質と「直接EXE起動される」という性質をあわせもつツールなのです。
プログラム側でこれを回避する方法はありませんでしょうか?
最も良いのは「EXEを直接呼び出したとき、ユーザーフォルダにはいかないようにする」なのですが。
0102デフォルトの名無しさん
2005/06/28(火) 11:02:340103デフォルトの名無しさん
2005/06/28(火) 11:02:53Windows GUI 環境における「起動された場所」とは何かという疑問があるな。
0104デフォルトの名無しさん
2005/06/28(火) 11:06:28すばやいお返事ありがとうございます。
>exeパスじゃないとすると、どのディレクトリになって欲しいんだ?
EXEをダブルクリックで指定された場合 → EXEパス
外部ツールから呼び出された場合 → 外部ツールに「カレントディレクトリを指定してEXEを起動」があるため、カレントディレクトリ
となって欲しいのです。
>Windows GUI 環境における「起動された場所」とは何かという疑問があるな。
確かにごもっともです。
ですが、なんとなく、やりたいことは察していただけるかなと思いますが、直接的な解決策はないものでしょうか?
0105デフォルトの名無しさん
2005/06/28(火) 11:08:23共にそれがカレントディレクトリなんだから、
そのままでいいんジャマイカ?
「C:\Documents and Settings\XXXXXX\」がカレントディレクトリだと何が問題なんだ?
0106デフォルトの名無しさん
2005/06/28(火) 11:10:17多数のファイルを作成して(フォルダ内を)散らかすツールなので、
「C:\Documents and Settings\XXXXXX\」を散らかされると使う側から見てムカツクのではないかなと思いまして。
0107デフォルトの名無しさん
NGNGWindowsの挙動に腹を立てる前に、まずソフトの仕様がおかしいキガス…
EXEへのショートカットでも作っとけば?
ショートカットの設定で作業フォルダが指定できるから。
0108デフォルトの名無しさん
2005/06/28(火) 11:14:26そういうパイプ処理はOS依存なんでしょうか?
WinXP BCC5.5.1です
0109デフォルトの名無しさん
2005/06/28(火) 11:14:36まず、「カレントディレクトリとは何か?」
から調べた方がいいよ。
とりあえず、その場合は使用者がカレントディレクトリを変えるものだろう。
0110デフォルトの名無しさん
2005/06/28(火) 11:16:39そう思うんなら、どこに行くかわからないカレントディレクトリを問答無用で使うのが間違い。
おとなしくコマンドライン引数使え。
0111デフォルトの名無しさん
2005/06/28(火) 11:22:18通常はモジュールパスのフォルダを使い、
コマンドライン引数で「/current」と指定されていたらカレントフォルダを参照するようにします。
ありがとうございました。
0112デフォルトの名無しさん
2005/06/28(火) 15:17:02倍精度(double)は考慮せず、
単精度(float)の場合のみのケースではどうなんでしょうか。
具体的には、Intel系 -> PowerPC系 へのコンバート
を想定してます。
0113デフォルトの名無しさん
2005/06/28(火) 15:23:11Intel、PPCなど、メジャーなCPUは同じ規格の浮動小数点を使ってるので大丈夫です。
(ただしエンディアン変換の事も忘れずに)
0114デフォルトの名無しさん
2005/06/28(火) 15:25:45もちろん機種依存。
ただしC/C++とは無関係だけど、IEEE754という浮動小数点数表現の規格がある。
そしてIntelもPowerPCもこれを採用している。
0115112
2005/06/28(火) 16:18:28実験してみた結果、同じ値を出しました。
丁寧な解説ありがとうございました。
0116デフォルトの名無しさん
2005/06/28(火) 17:43:28sendmailはunixでゴザイマス
0117デフォルトの名無しさん
2005/06/28(火) 18:24:19これは今でも通用しますか?
PCに限れば、昨今のコンパイラは最適化で
FPUではなくSSE/SSE2を使うように出来ます。
SSEはfloat、SSE2はdoubleなので
ここで述べられているようなキャストの差は
なくなっていそうです。
また、変数のサイズは小さい方がキャッシュの
ヒット率も良さそうですが、、
0118267
2005/06/28(火) 18:33:32gcc -o simplex simplex.c
simplex.c: 関数 `turnSimplex' 内:
simplex.c:80: error: 互換性のないポインタ型からのreturnです
simplex.c:80: 警告: function returns address of local variable
というエラーが出ます,どうやったらいいですか?
0119デフォルトの名無しさん
2005/06/28(火) 18:43:55CPUの性能向上で、よほどの大量の演算でも人間には時間のかかり具合なんて区別できないから、
どうせなら精度の良いdoubleにした方がお得な感じがする。
Cの数学関数はC99でfloat版も用意されたな。VC/BCCなんかにも独自に存在する。
どうせ中の人はあれだろうけど。
0120デフォルトの名無しさん
2005/06/28(火) 18:44:08それだけで何を推測しろと言うのだ?
エラー系の質問者はたいていそうだが、ソースくらい出せよ
0121デフォルトの名無しさん
2005/06/28(火) 18:52:53double ** じゃだめなん?
0122デフォルトの名無しさん
2005/06/28(火) 19:05:53状況にもよるが、大量の配列なんかを扱うときはキャスト云々よりメモリアクセスの速度のほうがはるかに致命的なんで、floatのほうが速いこともある。
0123デフォルトの名無しさん
2005/06/28(火) 19:22:33ローカル変数のポインタを返すのは…マズイっしょ。staticな配列ならいざ知らず。
double型配列をreturnで戻すのではなく、関数の引数として与えるように
関数の仕様を変えた方がいいと思う。
0124108
NGNG0125デフォルトの名無しさん
2005/06/28(火) 21:01:18>>116の回答だけでは不満なのか?
まあ「パイプ処理」について言えば、機種依存だな
0126デフォルトの名無しさん
2005/06/28(火) 22:26:22昔ちょっと触っただけなのに
早速詰まってしまいました、ご教授ください
ABCDEFG00001
ABCDEFG00002
:
ABCDEFG10000
と末尾の数字だけカウントアップさせたファイルをたくさん作りたいのですが
char *msg = "ABCDEFG"
char *str = "00000";
for (short i = 1; i < 1001; i++) {
str = (char *)i;
char * strcat(msg, str)
<msgの内容をファイルに書き出し>
}
みたいなのを書いたのですが、これだと
i<10000のときに桁数が減ってしまいます。
例えば i = 500のときはstrは "500" じゃなくて "00500"
としたいのですが方法ありますでしょうか。
0127デフォルトの名無しさん
2005/06/28(火) 22:27:27ヒント:スレタイ
0128デフォルトの名無しさん
2005/06/28(火) 22:28:180129108
2005/06/28(火) 22:29:15sendmane.exeでも何でもいいんです
0130デフォルトの名無しさん
2005/06/28(火) 22:30:300131デフォルトの名無しさん
2005/06/28(火) 22:31:21ifs.fill('0');
for (unsigned i = 1; i <= 10000; ++i) {
ifs << "ABCDEFG" << ifs.setw(5) << i << '\n';
}
ifs.close();
0132デフォルトの名無しさん
2005/06/28(火) 22:31:58char *msg = "ABCDEFG";
for (int i = 0; i < 10000; ++i) {
fprintf(stdout, "%s%05d\n", msg, i + 1);
}
0133デフォルトの名無しさん
2005/06/28(火) 22:32:30なんでそれで動くのかがわからん。
for (int i = 0; i < 10000; i++)
{
char buf[64];
snprintf(buf, sizeof buf, "ABCDEFG%05d", i);
}
shortでメモリサイズけちろうなんて馬鹿な考えもやめろ。
0134デフォルトの名無しさん
2005/06/28(火) 22:35:230135デフォルトの名無しさん
2005/06/28(火) 22:42:090136126
2005/06/28(火) 22:44:070137デフォルトの名無しさん
2005/06/28(火) 23:45:44ひとつの答えだけじゃなくて何度かの答えがあるから
こういう考え方も出来るのかと勉強できる。
Q&A形式で過去ログまとめてみていい?
0138デフォルトの名無しさん
2005/06/28(火) 23:56:430139デフォルトの名無しさん
2005/06/28(火) 23:56:53どぞどぞ、大歓迎
0140デフォルトの名無しさん
2005/06/29(水) 00:14:17GJと称えられるであろう。
0141デフォルトの名無しさん
2005/06/29(水) 00:31:36過去ログdatのまとめたのでも要る?zipとかで渡せるけど
0142デフォルトの名無しさん
2005/06/29(水) 00:40:58なんか尊敬できる
0143デフォルトの名無しさん
2005/06/29(水) 00:41:50Windowsアプリやimodeのアプリ、PS2で動くゲームのようなものって一体どうやったら作れるのでしょうか?
0144デフォルトの名無しさん
2005/06/29(水) 00:42:330145デフォルトの名無しさん
2005/06/29(水) 00:46:33C/C++には標準的なグラフィックライブラリが無いので
言語を覚えただけでは絵はかけません
WindowsならGDI,GDI+, 3DもやるならDirectX
i-modeのアプリはJavaで書かれている
ゲームを作りたいならDirectXがおすすめ
0146デフォルトの名無しさん
2005/06/29(水) 00:53:29さて、次に何がしたい?
Windows、i-アプリ、コンシューマーゲーム機では要求されるスキルは
かなり違うと思われ。
Windowsプログラムを書きたいならまずはSDKサンプルについてくる?WinMainから始まる
全てのWindowsプログラムのスケルトンコードに自分の欲しい機能を付加していく、のが
一番とっつき易いだろうな。で、ある程度Windowsプログラムの何たるかが判ってきたら
MFCやATLといったWindows用ライブラリ、STL、boost、Lokiといった汎用テンプレートライブラリ、
マネージドコードがいいなら.net Frameworkを活用してプログラム作成を少しでも楽にするとよかろう。
0147デフォルトの名無しさん
NGNG猫でもわかるプログラミングとかオススメ。(賛否両論あるだろうけど)
http://www.kumei.ne.jp/c_lang/
SDK編の「ウィンドウを作る」の項に目を通してみれば
Windowsアプリの雰囲気はわかると思う。
0148デフォルトの名無しさん
2005/06/29(水) 01:07:45グラフィックライブラリとは一体何ですか?
DirectXとJavaは聞いたことがありますが・・・。
小学生の時にBASICを使ったときはCIRCLE()を使え
ば円が描けたりしたのですが、C言語には無いんですか?
>>146
iアプリ、ゲーム機は芝居が高そうなのでWindowsアプリからやっていこうと思っていますが
独習C、独習C++をやったあと何をすればいいのか解らない状態です。
>>147
ウインドゥを作るのところ、みてみました。
あれを全部打ってウインドゥが表示されるだけってのはかなりつらい気がorz
0149デフォルトの名無しさん
2005/06/29(水) 01:12:02>あれを全部打ってウインドゥが表示されるだけってのはかなりつらい気がorz
あれを全部コピペして(ry
最初はコールバック関数だけでいいよ。
こーゆー用語も自分で調べてみよう(ヒント:googleで[用語 コールバック]。
0150デフォルトの名無しさん
2005/06/29(水) 01:14:320151デフォルトの名無しさん
2005/06/29(水) 01:38:42ビジネス用アプリケーションなのか、ゲームなのか、小物的アクセサリー(時計、デスクトップ
アクセサリー、「アレ」以外の何かなど)やツール類なのか、特殊なユーティリティ
(アンチウィルス、ディスクチェッカ、ウィルス、ポートスキャン、クラッキングツール、
攻撃ツールなど)、はてはデバイスドライバなのか、システムサービスなのか…
まぁいずれは全部を視野に入れているなら、C/C++は賢明な選択だったと思う。
で、148さんよ、あんた作りたいプログラムがあるのかい?
0152デフォルトの名無しさん
2005/06/29(水) 01:59:35どうもありがとうございます。
コピペでいいんですか?w
>>151
今はどうやったらDOSの黒い画面に文字と数字しか表示
できない状態から脱却することだけしか考えられませんorz
CとC++の二冊で1000ページやって文字しか表示できないとは思っていなかったので。
ペイントブラシ程度のものが作れればとりあえずは良いと思っています。
0153デフォルトの名無しさん
2005/06/29(水) 02:11:36んじゃ猫のコピペで勉強だな
0154デフォルトの名無しさん
NGNG>グラフィックライブラリとは一体何ですか?
BASICの場合は、言語自体に描画機能が付いてたけど、
C/C++には描画機能がないので、
代わりに、プラットフォームが用意する関数郡(ライブラリ)を呼ぶ。
たとえば Windows で円を描きたかったら、Ellipse、
UNIX等の X Window システム上で円を描きたかったら、XDrawArc、
を呼び出す、という具合に。
>>152
>コピペでいいんですか?w
いいんですw
初めは部品部品のコピペで、必要に応じてパラメータをいじればいいと思う。
というか慣れてきた後も、(信用できる)サンプルコードの
コピーをいじるって手法はかなり活躍するかと。
生のAPIを使ってWindowsプログラムを作る場合は、
誰が書いてもああいうコードが必要になるから覚悟したほうがいい。
でも機能のかたまりは使い回せるように自分用のライブラリでも
作っておけば、アプリ作成はそんなに辛くないと思う。
VisualC++のMFCとかC++Builderとか使うと
生のAPIをあんまり使わずに簡単にWindowsアプリ組めると思うけど、
俺は使ったことないのでわからんぽ。
0155デフォルトの名無しさん
2005/06/29(水) 02:14:01DXにいくとDQN化する可能性大
0156デフォルトの名無しさん
2005/06/29(水) 02:39:08ウィンドウクラス、ウィンドウプロシジャ、リソース...)を
一通り理解したらさっさとMFCかATL/WTLへ行くよろし。
なお、「理解」したいんなら猫は適切ではない。
0157デフォルトの名無しさん
2005/06/29(水) 02:40:27パイプ処理はもちろん環境依存。
sendmailのようなプログラムとどういうやりとりをしたいのか書きましょう。
0158デフォルトの名無しさん
2005/06/29(水) 02:48:59サンプルを見て理解できなかったので、色々検索してみました
が、上手く掛かりませんでした。
pBufferに、freadでファイル内のバイナリデータ全て
を入れてます。(正しくは指している、です)
typedef struct {
int num;
float (*f)[16];
} t_loader;
t_loader* LoadFile(char* pFilename)
{
t_loader* pLoader;
// ファイル読み込み&Allocate
(略)
// mallocの戻り値ポインタを変換
pLoader = (t_loader*)pMallocPtr;
// ココです
pLoader->f = (float(*)[16])( (long)pLoader->f + (long)pLoader );
ポインタをlongにキャストし、「加算」した値というのは
どういう意味を持つのでしょうか?
キャストはアドレス値に変換しているのは分かるのですが、
加算というのが理解できないです。
0159デフォルトの名無しさん
2005/06/29(水) 03:21:21pLoader->fを+1すると, sizeof(float)*16バイト進んじまうだろ?
任意バイト進めるには(char *)とか(long)とかにキャストする必要がある。
ってことなんじゃねぇかな、何したいのか分からないこの子ー度。
0160デフォルトの名無しさん
2005/06/29(水) 03:26:35それ、実際に動作するコードなのか?
少なくともそれだけだと、ちょっと理解しかねる
0161デフォルトの名無しさん
2005/06/29(水) 03:31:540162デフォルトの名無しさん
2005/06/29(水) 03:36:300163デフォルトの名無しさん
NGNG161じゃないが、演算のためにポインタを整数値にキャストすること自体が
間違ってると言いたいのだろう。
0164デフォルトの名無しさん
2005/06/29(水) 03:53:39アドレス+アドレスって、何か意味あんのか
一体何がしたいんだ
0165158
2005/06/29(水) 03:54:00int n;
int nA;
...
float (*f)[16];
float (*f1)[4];
...
だから、本来(というより自分の知識内でのやり方)は
アドレスをサイズ分ずらしメンバのポインタに入れていくのを
longキャストの部分のおかげでコード量がかなり抑えられているように
感じます。
ポインタ->整数値の例を取り上げたサイトは御存じありませんでしょうか
0166デフォルトの名無しさん
2005/06/29(水) 03:58:21気のせいだろうか
それにしても>>158のコードは不可解
0167デフォルトの名無しさん
NGNG>pLoader->f = (float(*)[16])( (long)pLoader->f + (long)pLoader );
この行より前に、ポインタに整数値読み込む処理があるだろ?
組込系とかで、めちゃめちゃに資源が限られてたりするわけ?
そうでなければ、そのサンプルは糞だから参考にしないほうがいい。
0168デフォルトの名無しさん
2005/06/29(水) 04:10:072)pLoaderに、データ読み込み
3)pLoader->f1, pLoader->f2,....を再計算
ってとこかな
いや実に糞なコードだな
組み込みであっても、不要なコードだろ
0169デフォルトの名無しさん
2005/06/29(水) 04:10:43((float*)( (long)pLoader->f + (long)pLoader ))[16]
これならまだわかるが。
0170デフォルトの名無しさん
2005/06/29(水) 04:14:080171デフォルトの名無しさん
2005/06/29(水) 04:15:10はぁ?
(float(*)[16])は、float[][16]のような二次元配列を指すポインタに
キャストしとるだけだろ
0172デフォルトの名無しさん
2005/06/29(水) 04:22:42なるほど、やっとわかった。
なんつーか高度なのか
単にわかりづらいだけのコードなのかわからん。
0173デフォルトの名無しさん
2005/06/29(水) 04:24:08そうか。ポテドンだったのか。
0174デフォルトの名無しさん
2005/06/29(水) 04:35:16やっとわかった。
t_loaderのメンバのポインタは、ロード時にfread()でセットされるんだろ。
ファイルのヘッダレコードの中に、構造体のレイアウトどおりに
オフセットが記録してあって、データの先頭からのバイト位置(オフセット)が
一旦ポインタに格納される。
で、データをロードした後で、メモリ上のレイアウトを再計算してるわけだ。
ちょっとトリッキーだな。
0175158
2005/06/29(水) 04:44:35入れておくのですか。
ポンと手を叩きたくなるほど納得行く説明
ありがとうございました。
0176デフォルトの名無しさん
2005/06/29(水) 09:53:020177デフォルトの名無しさん
2005/06/29(水) 13:45:330178デフォルトの名無しさん
2005/06/29(水) 13:59:24error C2653 : 識別子がクラス名でも名前空間名でもありません。
というエラーが出るのですが
0179デフォルトの名無しさん
2005/06/29(水) 14:08:45ヘッダをインクルドする前に型を使っている予感
0180デフォルトの名無しさん
2005/06/29(水) 14:14:29環境依存。
0181デフォルトの名無しさん
NGNGヒント:スレタイ
0183デフォルトの名無しさん
2005/06/29(水) 14:38:29ありがとうございます。解決しました。
0184デフォルトの名無しさん
2005/06/29(水) 18:54:00スマソ
0185デフォルトの名無しさん
2005/06/29(水) 19:25:09using namespace std;
class CA {
public:
CA(void){}
CA(int){cout << "a";}
};
main()
{
//new CA(1)[2];
//new CA[2](1);
}
CA(int) のコンストラクタが2回呼ばれると思ったのですが、駄目でした。
配列でとった時、デフォルトコンストラクタ以外を走らせるのは不可能なの
ですか?
0186デフォルトの名無しさん
2005/06/29(水) 19:44:500187デフォルトの名無しさん
2005/06/29(水) 19:47:56C++0xを待たれい
0188デフォルトの名無しさん
2005/06/29(水) 19:49:32諦めます。レスあじがとございました;;
0189まとめ中
2005/06/29(水) 20:02:31ver17あたりからまとめてる所。
1スレだけで膨大な量なんでメモ帳で項目分割。
17以後のログは勝手にまとめてますが許してください。
17以前は過去ログにあるものだけ掘って見ます。
過去ログ進呈してくださる方歓迎。
日々日々良ソースやアルゴリズムなど有難う。
プログラマの皆さんに感謝をしつつ、まとめ作業開始。
以後、何事も無かったかのように本来の質疑応答をどぞ ↓
0190デフォルトの名無しさん
2005/06/29(水) 20:06:58配列各要素に同じ値でいいんだったら、
class CA1 : public CA {CA1() : CA(1) {}};
とでもすればいいじゃん。
#私は嫌だけど。
0191デフォルトの名無しさん
2005/06/29(水) 20:07:47new CA[2]; ってどういう意味ですか?
どういうふうに使うのですか?
0192デフォルトの名無しさん
2005/06/29(水) 20:09:09頑張れよー
0193デフォルトの名無しさん
2005/06/29(水) 20:26:40CAがクラスならCAクラスのインスタンスを2つ作る
CAが何かのデータ型なら、2つ分の連続したCA型変数の領域を確保する
0194デフォルトの名無しさん
2005/06/29(水) 20:33:47#include <iostream>
using namespace std;
class CA
{
public:
CA(){cout << "default" << endl;}
CA(int x){ cout << "param int x = " << x << endl;}
};
main()
{
new CA[2](10);
}
[実行結果]
param int x = 10
param int x = 10
0195デフォルトの名無しさん
2005/06/29(水) 21:00:19ありがとうございます。
0196デフォルトの名無しさん
2005/06/29(水) 21:11:23どうすりゃいいんだ?一応インストしてみたら使えるし。
まぁ、いいや。わーいいいもん手に入れたー
0197デフォルトの名無しさん
2005/06/29(水) 21:12:060198デフォルトの名無しさん
2005/06/29(水) 21:13:59所詮は過去のコンパイラよ
0199デフォルトの名無しさん
2005/06/29(水) 21:28:580200145
2005/06/29(水) 21:57:49いきなり数万も投資するのは抵抗があるので、とりあえずフリーでダウンロードできる
VisualC++Express2005Beta2とかいうのをダウンロードしたのですが、ボタンが多すぎるし
ヘルプは何処を読んで良いのか解らず全然使い方が解りませんorz
0201デフォルトの名無しさん
2005/06/29(水) 22:06:21VCがそれなりに便利なのは確かだけど
0202145
2005/06/29(水) 22:08:26DOS窓から使う味も素っ気もない奴なんですが、これで問題ないでしょうか?
0203デフォルトの名無しさん
2005/06/29(水) 22:08:53↓でも使ってみれば?C/C++じゃないけどC++書けるなら簡単に使えるはず
http://onigiri.s3.xrea.com:8080/delphi/index.php?Delphi%A4%CE%C6%FE%BC%EA%A4%C8%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%2FDelphi6
0204デフォルトの名無しさん
2005/06/29(水) 22:17:00おまいらほめられて伸びるタイプなんですね
0205デフォルトの名無しさん
2005/06/29(水) 22:42:10part18までのログdat
ttp://www.uploda.org/file/uporg137053.zip.html
0206デフォルトの名無しさん
2005/06/29(水) 23:46:24そんな文法は標準では無かったはず・・・。
コンパイラ何?
0207デフォルトの名無しさん
2005/06/29(水) 23:47:39組み込み配列の要素ごとのコンストラクタ制御について、何か提案されてたっけ?
0208過去ログQ&Aまとめ中 ◆tOP1/BWZ7g
2005/06/30(木) 00:01:33有難うございます。作業量大幅UPキター(汗
作業してたらこんな時間orz
明日からpart1から編集入ろう。
まだローカル作業中。ページ申し込みしてきました。
1日で100レス以上行くので早い事part19まで編集しなければ追いつかない。
ガンガル
スレ汚しレスすまそ。
以後、何事も無かったかのように ↓
0209デフォルトの名無しさん
2005/06/30(木) 00:03:57現時点からにしとけよ。
0210デフォルトの名無しさん
2005/06/30(木) 00:09:07例えば、エディタとかゲームとか。普通にprintf系で出力してないんでしょうか。
0211デフォルトの名無しさん
2005/06/30(木) 00:09:220212デフォルトの名無しさん
2005/06/30(木) 00:45:05cursesのことを指してるのかぇ?
0213デフォルトの名無しさん
2005/06/30(木) 00:47:25エスケープシーケンス
0214デフォルトの名無しさん
2005/06/30(木) 00:56:19もし貴方の優れた試みが成功したならば、恐らく多くの2chのプログラマーが
大きな助けとなるでしょう。
英語の直訳風に言ってみた。
0215デフォルトの名無しさん
2005/06/30(木) 01:06:43>>213
cursesで行けそうですね。有り難うございます。
エスケープシーケンスでもできるんですか?ちょっと想像つかないのですが...
0216145
2005/06/30(木) 01:14:22DelphiってPascalですよね。
CとC++を覚えたばかりで更に他の言語を詰め込むのってどうなんだろう。
普通Winアプリを作る場合、やっぱりC++BuilderとかVC++のようなRADツールを使うんですよね?
メモ帳でWinアプリのソースを書いてBorlandのC++コンパイラを使ってDOS窓からコンパイルしている人っていますか?
VC++Express2005の使い方がどこかにあればいいんですが、全然見つからないorz
やっぱり諭吉さんとお別れして製品版を手に入れるほか無いですかね。
というか製品版にはマニュアルついているんですよね?
パソコンにプリインストされていたOfficeみたいにマニュアルが付属していなかったら最悪orz
0217デフォルトの名無しさん
2005/06/30(木) 01:15:31man terminfo
つか、その手のプログラムのソース見れ
0218デフォルトの名無しさん
2005/06/30(木) 01:16:18「本ページは名無しの、名無しによる、名無しの為の過去ログである。
トピックはどれも現場(学校、研修所、会社、学校)で生まれたものであり、
これを読めば貴方もデフォルトと成ることでしょう(意味不明」
0219デフォルトの名無しさん
2005/06/30(木) 01:54:04man見ときます。すいません。
この手のプログラムって大抵巨大なんで初心者には厳しい...
0220デフォルトの名無しさん
2005/06/30(木) 06:09:52DelphiはDelphiである
0221デフォルトの名無しさん
2005/06/30(木) 07:19:16>CとC++を覚えたばかりで更に他の言語を詰め込むのってどうなんだろう。
そう思うでしょ? でもね、人間というのはティミが考えてるよりもっともっと
包容力があるんだよ。
0222デフォルトの名無しさん
2005/06/30(木) 07:38:49コンパイルは成功するのですが実行しても意図した動作をしません。
恐らく無限ループになっています。
何度か見直して、ちゃんと本の通りになっていると思うのですが・・・何処がダメなのでしょうか?
int main(){
string s;
map <string,int> counters;
while (cin >> s)
++counters[s];
for (map<string,int>::const_iterator it = counters.begin();it != counters.end(); ++it){
cout << it->first << "\t" << it->second << endl;
}
return 0;
}
0223デフォルトの名無しさん
2005/06/30(木) 07:44:19BCC5.5.1 + WindowsXPSP2 では正しく動く。
環境は?
0224デフォルトの名無しさん
2005/06/30(木) 08:07:45cinの入力終了方法を分かってませんでした_no
Ctrl+zを入力たら上手く動きました。
すみません。
0225デフォルトの名無しさん
2005/06/30(木) 10:11:42ダメだこりゃ! パーフーパーフー
0226デフォルトの名無しさん
2005/06/30(木) 10:30:21mapの使用を終える前にkeyをdeleteしてしまうとまずいのでしょうか?
しかし、最初のループでdeleteをせずに後のループでdelete &(it->first)と言う様にやってもダメな様だし
どうすれば良いのでしょうか?やりたい事は文字列をキーにしてunsigned int二つ分のデータを値にする事です。
#include <iostream>
#include <string>
#include <map>
using namespace std;
void itoa(char* str,unsigned int num) //数値から数字への変換関数
{unsigned int radix=10;unsigned int i=0;while(num){str[4-i]=(char)(num%radix+48);num/=radix;i++;}}
int main(){
map <string,unsigned int*> range;int i=0;string *index = NULL;char tmp[5] = "";while(i<10){itoa(tmp,i);index = new string(tmp);
range[*index] = (unsigned int*)malloc(sizeof(unsigned int)*2);(range[*index])[0] = i;(range[*index])[1] = i+10000;
delete index;i++;}i=0;for(map<string,unsigned int*>::const_iterator it = range.begin();
it != range.end(); ++it){
cout << "key:" << it->first << "\tvalue1:" << (it->second)[0] << "\tvalue2:" << (it->second)[1] << endl;free(it->second);}
0227デフォルトの名無しさん
2005/06/30(木) 13:39:36突込みどころ満載なんで一言だけ。
itoaが期待通り動作してない。
0228デフォルトの名無しさん
2005/06/30(木) 14:42:23itoa()のような非標準の関数使うなや。検証できない環境の香具師もいるんだぞ。
0229デフォルトの名無しさん
2005/06/30(木) 14:57:05こう?
#include <iostream>
#include <string>
#include <map>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
typedef string Key;
typedef vector <unsigned int> Value_Container;
typedef map <Key, Value_Container> Map;
Map range;
for (int i (0); i < 10; ++ i)
{
ostringstream index;
index << i;
Value_Container &value_container (range[index.str ()]);
value_container.resize (2);
value_container[0] = i;
value_container[1] = i+10000;
}
for(Map::const_iterator it = range.begin(); it != range.end(); ++ it)
cout << "key:" << it->first << "\tvalue1:" << (it->second)[0] << "\tvalue2:" << (it->second)[1] << endl;
}
0230デフォルトの名無しさん
2005/06/30(木) 15:01:28間違って宿題スレに書いてた..
0231デフォルトの名無しさん
2005/06/30(木) 15:08:39レス良く見れや。itoaをわざわざ定義してるやン
それがおかしいんだけど
あと、このスレは環境依存OKだったはず
>>229
struct Value_Container {
unsigned int first, second;
Value_Container( unsigned int f=0, unsigned int s=0)
: first(f), second(s) {};
};
でいいような。
0232デフォルトの名無しさん
2005/06/30(木) 15:26:07キャストできるけど何が起きても責任は取れない
0233デフォルトの名無しさん
2005/06/30(木) 15:26:58もちろん
typedef pair <unsigned int, unsigned int> Value_Container;
とかも
0234デフォルトの名無しさん
2005/06/30(木) 15:28:440235デフォルトの名無しさん
2005/06/30(木) 15:29:35キャスト以外に方法ないんですかね?
32bitの領域にメモリ確保して移すとか
0236デフォルトの名無しさん
2005/06/30(木) 15:55:54キャストは方法に入らない
ダウンサンクで検索汁
0237デフォルトの名無しさん
2005/06/30(木) 17:13:33コンパイラがstdio.hファイルをオープン出来ないなですが、何故なんでしょうか?
0238デフォルトの名無しさん
2005/06/30(木) 17:16:25コンパイラが正しくインストール/セットアップされていない
0239デフォルトの名無しさん
2005/06/30(木) 17:22:26自分に落ち度があったかもしれません。
もう一度やり直してみます。ありがとうございます。
0240デフォルトの名無しさん
2005/06/30(木) 17:38:53環境変数のチェック汁
0241デフォルトの名無しさん
2005/06/30(木) 18:08:55コンパイラは作動してるんだろうから、環境変数の問題じゃなさそうじゃね?
予想だがBCCの.cfgにパスを書き込んでいないくさい希ガス。
>>237はまずコンパイラが何なのかを書き込みましょう。
でないと答えようがないです。
0242デフォルトの名無しさん
2005/06/30(木) 19:00:04コンパイルできました。
別の本みて、cfgファイル作ってみたら、上手く動作しました。
何で上手くいったのかはよく分かりませんが、何にせよ助言ありがとうございました。
0243デフォルトの名無しさん
2005/06/30(木) 19:06:5564bitであることを明示するにはどうすればいいんですかね?.
(?)hoge
0244デフォルトの名無しさん
2005/06/30(木) 19:20:2664bitポインタの環境ならば*で64bitになるんじゃないのか?
0245デフォルトの名無しさん
2005/06/30(木) 19:26:50どなたか教えてください
mingwのインストールは出来ました
ディレクトリ名はMingw-jpにしておきました
そうしろとあったので
0246245
2005/06/30(木) 19:27:230247デフォルトの名無しさん
2005/06/30(木) 19:39:29亀レスだが、cygwin gcc 3.3.3 です。
0248デフォルトの名無しさん
2005/06/30(木) 19:44:10環境変数
PATH に Mingwのbin CPLUS_INCLUDE_PATH に includeが必要だっけ。
0249デフォルトの名無しさん
2005/06/30(木) 19:49:11設定とは関係なしに明示したいのですが...
ちなみにVS.net2003です
0250デフォルトの名無しさん
2005/06/30(木) 19:49:250251デフォルトの名無しさん
2005/06/30(木) 19:51:58#include <stdio.h>
#define pi 3.141592
double rad(double a)
main(){
int ans,rad,x;
printf("角度を入力してください");
scanf("%lf", &x);
ans=double rad(double a)
printf("%f\n",ans);
}
double rad(double a){
int x;
a=x*(pi/180);
}
こう書いたんですがうまくきません。
0252デフォルトの名無しさん
2005/06/30(木) 19:59:330253デフォルトの名無しさん
2005/06/30(木) 20:01:31intとdoubleがぐちゃぐちゃだし
関数の呼び出し方を理解していないようだな
ans=double rad(double a)
ってなんだ
ans = rad(a);
でよい
0254デフォルトの名無しさん
2005/06/30(木) 20:02:22幼稚園児にギリシャ語を教えるようなもんだな。
0255デフォルトの名無しさん
2005/06/30(木) 20:04:55int main()
{std::cout<<"うんこ"<<std::endl; return 0;}
ここまで覚えた
0256デフォルトの名無しさん
2005/06/30(木) 20:11:19#include <stdio.h>
#include <math.h>
#define pi 3.141592
double rad(double a)
main(){
double ans,rad,x;
printf("角度を入力してください");
scanf("%lf", &x);
ans=rad(double a);
printf("%f\n",ans);
}
double rad(double a){
double x;
a=x*(pi/180);
}
こうしましたが、結果がすべて0になってしまいます
0257デフォルトの名無しさん
2005/06/30(木) 20:17:57だから
ans=rad(double a);
は何なんだよ。
xに読んだんなら
ans = rad(x);
でいいだろが
0258デフォルトの名無しさん
2005/06/30(木) 20:19:11そこ直してもできません・・・
0259デフォルトの名無しさん
2005/06/30(木) 20:24:52にしろ。
それと、関数の呼び方や実引数、仮引数についてもっかい勉強しなおせ。
0260デフォルトの名無しさん
2005/06/30(木) 20:31:46最初から書いてもらえませんか?
0261デフォルトの名無しさん
2005/06/30(木) 20:37:480262デフォルトの名無しさん
2005/06/30(木) 21:03:35質問してやってんだからさっさと答えろ
0263デフォルトの名無しさん
2005/06/30(木) 21:04:360264デフォルトの名無しさん
2005/06/30(木) 21:31:170265デフォルトの名無しさん
2005/06/30(木) 21:56:51最初からトリップ付けないからそうなる
人生の助言だけしとく
0266デフォルトの名無しさん
2005/06/30(木) 21:58:04| 丿ノソ ̄ハ ) )
( 彳 / \|  ̄ ̄ ̄/ ─┼─ ──┐|| ─┼─ ./
彡」 ・ ・| |/ .| .| ゝ /
(6 ヽ つ / _ノ. / ___| ヽ_ /⌒ヽ_ノ
ミ / /⌒⌒ヽ
| \  ̄ ノ
| /
/ ̄| ̄ヽ ├─ ヽ ┼─‐ ‐┼‐ . / ̄| ̄ヽ
| / | __.|  ̄ヽ / __| ヽ . ‐┼‐ | / |
ヽノ ノ (_ノ\ _ノ (__ノヽ ヽ__ノ ヽノ ノ
_ _ ___ _
,! /_| |__ | | ! /____,、
______|________ |三三| ー十ー十ー / __ __| .| □ | / __ __l´
. | ー―――‐ ヽ、 ノ _________ ..く_/___| |___ ..| □ |く_/\ヽ| |
. 人 | ̄| ̄| , ヽ ノ | | |___ ___| | □ | ヽ |
ノ ヽ | ̄| ̄| ノ ヽ. | ロ. | / ヽ .|__ .__| / /
ノ ヽ、  ̄| ̄ ノ ヽ .. | ヽ| / /\ \ / ヽ / / ヽ\
 ̄| ̄ ..く_/ \ `フく_/\`フ く/ \`フ
 ̄ ̄ ̄ ̄
0267デフォルトの名無しさん
2005/06/30(木) 22:14:52不勉強にも程がある。
#include <stdio.h>
#include <math.h>
double rad(double a);
int main(){
double ans,a;
printf("角度を入力してください");
scanf("%lf", &a);
ans=rad(a);
printf("%f\n",ans);
return 0;
}
double rad(double a){
return a*(M_PI/180);
}
0268デフォルトの名無しさん
2005/06/30(木) 22:42:54#include <conio.h>
int main (void){
char test[1];
printf ("入力してください。");
printf ("\n");
scanf ("%c",&test);
if ( test == "key" ){
printf("正です。\n");
}else{
printf("不です\n");
}
getch();
}
keyと入力しても正にならないのは何故か教えてください。
0269デフォルトの名無しさん
2005/06/30(木) 22:46:32基礎からやり直し
#include <stdio.h>
#include <string.h>
int main (void) {
char test[256];
printf("入力してください。\n");
scanf("%s", test);
if (!strcmp(test, "key"))
printf("正です\n");
else
printf("不です\n");
return 0;
}
0270デフォルトの名無しさん
2005/06/30(木) 22:46:44scanf ("%c",&test); で取れてるのは文字
つーかデバッグライトしろって
printfでtestの中身表示させれば気がつくことじゃないか
0271デフォルトの名無しさん
2005/06/30(木) 23:08:06マジ、有難うございます。
C始めたばかりでして、ご迷惑をおかけしました。
デバッグライトなど少しずつ覚えていきたいと思います。
0272デフォルトの名無しさん
2005/06/30(木) 23:19:55-- 以下 テンプレ ------------------------
■ ここの人のお勧め書籍
独学C / 初めてのC / 猫でもシリーズ
■ 過去ログ
19以前は以下のdatを有難くDLしる。(ver19スレ >>205氏提供乙)
ttp://www.uploda.org/file/uporg137053.zip.html
■ここの過去質疑応答
過去ログQ&Aまとめ中 ◆tOP1/BWZ7g 氏が製作されているみたい。
(公開されたらURLを書く)
------ 以上、テンプレ ------------------------------------
0273デフォルトの名無しさん
2005/06/30(木) 23:45:07■入門者向けC++お勧め書籍(C未経験者可)
標準講座C++
決定版 はじめてのC++
0274デフォルトの名無しさん
2005/07/01(金) 00:17:010275デフォルトの名無しさん
2005/07/01(金) 00:17:540276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
2005/07/01(金) 00:30:58あと、標準ライブラリ、オブジェクト指向の解説はかなり薄口のような気がする。
0278デフォルトの名無しさん
2005/07/01(金) 00:39:44$ g++ --version
g++ (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ -ansi -pedantic -Wall -W -fsyntax-only 194.cpp
194.cpp:10: error: ISO C++ forbids declaration of `main' with no type
194.cpp: In function `int main()':
194.cpp:11: error: ISO C++ forbids initialization in array new
0279デフォルトの名無しさん
2005/07/01(金) 00:46:50int main(){std::cout<<"Hello!"<<std::endl;return 0;}
をmingwでコンパイルしようとすると大量のエラーを吐いてexeが生成されません。
コマンドプロンプト使ってます
サイトにあったサンプルコード
#include<stdio.h>
int main(void){
printf("Hello GCC World on Windows!!\n");
}
はnewlineナントカというエラーがありましたが、exeが作られ、ちゃんと動きました。
0280デフォルトの名無しさん
2005/07/01(金) 00:54:12エラーメッセージを晒せ
0281デフォルトの名無しさん
2005/07/01(金) 00:59:38それと、エラーが長くて上の方が見られなくなってしまいます
0282デフォルトの名無しさん
2005/07/01(金) 01:02:47dir >dir.txt
0283デフォルトの名無しさん
2005/07/01(金) 01:03:59Windows のコマンドプロンプトなら、
タイトルバーを右クリックして「プロパティ」を表示。
[オプション] > [編集オプション] > [簡易編集モード] にチェックを入れる。
[レイアウト] > [画面バッファのサイズ] > [高さ] を思い切り(4096ぐらい)大きくする。
これでエラーは消えない(スクロールさせれば残ってる)し、
マウスで(ちょっと怪しいけど)テキスト選択ができる。
選択後のコピーは Enter なので注意。
0284デフォルトの名無しさん
2005/07/01(金) 01:08:26NT系のcmd.exeなら
t.exe > out.txt 2>&1
のような感じで。
command.comではそういう技はつかえんのでフリーのツールを探せ
0285デフォルトの名無しさん
2005/07/01(金) 01:18:45ttp://sylphys.ddo.jp/upld2nd/pc/img-box/img20050701011715.jpg
0286デフォルトの名無しさん
2005/07/01(金) 01:32:04gcc でコンパイルしてるのか?
g++ にしてみれば?
0287デフォルトの名無しさん
2005/07/01(金) 01:35:11出来ました!
ありがとうございます!
何故>>279の上のはg++で下のはgccになるんでしょうか?
0288デフォルトの名無しさん
2005/07/01(金) 01:43:52あ〜コンソールアプリから早く先に進みたいよ〜。
つか技術評論社からでているC言超入門とはじめてのC++を読んでるけど、これでいいのかどうか。
というか俺はC言語で何をやろうとしていたんだっけ?
0289デフォルトの名無しさん
2005/07/01(金) 01:44:28つ チラシの裏
0290デフォルトの名無しさん
2005/07/01(金) 01:44:59gcc は C のプログラムということになるので、
C で必要になるライブラリは勝手にリンクしてくれる。
C++ では言語標準の機能を使うために
C では必要の無いライブラリを追加でリンクさせる必要がある。
g++ を実行すれば、その時点で C++ プログラムだということが
GCC に伝わるので、そこらへんを勝手にリンクしてくれる。
gcc でも、自分で -lstdc++ として C++ のライブラリをリンクさせれば
おそらく同じ結果が得られる。
0291デフォルトの名無しさん
2005/07/01(金) 02:00:44なるほど。
分かり易く説明していただきありがとうございました!
0292デフォルトの名無しさん
2005/07/01(金) 04:46:03newlineなんちゃらは、最終行の末尾の改行がナインジャマイカ。
0293デフォルトの名無しさん
2005/07/01(金) 07:34:120294デフォルトの名無しさん
2005/07/01(金) 07:44:49ついでに言えば、コンパイラ(とそのオプション)によってはバグるんだよ。
0295デフォルトの名無しさん
2005/07/01(金) 07:59:50STLとかテンプレートの事が一切書かれてない
0296デフォルトの名無しさん
2005/07/01(金) 08:14:210297デフォルトの名無しさん
2005/07/01(金) 09:02:19ttp://www.kuzbass.ru/docs/isocpp/lex.html#lex.phases
2.1/1 の 2. より
" If a source file that is not empty does not end in a new-line character, or ends in a new-line character immediately preceded by a backslash character, the behavior is undefined."
0298デフォルトの名無しさん
2005/07/01(金) 09:04:090299デフォルトの名無しさん
2005/07/01(金) 09:19:44ttp://www9.plala.or.jp/sgwr-t/c/S/smpl06-2.html
ここのサンプルを使ってみたときの話です。
0300デフォルトの名無しさん
2005/07/01(金) 09:42:24何 が 消 え る ん で す か
0301デフォルトの名無しさん
2005/07/01(金) 09:48:20どうせWindowsのコンソールと思われ。
>>298
先にコンソール立ち上げてそっちから実行するかプログラムの最後にsystem("pause");でも入れとけ。
0302デフォルトの名無しさん
2005/07/01(金) 10:10:36ありがとうございましたー。
消えると言うのはDos窓のことでした。
0303デフォルトの名無しさん
2005/07/01(金) 10:19:17キミ、荒っぽいけどやさしいね。
0304デフォルトの名無しさん
2005/07/01(金) 10:42:08LSI-C86。
なかなかシュールなバグでね、ニモニックが一個落ちるだけだから運悪く実行できてしまうともうね。
0305デフォルトの名無しさん
2005/07/01(金) 12:01:59SubFunc(int **pData)
[
int data[][64]=pData;
}
main(){
int data[32][64];
SubFunc(data);
}
出鱈目ですが、こんな感じにSubFunc内で次元配列として扱える様に
渡す&受けるにはどう記述したら宜しいのでしょうか。
0306デフォルトの名無しさん
2005/07/01(金) 12:11:07コンパイラはgccを使用しています。
0307デフォルトの名無しさん
2005/07/01(金) 12:22:28SubFunc(int (*pData)[64]);
0308デフォルトの名無しさん
2005/07/01(金) 12:38:43有り難うございます。 引き数の時点で配列数入れるんですか・・・
ちなみに、 int data[][64]=pData;
の様な、別のポインタにコピーする事も出来るのでしょうか?
0309デフォルトの名無しさん
2005/07/01(金) 13:25:49C/C++では、多次元配列は、最初の次元以外の次元はすべて指定しなければならない。
C++なら、vector<vector<int> > >& でも使った方がいいんでわ?
別のポインタにコピーするには、
int (*data)[64] = pData;
ってすればできるでしょ。
0310デフォルトの名無しさん
2005/07/01(金) 13:59:31失礼しました・・・ 引数は (int data[][64])で通ったので、代入も同様に
出来るのかと思ったら、代入はint (*data)[64]でないと駄目なんですね・・・
この二つの違いが分からない orz
C++には諸々制限付いてる某なのでおとなしくCで書いてます。
0311デフォルトの名無しさん
2005/07/01(金) 14:03:45int data[][64]→int (data[])[64]→int (*data)[64] と内部で変換されているから。
dataは定数なので、これには代入できない。ちゃんとポインタ変数である事を示す
ために、*data と書かなければならない。カッコは優先順位変更のため。
int a[] = {1, 2, 3}, b[] = {4, 5, 6};
a = b;
とやったらエラーが出るっしょ?それと同じと考えてくれたまへ。
0312デフォルトの名無しさん
2005/07/01(金) 14:05:17と思った。コンパイルして試してみてないけど。
0313デフォルトの名無しさん
2005/07/01(金) 14:13:35また、他におすすめなコンパイラはありますか?
環境はNEC MobileGear (PC/AT用MS-DOS6.2, ハーフVGA, HDDの代わりにコンパクトフラッシュ使用)です。
0314デフォルトの名無しさん
2005/07/01(金) 15:10:28スモールモデルでいいのか?そうであればLSI-C86試食版。
でなければBorland-C++の方がいい。
0315デフォルトの名無しさん
2005/07/01(金) 16:35:54Visual C++のクラスの追加でOCXを読み込むとプロパティが消えてしまいます。
0316デフォルトの名無しさん
2005/07/01(金) 17:08:25それはもうだめかもわからんね。
0317デフォルトの名無しさん
2005/07/01(金) 20:14:09Digital MarsのDosExtenderもいいぞ。
0318デフォルトの名無しさん
2005/07/01(金) 20:52:50最近C/C++のコンパイルにmakeを使い始め、サフィック
スルールを学んでいるところです。
某解説webページに従って
.c.o:
cc -c $<
と記述することでMakefileがかなり楽に書けるようにな
りました。
しかし、ひとつのディレクトリにソースもオブジェクト
もゴチャ混ぜになるのが好きでないため、下記の様なデ
ィレクトリ構成でコンパイルしたいと考えています。
MakeDir\
+-- SrcDir\
+-- ObjDir\
+-- Makefile
上記のようなディレクトリ構成の場合、サフィックスル
ールを使って楽をするにはどのように書けばよいのでし
ょうか?
0319デフォルトの名無しさん
2005/07/01(金) 20:58:43cc -c -o$@ $<
とかかな
0320デフォルトの名無しさん
2005/07/01(金) 21:40:08タイプミスと思われるところを訂正して
{SrcDir}.c{ObjDir}.o:
cc -c -o$@ $<
これでうまくいきました。どうもありがとう。
0321デフォルトの名無しさん
2005/07/01(金) 22:12:44幾ら調べても本当にわけが分かりません、コンパイラーというのが有れば出来るものなのでしょうか?ご指導をよろしくお願いいたします。。
0322デフォルトの名無しさん
2005/07/01(金) 22:15:48そうだなコンパイラがいるな
むろんC++用のやつだ
その前にテキストエディタがいるが、まあ最悪viでもメモ帳でもSimpleTextでも
OS付属のやつでよい
0323デフォルトの名無しさん
2005/07/01(金) 22:16:32コンパイラがあれば出来る。
Google で フリー C/C++コンパイラ
で検索すれ。
0324デフォルトの名無しさん
2005/07/01(金) 22:16:37藻前には基礎知識が必要がと思う。
0325デフォルトの名無しさん
2005/07/01(金) 22:16:430326デフォルトの名無しさん
2005/07/01(金) 22:17:01Microsoft Visual C++ Toolkit 2003 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1109618655/6-12
0327デフォルトの名無しさん
2005/07/01(金) 22:19:410328デフォルトの名無しさん
2005/07/01(金) 22:21:14つ チラシの裏
0329デフォルトの名無しさん
2005/07/01(金) 22:23:40それはWindows APIのことだろうか
色々な型とかあってわけわかんねーよ
なんだよLPCSTRって
とかそういうのは、ヘッダよめ
なんでもgrepする癖をつけろ
typedefとか#defineとかそういうのだ
よく使われるtypedefはそんなに多くないし、ある程度は決まりきった
命名規則に従ってるから、そのうち慣れるだろ
あとはMSDNと友達になるこったな
英文ぐらい、泣き言言わずに読め
0330デフォルトの名無しさん
2005/07/01(金) 22:45:03マジ感謝!
取り合えずMSDNナンパしてきます。
0331デフォルトの名無しさん
2005/07/01(金) 22:55:34なるほど!ありがとうございます!
ということは、何か買う必要はないという事でいいですか?
くどいようですが確認の為ご理解ください、申し訳ない
0332デフォルトの名無しさん
2005/07/01(金) 22:56:48>>325だけはただじゃないが格安で高機能。
0333デフォルトの名無しさん
2005/07/01(金) 22:58:37ソースファイルを、実行形式にするにはコンパイルが必要。
それにはコンパイラが必要。
コンパイラは、各社各団体からいろんな種類のものが、有償無償で配布されている。
その中からどれを選ぶかは、どういう目的でどういう環境で利用するかによって異なる。
0334デフォルトの名無しさん
2005/07/01(金) 23:00:47今調べてみました、すごくいい物のようですね
まだ学生なのでこれを買ってみる事にします!
皆さん本当にありがとう!
0335デフォルトの名無しさん
2005/07/02(土) 10:40:44実行ファイルが作れればいいなら、ググればいくらでもあるはず。
0336デフォルトの名無しさん
2005/07/02(土) 17:46:25コマンドラインで、printfデバッグしながらってのが、
やってること理解しやすいし。
0337デフォルトの名無しさん
2005/07/02(土) 17:51:39はるかに動きを理解しやすいが。
初心者ならなおさらだな。
0338デフォルトの名無しさん
2005/07/02(土) 18:26:46上記に関してはどちらとも納得できるが、
>>335
のpro以上は特に初心者には必要ないように思う。
スキーでもゴルフでも居るよね、カッコから入る奴。
初心者なのにフル装備ってのもどうかね。
0339デフォルトの名無しさん
2005/07/02(土) 18:34:08つーかスキーやゴルフと話が違うだろ
あれらは最初からイイ物そろえておいた方が結果的にいい
0340デフォルトの名無しさん
2005/07/02(土) 19:30:530341デフォルトの名無しさん
2005/07/02(土) 19:35:140342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
2005/07/02(土) 22:21:20その程度のことで自慢にはなりませんし、
真の上級者は道具は良いものを選びます
0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
2005/07/02(土) 22:46:330346デフォルトの名無しさん
2005/07/03(日) 00:44:59組むのに、商用が必要か? って話だろ。
なんで上級者の話してんだよ。
0347デフォルトの名無しさん
2005/07/03(日) 05:04:460348デフォルトの名無しさん
2005/07/03(日) 05:16:46学生さんなら、>>325を数千円程度の支出で手に入れられるわけだ。
テキストアプリケーションを作るだけなら、むしろUNIX like OS+gccが
いいと思うが、Windowsを使っていてゆくゆくはGUIにも手を出したい、
というのであれば、数千円の価値は十分あると思うぞ。
タダほど高い買い物は無いってな。
0349デフォルトの名無しさん
2005/07/03(日) 08:38:41決まってハイスペックなマシン要求するしな。
コンソールの使い方もプログラミングの一環だと思って
gcc、bccあたりを使って欲しい、あくまで個人的意見だが。
0350デフォルトの名無しさん
2005/07/03(日) 09:45:440351デフォルトの名無しさん
2005/07/03(日) 10:18:54PATHのお勉強できるし、もし途中で投げ出しても損はしないし
0352デフォルトの名無しさん
2005/07/03(日) 13:32:24む)が自分に合っているのか?」程度が分かるくらいになってから買えばいいんじ
ゃねぇの?
0353デフォルトの名無しさん
2005/07/03(日) 15:47:05cout << manip("hoge") << endl
みたいな。
0354デフォルトの名無しさん
2005/07/03(日) 16:03:52引数付きコンストラクタを持つクラスを定義して
そのクラスと std::ostream を引数にとる operator << を定義する。
std::istream なら operator >> な。
0355デフォルトの名無しさん
2005/07/03(日) 18:40:30賛成の方も反対の方も、このスレで自分は賛成か反対かをお書きください。
プログラム技術板に強制ID制を導入すべきか否か
http://etc4.2ch.net/test/read.cgi/vote/1118144381/
理由などの記入は別に構いません。
<<賛成>>か<<反対>>かだけ御記入頂ければ結構です。
ちなみに、当たり前ですが運営の方にIPが見えているので、1日ごとにIDが変わるからといって多重投稿しないでください。
0357デフォルトの名無しさん
2005/07/04(月) 03:40:35hex みたいなマニュピレータは、出力なら自分の右辺で出力された値(または文字列)が必要になるよね?
これって引数のostreamから取り出せるの? それとも、単にsetf/unsetfしているだけ?
前者なら色々面白い独自マニピュレータ作れそうだけど、後者だと限界があるね。
0358デフォルトの名無しさん
2005/07/04(月) 10:20:47getrusageを使ってみたのですが、ru_maxrssがつねに0になってしまいます。
0359デフォルトの名無しさん
2005/07/04(月) 11:01:29鼬害かさもなくばUnixプログラミングスレ向きかな。
それを知ってどうしたいのか分からんが。
0360デフォルトの名無しさん
2005/07/05(火) 02:14:16void Func(int i);
void Func(int i,float f);
みたいなのは無理なんですか?
0361360
2005/07/05(火) 02:18:060362デフォルトの名無しさん
2005/07/05(火) 04:50:14vectorの二次元配列の方法で試してみましたがうまくいきません・・・
0363362
2005/07/05(火) 05:33:340364364
2005/07/05(火) 06:43:43解決しました。
0365デフォルトの名無しさん
2005/07/05(火) 09:27:19ここを見ながらマルチスレッドのプログラムを作っています。
スレッドに複数の引数を渡したい場合どうすればよいのでしょうか?
0366デフォルトの名無しさん
2005/07/05(火) 10:26:50引数を全部構造体に入れて、構造体へのポインタを渡す。
0367デフォルトの名無しさん
2005/07/05(火) 21:28:450368デフォルトの名無しさん
2005/07/05(火) 21:31:58ワロス
0369デフォルトの名無しさん
2005/07/05(火) 21:47:10ダメ。
API使いたくない理由はなんなんだ?
0370デフォルトの名無しさん
2005/07/05(火) 21:49:27stat()
0371デフォルトの名無しさん
2005/07/05(火) 21:52:55ありがとうございます。
できるだけ環境依存じゃないほうがいいかな、と。
0372デフォルトの名無しさん
2005/07/05(火) 21:55:54boost::filesystemって使えたっけ?
0373デフォルトの名無しさん
2005/07/05(火) 21:56:50「Windows」上でファイルの「更新日付」を取得しようとする時点で
環境に依存するのは自明だと思う
「」内はC/C++に亡い概念のハズ
0374デフォルトの名無しさん
2005/07/05(火) 21:58:56今ちょっとhpp見たけど、更新日付は扱ってなさそう。
0375デフォルトの名無しさん
2005/07/05(火) 22:00:20何故そう思うのかは知らないが、マルチプラットホームが
最終目的なら、自分でラッパを書くという選択肢もあるぞ。
0376デフォルトの名無しさん
2005/07/05(火) 22:11:340377デフォルトの名無しさん
2005/07/05(火) 22:14:540378デフォルトの名無しさん
2005/07/05(火) 22:18:140379デフォルトの名無しさん
2005/07/05(火) 22:37:23出会うプラットフォーム全部分書けばいいじゃん。
0380デフォルトの名無しさん
2005/07/05(火) 22:39:54stat()使えない環境なんか、使ってるのか?
0381デフォルトの名無しさん
2005/07/05(火) 22:40:02for (int i=0; i<size; i++) {
fputc(buf[i], fp);
}
より
fwrite(buf, 1, size, fp);
の方が大概速いですけど、
分割して書き込む場合どのくらいのサイズに分割するのがいいんでしょう?
もちろんシステム毎に最適値は違うと思いますけど、
このくらいの範囲が良いみたいなのってありますか?
0382デフォルトの名無しさん
2005/07/05(火) 22:42:480383デフォルトの名無しさん
2005/07/05(火) 22:45:51一度に全部書き込む
あとは言語のライブラリとOSがうまいことやってくれる
実測しろよ!!
0384デフォルトの名無しさん
2005/07/05(火) 22:48:51ありがとうございます。
いろいろ試してみます。
0385デフォルトの名無しさん
2005/07/05(火) 22:54:10ついてはPOSIX互換エミュレーション層つくってんのに
opendir()は無いんだよな昔から
それなのに_dos_findfirst()だの_findfirst()だのいう珍妙な
Cランタイム関数がある
いらねっての
0386デフォルトの名無しさん
2005/07/05(火) 23:03:030387デフォルトの名無しさん
2005/07/05(火) 23:06:33名は体を表す。MS-DOS時代からの名残だ。
0388デフォルトの名無しさん
2005/07/05(火) 23:07:340389デフォルトの名無しさん
2005/07/05(火) 23:12:39言っちゃなんだが半端な気がするんだよな、boost::filesystemは。
なんかJavaみたい。C++なのに。
>>387
それはしっとる。
>>388
そうそうBCCにはあるけどMSCには無い。
だから、FindFirstFile()を用いてopendir(),...のラッパーを作って
利用しているプログラムはわりと見かける。
でも、FindFirstFile()はファイル名以上のものを返してくれるから、
移植性が不要な場合は便利なんだよな、opendir()系列よりは。
0390362
2005/07/06(水) 12:28:15class SP{
・
・
};
i = rand() % 6;
SP sp[i];
こんな感じにクラスの配列を宣言したいのですが、
定数式が必要、サイズが0などのエラーが出てしまいます。
どのようにすればできるでしょうか?
0391デフォルトの名無しさん
2005/07/06(水) 12:30:47・C99対応コンパイラを使う
・newやmallocで動的にメモリを割り当てる
お好きな方をどうぞ。
0392391
2005/07/06(水) 12:35:59std::vector<SP> sp;
for(int j=0; j<i; j++)
sp.push_back(SP());
0393デフォルトの名無しさん
2005/07/06(水) 13:15:32返答ありがとうございます。それで試してみます。
すいませんあと、>>391のnewで動的に割り当てるというのは
SP sp = new SP[i]; ですか?
0394デフォルトの名無しさん
2005/07/06(水) 13:18:14C++を使っている以上、前者はあり得ないと思うのだが。
0395デフォルトの名無しさん
2005/07/06(水) 13:33:38基本的なことなんで本買ってじっくり勉強せい
0396デフォルトの名無しさん
2005/07/06(水) 13:48:23精進しますだ。
0397デフォルトの名無しさん
2005/07/06(水) 14:28:15for (int i=0;i<threadnum;i++)
{
if(pthread_create(&tid[i],NULL,(THREADFUNC)threadRoutine,(void*)i) != 0)
{
perror("pthread_create");
}
}
と書くと、3行目のところで
error: invalid use of member (did you forget the '&' ?)
というエラーが出てしまいます。
プライベートメンバ関数の
threadRoutine
を
void threadRoutine(void* pParam);
と宣言するところを
static void threadRoutine(void* pParam);
にすると、コンパイル可能なようなのですが、今度は、そのメンバ関数内で、staticではないメンバ変数が使えなくなってしまいます。
メンバ関数をstatic関数にせずに、マルチスレッド化するにはどのようにすればよいのでしょうか?
(THREADFUNC)、tidはそれぞれ
typedef void *(*THREADFUNC)(void *);
pthread_t tid[threadnum];
です。
0398デフォルトの名無しさん
2005/07/06(水) 15:04:20向こうに答えが書いてある。
0399397
2005/07/06(水) 16:49:28「君もC/C++の勉強をしたまえ! 」
というレスがあったので、正しいやり方ではないのかと思っていました。
そうすると、マルチスレッド化にはstaticは必須ということなのでしょうか?
また、この場合、同じクラス内の別のメンバ関数を呼び出したい場合はどうすればよいのでしょうか?
staticメンバ関数からは呼び出せないというコンパイルエラーが出てしまうのですが。
0400デフォルトの名無しさん
2005/07/06(水) 16:54:37>また、この場合、同じクラス内の別のメンバ関数を呼び出したい場合はどうすればよいのでしょうか?
>staticメンバ関数からは呼び出せないというコンパイルエラーが出てしまうのですが。
呼び出したいメンバ関数を全て静的にすればいい。静的メンバ関数間の呼び出しは何の問題もない。
0401デフォルトの名無しさん
2005/07/06(水) 17:01:15スレッド関数に引数経由でthisポインタを渡せ
あとは、それ使ってメソッドコールすればよい
0402デフォルトの名無しさん
2005/07/06(水) 17:07:26std::vector<SP> sp(i);でいいだろ。
0403デフォルトの名無しさん
2005/07/06(水) 17:07:35だから、 static void threadRoutine(void* pParam); とする。
397 がやりたいことは、
1) スレッド起動時の引数の pParm に相当するところへオブジェクトのポインタを渡す
2) threadRoutine 内では
void someclass::threadRoutine(void* pParam)
{
someclass* pThis = (someclass*)pParm;
// あとは pThis 経由でアクセスすりゃいいじゃーん
}
とすれば良いんじゃないかい
0404デフォルトの名無しさん
2005/07/06(水) 21:01:350405デフォルトの名無しさん
2005/07/06(水) 21:41:35struct hoge{
};
でなく
class hoge{
public:
};
を使っているのですが、何か問題ありますか?
お行儀が悪いとか、構造体如きにclass様を使うとはけしからんとか。
0406デフォルトの名無しさん
2005/07/06(水) 21:52:18C++では全然問題ない。両者は全く同じ。
0407デフォルトの名無しさん
2005/07/06(水) 21:52:23少なくともタイプ量はそっちのが少ないでしょ
0408デフォルトの名無しさん
2005/07/06(水) 21:54:090409デフォルトの名無しさん
2005/07/06(水) 21:58:49趣味の問題ではあるが、強いて言うなら同じ構造体を C でも使いたい場合に書き換える必要がある、って
ことぐらいかな。
漏れなら C と互換性のある構造体(静的メンバなし、メンバ関数なし)だったら常に struct を使うけど。
0410デフォルトの名無しさん
2005/07/06(水) 22:18:38取り立てて問題なさそうなので安心しました。
>>406
ということはstructでもコンストラクタは呼ばれるんですね
>>407
classの方が打ちやすいもので、
というか、structが打ちにくい…
>>408
いや、そういうわけでは
>>409
Cで使うというのは想定外でした。
単なる構造体にはstructを使う人が多数派ですよねえ
0411デフォルトの名無しさん
2005/07/06(水) 23:47:26#いや、流石に必ず書くわけではないが。
0412デフォルトの名無しさん
2005/07/07(木) 00:57:36そこでC++初心者にお勧めの参考書を教えていただけませんでしょうか。
くだらない質問ばかりですみません・・・
0413デフォルトの名無しさん
2005/07/07(木) 01:08:09>>273
どっちでもいいが1冊仕上げるまでは入門サイトなんか見るな。
C++の信頼できる入門サイトなぞ存在しない。
そして、GUIにも手を出すな。
最初は純粋に言語仕様にのみ関心を注げ。
0414デフォルトの名無しさん
2005/07/07(木) 01:25:34参考になります!入門サイトを見ながらやろうとしていたので見ないようにします、助かりました。
まずは参考書を仕上げる事に専念したいと思います。
また一つ疑問がでてきたのですが一つ参考書が仕上がったら
次の参考書を仕上げるという形で勉強していけばいいのでしょうか?
0415デフォルトの名無しさん
2005/07/07(木) 01:32:31正確に説明してみよう。
まず「メンバ関数」は「関数」と違い、呼び出すためにクラスのインスタンスが必要。
これは this ポインタと呼ばれる隠れた引数としてメンバ関数に渡される。
この違いにより、「メンバ関数へのポインタ」は「関数ポインタ」とは型が違う。
そして pthread_create() へ渡すのは「関数へのポインタ」だ。
非メンバ関数およびstaticメンバ関数は、Cと同じく関数名を書いただけで
「関数」から「関数へのポインタ」に自動的に変換されるので、
>397のような書き方で通る。
ただしキャストは不要、っていうかキャストすんな。
非staticメンバ関数は関数名を書いただけでは式として不正。
&T::MF と書くことで「メンバ関数へのポインタ」の値とすることができる。
ただしこれは pthread_create() が受け取る「関数へのポインタ」ではないので、渡せない。
また、VC系だと T::MF で同じ値が得られるが、これは標準ではない。
さぁこれで全部情報は揃ったはずだ。
0416デフォルトの名無しさん
2005/07/07(木) 01:36:55俺は>>413ではないけれども。1つ終わったら、何かを作ってみる。それで
分からない事があれば調べながら続ける、という流れの方がいいと思う。
で、同時に参考書(≠入門書)を読んで知識を吸収する。何冊も入門書を
読み続けるとモチベーションが続かない。どうせ何冊本を読んでも調べ
ながら作業するという形態は変わらないわけだから(よね?)、正しい情報を
うまく探し出す作業に慣れるのが大事だと、俺は思うよ。
0417397
2005/07/07(木) 02:31:01当面の問題にはこれで対処できそうです。
pthread+gccでスレッドプログラムを作ったのは、今回が初めてなのですが、
VisualC++やC++Builderでのスレッドプログラミングに比べてあまりスマートな印象
を受けないのですが、これはpthreadの仕様から来るものなのでしょうか?
それともVCやBCBは独自の拡張を施しているからなのでしょうか?
また、boostのthreadでもやはりpthreadと同様の制限が出てくるのでしょうか?
0418デフォルトの名無しさん
2005/07/07(木) 02:57:30逆に聞きたいのだが、VC++と較べてどの辺がスマートじゃないと思うのかね?
#私にゃ>397を見る限り大差ないとしか思えないのだが。
0419デフォルトの名無しさん
2005/07/07(木) 02:59:09スマートに出来るようにラッピングすればよろしい。
0420デフォルトの名無しさん
2005/07/07(木) 02:59:34COMが絡む場合は各スレッドでアパートメントの初期化とかせなあかんから
より面倒
あ、もしかしてIOCPで実装されてるスレッドプールみたいなヤツのことを
言ってるか?
0421デフォルトの名無しさん
2005/07/07(木) 03:19:07boostもっとガンガレ。
0422デフォルトの名無しさん
2005/07/07(木) 09:52:47int array[i];に対して、int *ptr;を用意し、
ptr = array;
cout << ++ptr << endl;
と書くと問題ないのに、
cout << ++array <<endl;
と書くと、
error C2105: '++' には左辺値が必要です。
と出てしまい、コンパイルが通りません。
arrayとそのまま配列名を書くと、
配列の先頭アドレス(先頭要素のポインタ)になる、
と勉強したのですが、なぜこのようなことがおきるのでしょうか。
どのように解釈すればよいのか、ご教示ください。
お願いいたします。
0423デフォルトの名無しさん
2005/07/07(木) 10:06:29(&i)++ がエラーになるのと同じ。
0424デフォルトの名無しさん
2005/07/07(木) 10:06:41++のオペランドは単なる値ではなく、変数でなくてはいけない。たとえば、
int a = 0;
a++; /* ok */
(a + 3)++; /* error */
0425デフォルトの名無しさん
2005/07/07(木) 10:41:27ま、初めのうちは int array[]; と int * ptr; (配列とポインタ)に関しては「似て非なるもの」として
同じ点:
・array[offset] とか ptr[offset] という書き方ができる
・array も ptr もアドレスを表す値になる
違う点:
・ ptr++; とか ptr+=1; とか ptr=ptr+1; という風に値を変更できるが array はできない
・ ptr=array; とか ptr=array+1; も↑同様にできるけど array はできない
と考えればいいんでね?
あとは徐々に理解を深めていけばそのうち納得がいくと思う。
0426デフォルトの名無しさん
2005/07/07(木) 10:56:060427デフォルトの名無しさん
2005/07/07(木) 12:25:41> arrayとそのまま配列名を書くと、
> 配列の先頭アドレス(先頭要素のポインタ)になる、
これがそもそもの間違い。
0428デフォルトの名無しさん
2005/07/07(木) 17:21:30入力のパラメータと出力のパラメータ,どちらを先に書きますか?
簡単な理由,例えば主要なAPIでの実例(memcpyとかは出力が先だから先にしてる,
いやいやSTLのアルゴリズムは入力が先)とか交えてもらえるとありがたいです.
ドキュメント(コード)に明記すれば良いというのは重々承知した上で,
純粋な興味から質問しています.
0429デフォルトの名無しさん
2005/07/07(木) 17:33:060430デフォルトの名無しさん
2005/07/07(木) 18:41:42どっちでもいい。好きにしろ。
0431デフォルトの名無しさん
2005/07/07(木) 19:18:47入力パラメータであることを明確にするには、順序ではなくconstをつけて
関数内部で変更されない(つまり入力専用)であることを明示する。
0432デフォルトの名無しさん
2005/07/07(木) 19:22:24なぜって、入力パラメータにはたまにデフォルト値を使うことがあるから
0433デフォルトの名無しさん
2005/07/07(木) 19:34:030434デフォルトの名無しさん
2005/07/07(木) 20:01:310435デフォルトの名無しさん
2005/07/07(木) 20:10:37ほうが読みやすいし理解しやすいな
string.hは引数順序の考え方が統一されており
stdio.hはてんでバラバラだ
0436デフォルトの名無しさん
2005/07/07(木) 20:14:45fprintf() は、可変引数の関係上、ファイルポインタを前に持ってこなければならない。
じゃ、なんでfputsは、最後でファイルポインタを指定させるんだろう?最初にもってくれば、
fprintfとの整合が取れるだけでなく、memxxx, strxxx系のデータ出力方向(右から左へデータが流れる)
とも一緒になってよさそうだけど。
0437デフォルトの名無しさん
2005/07/07(木) 20:16:160438デフォルトの名無しさん
2005/07/07(木) 20:43:08代わりにintにするとOKなんだけど、これって処理系依存の制限?
それとも規格?
0439428
2005/07/07(木) 21:48:21でも色々有意義な視点での意見が聞けてとても参考になりました.
ありがとうございます.
0440デフォルトの名無しさん
2005/07/07(木) 21:59:38int a;
int b;
int c;
}
struct Moge{
int abc[3];
}
&Moge.abc[0] の隣は &Moge.abc[1]、 更に&Moge.abc[2] と続くわけですが
同じように &Hoge.a &Hoge.b &Hoge.c と連続して並ばせたいのです。
これはC++では保証されていないと思いますが、保証される方法はありますか?
0441デフォルトの名無しさん
2005/07/07(木) 22:16:28とりあえず C と仮定する。
default argument promotion によって char 型の引数は int 型になっている。
従って、 va_arg の第 2 引数に char を指定しても、実引数の型とは一致しない。
9899:1999 だと va_arg で実引数の型と一致していない場合は未定義動作だから規格には合致している。
いずれにしろ、va_arg の第 2 引数に char は使えない。
0442デフォルトの名無しさん
2005/07/07(木) 22:16:48class A
{
virtual void func ( );
}
↑OK
↓NG
virtual void func ();
0443デフォルトの名無しさん
2005/07/07(木) 22:21:17オーバーロードの条件に virtual はない。その例なら。
void func ();
でいい。
0444デフォルトの名無しさん
2005/07/07(木) 22:23:49どうもです。実はC++なんですが。
Cより型チェックが厳しいせいで、エラーになってたのかな?
0445442
2005/07/07(木) 22:24:43void func() // これを
void func() // 別の.cppで定義したこれとか
void func() // さらに別の.cppで定義したこれとかで置き換えたい
…って全然意味わかんないよ。
絶対無理だから。
自己解決しました。
さわがせてすまん。
0446デフォルトの名無しさん
2005/07/07(木) 22:44:17Windows で高速なファイルの結合ってどうやるのがいいんでしょうか?
(UNIX だと mmap するのかなーとか思うけどこっちも使ったこと無い)。
0447デフォルトの名無しさん
2005/07/07(木) 23:32:18自力であれこれしようとせずに、system("cat foo bar > fooz");とでもする。
0448デフォルトの名無しさん
2005/07/08(金) 00:06:59> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
0449デフォルトの名無しさん
2005/07/08(金) 00:07:370450446
2005/07/08(金) 00:11:04copy /b foo+bar fooz
が一番速そうなんだけど仕事でこれやるのダサい気がして…。
0451デフォルトの名無しさん
2005/07/08(金) 00:19:48int main(void)
{
char str[256];
cout << "Hello world!!" << endl;
cin >> str;
ofstream out_file("text.txt");
out_file << str;
return 0;
}
で出来ることになっているテキストファイルは、どのフォルダに出力されるんでしょうか?
0452デフォルトの名無しさん
2005/07/08(金) 00:22:23可憐とフォルダ
0453デフォルトの名無しさん
2005/07/08(金) 01:14:05いや、そこは間違いじゃないだろ。
6.2.2.1 #3
"an lvalue that has type ``array of type'' is converted to
an expression that has type ``pointer to type'' that
points to the initial element of the array object"
ttp://www.vmunix.com/~gabor/c/draft.html#73
0454デフォルトの名無しさん
2005/07/08(金) 01:17:56C++では保証されていないので、処理系ごとの拡張になる。
VC なら #pragma pack とか /Zp とか。
GCC なら __attribute__((packed(x))) とか -fpack-struct とか。
まぁ拡張なんであまりお勧めはできない。
本当に必要か良く考えてから使えよ。
0455デフォルトの名無しさん
2005/07/08(金) 01:19:03「オーバーライド」と「オーバーロード」の区別はちゃんとつけとこうな。
0457451
2005/07/08(金) 03:13:51検索したんですが、そもそも作成すらされていないようでした。
プログラム自体が間違っているのか、VC++は何か設定が要るのか....
0458デフォルトの名無しさん
2005/07/08(金) 03:19:42#include<stdio.h>
struct node /* 構造体node(節点)の定義 */
{
char nodename ;
struct node *left;
struct node *right;
}*ai;
main(){
int a;
ai->left=NULL;
a=4;
if(ai->left==NULL)printf("%d",a);
}
が動きません
何がいけないのでしょうか??
0459デフォルトの名無しさん
2005/07/08(金) 03:22:48aiの型は?
0460デフォルトの名無しさん
2005/07/08(金) 03:23:10型とは・・?
0461デフォルトの名無しさん
2005/07/08(金) 03:26:05動くだろボケ。
ちょっと変なメモリ領域をアクセスしようとするだけで。
0462デフォルトの名無しさん
2005/07/08(金) 03:27:04コンパイラはボーランドのフリー使ってますよ
それが原因だったのですか
0463デフォルトの名無しさん
2005/07/08(金) 03:28:17aiってポインタでしょ
何指してるの?
0464デフォルトの名無しさん
2005/07/08(金) 03:30:26ポインタ ai がオブジェクトを指していないのがいけない。
0465デフォルトの名無しさん
2005/07/08(金) 03:33:46struct node /* 構造体node(節点)の定義 */
{
char nodename ;
struct node *left;
struct node *right;
}*ai,h;
main(){
int a;
h=ai;
ai->left=NULL;
a=4;
if(ai->left==NULL)printf("%d",a);
}
こうやってみたんですが動きません
どういったふうにaiを指させればよいのでしょうか??
0466デフォルトの名無しさん
2005/07/08(金) 03:35:39ai=h
0467デフォルトの名無しさん
2005/07/08(金) 03:37:30ai=&h
0468デフォルトの名無しさん
2005/07/08(金) 03:39:10ありがとうございます
けど動きませんでした・・・
0469デフォルトの名無しさん
2005/07/08(金) 03:45:09>けど動きませんでした・・・
あなたの「動かない」をもう少し詳しく
あと
int main(){
--------略-----------
return 0;
}
0470デフォルトの名無しさん
2005/07/08(金) 03:47:04動かないというのは、
ボーランドのフリーのコンパイラでコンパイルはできたんですが、
実行するとエラー(core dumped?)がでてしまい
動作してくれませんでした。
0471デフォルトの名無しさん
2005/07/08(金) 03:55:16ちょっと信じれないのだけど...
どこで落ちてるのか(どこまでは正常に動いてるのか)確かめるために
--------略-----------
printf("0\n");
h=ai;
printf("1\n");
--------略-----------
ってかんじにソース中にプローブを散りばめてみてはどうでしょ?
0472471
2005/07/08(金) 03:58:54--------略-----------
printf ("0\n"); fflush (stdout);
ai=&h;
printf ("1\n"); fflush (stdout);
--------略-----------
あとh=ai;は間違ってた
0473デフォルトの名無しさん
2005/07/08(金) 04:01:04何かおかしいですね・・・
さっそく
int a;
以降にprintf("0);を作業一つ一つ終わるごとに入れてみたんですが
何も表示されることなくエラーがでてしまいました。
わけわからん・・・
0474デフォルトの名無しさん
2005/07/08(金) 06:16:30ウチの環境(Win2k、VC++6.0)じゃ普通に動いて4が出力されて終わったが・・・
0475デフォルトの名無しさん
2005/07/08(金) 06:21:050476デフォルトの名無しさん
2005/07/08(金) 06:37:53複数のプロセスから日付時間等のログを記録するライブラリを
作成するのですが、複数のプロセスからログファイルに書き込む為に
ログが時間軸で並んでいません、
マシンの日付時間を取得してからログファイルに書き込む間に
他のプロセスに処理が移行されてしまう為だと思うのですが
日付時間を取得からファイル書き込みまでの間を割り込み禁止にできないでしょうか?
後からsortコマンドで並べかえるのも考えましたが、できればファイルに書き込む段階で
時間軸に並んでいた方が都合がいいので。
当然、排他処理等は行っています。OSはLinux,言語はCです。
ログファイルは通常のテキストファイルです。
0477デフォルトの名無しさん
2005/07/08(金) 07:04:52class A;
A* a;
のようにすればいいことを知ったのですが、
A が名前空間の中で定義されている場合はどうすればいいのでしょうか。
class std::istream;
std::istream* in;
のようなことがしたいのですが、
この後の行で iostream をインクルードすると
「error C2371: 'std::istream' : 再定義されています。異なる基本型です。」
となってしまいます。
0478デフォルトの名無しさん
2005/07/08(金) 07:26:53<iosfwd>にstream系のクラスの前方宣言が入っているからこれをインクルードすれば良い。
0479デフォルトの名無しさん
2005/07/08(金) 07:52:01インターネットとか、メールしてる奴いるけど、オレにはどうもプログラムは向いていないようだ・・・
そいつ東大だしやっぱ頭のいい奴がする事なんかな。
0480デフォルトの名無しさん
2005/07/08(金) 07:58:25セマフォ
0481デフォルトの名無しさん
2005/07/08(金) 08:01:53セマフォを使って排他処理は行っていますが、
セマフォでは、日付時間を取得からファイル書き込みまでの間を割り込み禁止には
できません、どうしても他のプロセスからの割り込み処理が入ってしまいます。
0482476
2005/07/08(金) 08:16:19・
任意の処理
・
割り込み禁止
日付時間取得
テキストファイルにログ書き込み
割り込み禁止解除
0483476
2005/07/08(金) 08:30:05セマフォを使ってライブラリが実行中と判断しているだけなので
ログファイルがオープン中かどうかもセマフォで行えばいいのですね!
ありがとう、やってみます。
0485デフォルトの名無しさん
2005/07/08(金) 09:56:25BSTR型で変数を定義しようとしたら
「定義されていない識別子です」のエラーが発生しました。
VC++6.0 WinXpです。
どのヘッダをインクルードすればよいのでしょうか・・・
0486デフォルトの名無しさん
2005/07/08(金) 10:03:42これを期にgrepの使い方くらい覚えなさい。
0487485
2005/07/08(金) 10:20:01アホはアホらしく標準ヘッダをgrepして死にかけました…
0488デフォルトの名無しさん
2005/07/08(金) 10:27:22例)
ログが DebugLog("hoge"); の場合、
以下のようなマクロを定義しコードを無効化
#define DebugLog(x) {}
C++だとクラス名が前について DebugTool::DebugLog("hoge"); ってな感じに
なるため
#define DebugTool::DebugLog(x) {}
って書いても::のところで切られてしまうようです。
上手い代替案もしくは書き方で回避など実現方法がありませんでしょうか?
0489デフォルトの名無しさん
2005/07/08(金) 10:31:13#if defined(NDEBUG)
void DebugTool::DebugLog(x) {}
#else
void DebugTool::DebugLog(x) {DoDebugLog(x);}
#endif
0490デフォルトの名無しさん
2005/07/08(金) 10:50:35ただ「使え」と言ったんではない。
使い方を覚えろ、と言ったんだ。
アホらしく検索すればアホみたいに沢山出てくるに決まってる。
0491デフォルトの名無しさん
2005/07/08(金) 11:01:40grep "typedef.*BSTR" *.h
とかするんだよ。
0492485
2005/07/08(金) 11:21:50で検索してみても分からず…。
これって普通に使える型じゃないんでしょうか・・・
0493デフォルトの名無しさん
2005/07/08(金) 11:31:49wtypes.h:
typedef WCHAR OLECHAR;
typedef /* [wire_marshal] */ OLECHAR __RPC_FAR *BSTR;
rpc.h:
#define __RPC_FAR
0494485
2005/07/08(金) 11:56:27大変申し訳ないです・・・。
0495デフォルトの名無しさん
2005/07/08(金) 13:10:49それならばなんら問題なし。
0496デフォルトの名無しさん
2005/07/08(金) 13:46:260497デフォルトの名無しさん
2005/07/08(金) 13:46:56union CPatch
{
unsigned long patch_data;
struct t_Part {
char patch;
char LSB;
char MSB;
__property bool Drum = {read=GetDrum, write=SetDrum};
private:
char drum;
bool GetDrum() { return static_cast<bool>(drum); }
void SetDrum(bool val) { drum = val ? 0x80 : 0x00; }
} Part;
};
上のような共用体は問題無いのでしょうか?
期待した動作はしているようなのですが・・
0498485
2005/07/08(金) 14:21:33おかげでVBとVCの連携とか普通にできるようになりました。
ありがとうございます。
0499デフォルトの名無しさん
2005/07/08(金) 14:25:07「問題ない」とはどういう意味なんだろう。
少なくとも互換性という点に関しては、bcc以外では全く使えないという答になるが。
0501デフォルトの名無しさん
2005/07/08(金) 15:48:05bccでしか通らないことを問題としないなら医院で内科医?
#まさか、このスレでbccとして問題ないか聞いているわけじゃないよな?
0502デフォルトの名無しさん
2005/07/08(金) 19:07:05外部依存関係で出てきて、その中身を見たのですが、
#if ( 501 < __midl )
typedef [public] __int3264 INT_PTR, *PINT_PTR;
typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR;
typedef [public] __int3264 LONG_PTR, *PLONG_PTR;
typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR;
#else // midl64
この一文、[public] の部分の意味がわかりません。
0503デフォルトの名無しさん
2005/07/08(金) 19:10:190504デフォルトの名無しさん
2005/07/08(金) 19:47:150505デフォルトの名無しさん
2005/07/08(金) 19:50:11上の#if ( 501 < __midl )に注目しろ。
これはMIDLコンパイラが使う部分であって、C/C++コンパイラは読まない。
0506デフォルトの名無しさん
2005/07/09(土) 16:35:12プログラム上で検知する方法が解りません。
Windows API にもそれらしい関数を見つけられませんでした。
機能としては、Windowsでタスクトレイにあるネットワークアイコンが
ケーブル未接続状態ですと×印が付きますよね。あの様な
機能を実装したいと思っております。
何か良い方法は御座いませんでしょうか?
参考ページとなるようなことでも構いません
0507デフォルトの名無しさん
2005/07/09(土) 16:50:250508デフォルトの名無しさん
2005/07/09(土) 16:55:57接続先が存在するか否かで判断すればいいんじゃ?
0509デフォルトの名無しさん
2005/07/09(土) 16:57:560510デフォルトの名無しさん
2005/07/09(土) 17:01:160511デフォルトの名無しさん
2005/07/10(日) 07:07:55いかがなものでしょうか?
あまり意味のないことでしょうか?
0512デフォルトの名無しさん
2005/07/10(日) 07:20:16意味のないinline化をしてしまうことがないように
プロファイルしてから効果的なところのみをinline化するといいですよ
0513デフォルトの名無しさん
2005/07/10(日) 09:24:13inline 関数がインライン展開されても、普通に引数のプッシュポップや、スタック操作とかの、
関数処理の準備/後始末コードが埋め込まれることもある。
マクロなら、そういうことが全然なくて、レジスタの取り回しにも無駄が発生しない。
0514デフォルトの名無しさん
2005/07/10(日) 09:33:06マクロだと式を二重に評価してしまうミスを起こしがち。
#define max(n,m) ((n)>(m)?(n):(m))
inline int max(int n,int m){ return n>m?n:m; }
void f(std::istream& in)
{
int n=max(in.read(),in.read());
}
こういうミスのないように、inlineのほうをオススメしたい。
0515デフォルトの名無しさん
2005/07/10(日) 09:34:15inline int max(int n,int m){ return n>m?n:m; } ←意図する結果
0516デフォルトの名無しさん
2005/07/10(日) 09:36:37その例はたまたまOKだけど、関数引数の評価順序って決まってないんじゃなかったっけ?
n,とmの順序が意味を持つ関数なら、問題起こるんじゃないか?
0517デフォルトの名無しさん
2005/07/10(日) 09:38:25(マクロ名は大文字、関数は小文字みたいに)して、危険なコードに
ならないように気を使えば済むこと。
0518デフォルトの名無しさん
2005/07/10(日) 09:41:360519514
2005/07/10(日) 09:45:02ごめん、引数の評価順序のことは忘れてた。
この例では、in.read の呼出回数が2回であるのに対して
マクロのほうだと3回呼ばれてしまうっていうことを示したかった。
0520デフォルトの名無しさん
2005/07/10(日) 09:57:37寡聞にして、
>普通に引数のプッシュポップや、スタック操作とかの、
>関数処理の準備/後始末コードが埋め込まれることもある。
こういう例を知らないのだが。
具体例を挙げてもらえまいか。
0521デフォルトの名無しさん
2005/07/10(日) 10:14:050522511
2005/07/10(日) 10:37:03高速化に関して勉強をしたいと思ってますが。
今、案件で文字列解析のものをしてまして、
苦戦をしてます。
0523デフォルトの名無しさん
2005/07/10(日) 10:51:42文字列解析なら寧ろ、アルゴリズムを見直すのが一番じゃね?
小手先の最適化をいくら施してもデータ件数に対するオーダーが変わるわけじゃないし。
つーことで、
つ[Google]
0524511
2005/07/10(日) 11:18:05ありがとうございます。
今、休日返上でアルゴリズムの改良をしてます。
かなり速くなりました。
あと一つお聞きしたいのですが、
クラスのメンバ関数内でstatic int a;と宣言したとしますよね。
この場合は、クラスオブジェクト単位でのstaticですよね。
たとえば、
CMyClass a,b;とあったとして、
void CMyClass::func(void)
{
static int a;
}
とあったら、このローカル変数aは全てのCMyClassオブジェクトをまたがる(共有する)変数となるのでしょうか?
0525デフォルトの名無しさん
2005/07/10(日) 11:35:49メンバ関数はオブジェクト毎ではなくクラス毎に生成されるってことを
頭に入れておくと理解しやすいと思う。
0526511
2005/07/10(日) 11:38:04ではCMyClass a,b;両方のオブジェクトで静的なローカル変数を共有すると。
なるほど。
ご返答助かります。
ありがとうございまいた。
0527511
2005/07/10(日) 12:37:24今はSTLを使ってますが、
どうやらこのfindが重さのネックのようです。
0528デフォルトの名無しさん
2005/07/10(日) 12:42:530529511
2005/07/10(日) 12:48:06劇的に速くなりましたw
STLって重いんですね。
ちょっとSTLのスレッドでその辺を質問してこようと思います。
0530デフォルトの名無しさん
2005/07/10(日) 13:09:02お互いにインクルードみたいなことがしたいんですが、
やる方法がありましたら、教えてください。
0531デフォルトの名無しさん
2005/07/10(日) 13:13:09それに未来はないのでヘッダファイルの整理を推奨します。
0532デフォルトの名無しさん
2005/07/10(日) 13:26:46やっぱ、そこですかね。
方法自体も探してたんですけど、みつからなかったですし。
#ifndef〜#endifは重複対策で相互対策ではないですしね。
ありがとうございました。
0533デフォルトの名無しさん
2005/07/10(日) 13:28:34std::string text = >>529;
for(int i=0; i<1000,000; i++)
text.find("質問");
でやってみた。(BCB6#4)
std::printf.find > 4246sec
CString.Find > 2774sec
AnsiString.Pos > 1192sec
0534デフォルトの名無しさん
2005/07/10(日) 14:10:40仕事自体、考えたほうが吉。
0535デフォルトの名無しさん
2005/07/10(日) 14:50:02俺もやってみたけどCStringの方が遅かった。
_mbsstrを呼んでいるためのようなのでそこをどうにかしてみたけれど、
やっぱりstd::stringの方が早かった。
ATL::CString 3857ms
std::string 3069ms
(10,000,000回forで回した)
CStringは最終的に_mbsstrを呼んでいた。
std::stringは検索対象の1文字目を取り出して、それをchar_traits::findで検索し、
見つかればそこからchar_traits::compareして一致しているかで探している。
0536デフォルトの名無しさん
2005/07/10(日) 15:09:01ワタシはCStringのほうが軽いです。
実行した環境は何でしょうか?
わたしはVC++6です。
0537デフォルトの名無しさん
2005/07/10(日) 15:31:15ファイルのパスを変更するやり方がわかりません。
どなたか教えてください。
0538デフォルトの名無しさん
2005/07/10(日) 15:34:08オープンしたテキストファイルの途中にfprintfで書き込むことってできる?
追加ならできるんだけど・・・
0539デフォルトの名無しさん
2005/07/10(日) 15:38:11できる。
0541デフォルトの名無しさん
2005/07/10(日) 15:46:59できれば教えてください…
0542デフォルトの名無しさん
2005/07/10(日) 15:52:46オープンしてテキストファイルの途中に行きfprintfで書き込め
0543デフォルトの名無しさん
2005/07/10(日) 15:58:56意地悪だなw
>>541
fseek
0544536
2005/07/10(日) 16:00:37どうなってるの?
0545デフォルトの名無しさん
2005/07/10(日) 16:04:32シラネーヨ。ソース晒せば?
0546デフォルトの名無しさん
2005/07/10(日) 16:44:33あぶなくね?
0548デフォルトの名無しさん
2005/07/10(日) 17:57:38どうせマルチバイトも考慮しないconst char*引数にとる関数だろ?
CStringはマルチバイト意識してるしstd::stringは参照連結意識してるし
ただの配列検索するだけのクソコードより遅いのは当たり前。
0549デフォルトの名無しさん
2005/07/10(日) 18:01:13SBCS、またはUNICODEは前提じゃね?
0550デフォルトの名無しさん
2005/07/10(日) 18:52:27ネットを初めてまだ1ヶ月の漏れですけど
教えてくださいお願いします。
0551デフォルトの名無しさん
2005/07/10(日) 18:54:230553デフォルトの名無しさん
2005/07/10(日) 19:07:17とりあえず何がしたいのかがわからないと何もいえない。
「C++をマスター」というのも、具体的に何のことかわからない。
自分以外の人が読むことを考えて文章をよく読み直すようにしろ。
情報検索は、基本的にGoogleで問題ないと思う。
技術情報は英語を検索対象として使えると、
日本語だけよりも数倍幅が広がるぞ。
あと、C/C++に関する具体的な質問でなければ、ここはスレ違いだ。
別スレいけ。
0554デフォルトの名無しさん
2005/07/11(月) 01:49:01それともばんばん使ってもいいの?
0555デフォルトの名無しさん
2005/07/11(月) 01:56:10メモリが限られるシステムの場合はスタックオバーフローなどの危険が伴う。
ただ再起を使わないととても複雑になる処理(ディレクトリツリーや魔方陣等)
もあるので臨機応変に。
0556デフォルトの名無しさん
2005/07/11(月) 01:58:07ありがとうございます
0557デフォルトの名無しさん
2005/07/11(月) 17:04:06ループ処理の中で呼び出されるある関数の中で10Mくらいのサイズの変数を使いたいのですが
mallocしても、char data[10000000]="";としても、
数回の実行でセグメンテーション違反が出てしまいます。
mallocの場合は一度ずつフリーしているし、char dataで用意した場合は一度実行したらreturnでブロックの外に行っているので
メモリ領域は解放されているはずなのですが・・。
取得するメモリ領域を小さくするとループされる回数が増える(セグメンテーション違反のタイミングが遅れる)から
メモリ不足が原因だと思うのですが、マシンの空きメモリは60Mくらいあって、最大10Mのメモリ取得なら問題無いはずだし。
どんな原因が考えられますか?
0558デフォルトの名無しさん
2005/07/11(月) 17:10:18症状が再現する最小のプログラム片を晒してみろ。
0559デフォルトの名無しさん
2005/07/11(月) 17:16:05malloc()は兎も角、ローカル変数はスタックに取られるので無理。
あと>558。
0560557
2005/07/11(月) 17:38:09元のソースを良く見たら別の関数でメモリリークしてました_no
ごめんなさい!!
0561デフォルトの名無しさん
2005/07/11(月) 17:43:54int m_nData1;
int *m_p;
public:
int GetData1 () { return m_nData1; }
int * GetP () { return m_p; }
};
class CSub : public CBase {
int m_nData2;
public:
CSub () { ZeroMemory(this, sizeof(CSub)); }
int GetData2 () { return m_nData2; }
};
あの、質問です。コンストラクタによる初期化で迷ってます。
コンストラクタで全部0にしたい場合、
ZeroMemoryでthisを指定して、全部0にしちゃっていいんでしょうか?
↑のはいちおう全部0が入ったのですが・・。
どなたかお願いします m(__)m
0562デフォルトの名無しさん
2005/07/11(月) 17:44:58だめ。
0563デフォルトの名無しさん
2005/07/11(月) 17:47:52仮想化した瞬間アボーンするからやっちゃダメ。
その例ならば、
CSub() : m_nData2(0) {}
というように0でメンバを一つずつ初期化するのが無難。
0564561
2005/07/11(月) 17:48:43素早い回答感謝です。
だめってことは、全部0にならない場合があるってこと
でしょうか?
Sub () { memset(this, 0, sizeof(CSub)); }
↑はどうですか?
これもいちおう成功したのですが・・。
0565561
2005/07/11(月) 17:49:51仮想関数使ったことないのでwよくわからないのですが、
やぱ一個ずつ0にするのが無難なのかあ。
0566デフォルトの名無しさん
2005/07/11(月) 17:52:13そうじゃなくて、0にしたら駄目な部分まで0にしてしまうから良くない。
ちなみに、CSub() : m_nData2() {} みたいに初期化する値を省略することもできる。
0567デフォルトの名無しさん
2005/07/11(月) 17:54:350568561
2005/07/11(月) 17:57:18m_nData2 = 0;
ってやらないのは、なにか意味があるんですか?
ときたまその記述方は見かけるのですが・・。
>>566
CSub () : m_nData2() {}
これを今やってみたのですが、0が入りませんよー (T_T)
雑魚な質問ばかりですみません m(__)m
0569デフォルトの名無しさん
2005/07/11(月) 18:02:23数学板の算数スレに行ってこい
0570デフォルトの名無しさん
2005/07/11(月) 18:15:01>563
初期化と代入の違いについて調べよ。
0571デフォルトの名無しさん
2005/07/11(月) 18:30:020572561
2005/07/11(月) 18:33:37すみません。私にはわからないので、
もうちょっと勉強してきます。
ヒントいただきました。
ご親切に、ありがとうございました。 m(__)m
0573デフォルトの名無しさん
2005/07/11(月) 18:39:220574デフォルトの名無しさん
2005/07/11(月) 19:22:39たとえば、「0x92, 0xca, 0x8f, 0xed, 0x00」とか
0575デフォルトの名無しさん
2005/07/11(月) 19:30:160576デフォルトの名無しさん
2005/07/11(月) 19:31:1616進数の文字コードとはどんな状態なんだ?
0577デフォルトの名無しさん
2005/07/11(月) 19:35:54文字コードに16進もクソもない。
0578>>577
2005/07/11(月) 19:42:030579デフォルトの名無しさん
2005/07/11(月) 19:42:35自己紹介乙
0580デフォルトの名無しさん
2005/07/11(月) 20:20:22文字列として入った状態です。
文字列を16進数に変換するには?
0581デフォルトの名無しさん
2005/07/11(月) 20:21:590582デフォルトの名無しさん
2005/07/11(月) 20:22:38> 文字列に変える関数を教えてください <574
> 16進数に変換するには? <580
何をどう変換したいんだ?
0583デフォルトの名無しさん
2005/07/11(月) 20:24:35strtol()
0584デフォルトの名無しさん
2005/07/11(月) 20:26:490585580
2005/07/11(月) 20:27:190586デフォルトの名無しさん
2005/07/11(月) 20:33:33質問が曖昧すぎだな
0587デフォルトの名無しさん
2005/07/12(火) 00:45:57ポインタ(その例では m_p )を ZeroMemory() とか memset() でゼロ埋めしても、
ヌルポインタ(その例では m_p(0) としたときの値)になることは言語の規格として保証されていないから、
移植性が問題になるときは気をつけれ。
0588デフォルトの名無しさん
2005/07/12(火) 09:13:05C言語では規定されていないけど、
C++ではNULLがビットパターン0になるよう規定されてなかったっけか?
まぁどちらにしろ、明示的に初期化した方がいいと思うけどさ。
0589デフォルトの名無しさん
2005/07/12(火) 09:17:16>C++ではNULLがビットパターン0になるよう規定されてなかったっけか?
ちがう
0590デフォルトの名無しさん
2005/07/12(火) 09:18:06まじかー、知らなかった、ありがとん!
0591デフォルトの名無しさん
2005/07/12(火) 09:56:440592デフォルトの名無しさん
2005/07/12(火) 12:13:16つーか、本件の場合それ以前に問題なわけだが。
0593デフォルトの名無しさん
2005/07/12(火) 12:22:500594デフォルトの名無しさん
2005/07/12(火) 12:31:490595デフォルトの名無しさん
2005/07/12(火) 12:36:29アドレス0に有効なデータを配置しないといけない環境。
0596デフォルトの名無しさん
2005/07/12(火) 12:37:39エンコード方法自体に違いはない。
エンコードするものが違うだけ。
って言うかスレ違いだろ。
0597デフォルトの名無しさん
2005/07/12(火) 12:56:19レスありがとうございました。
確かにスレ違いでした。すみません。
0598デフォルトの名無しさん
2005/07/12(火) 15:27:01srand(time(NULL))だと連続で早い処理では
同じ乱数ばかりがでてしまいます。
実行毎に違いばらばらな乱数を出すにはどうしたらよいのでしょうか?
0599デフォルトの名無しさん
2005/07/12(火) 15:46:26起動時に1回だけsrand呼ぶんじゃダメなのか?
0600デフォルトの名無しさん
2005/07/12(火) 15:51:42シーケンシャルに実行されるんなら、
・n = ファイル"rand.txt"から数を一つ読み込む、無ければ0。
・srand(n)
・ファイル"rand.txt"にrand()で乱数を一つカキコ。
・処理
でどう?
0601デフォルトの名無しさん
2005/07/12(火) 16:09:57馬鹿?
乱数系列の種を、特定の乱数系列かの乱数から得たら規則性ができちゃうじゃん。
0602デフォルトの名無しさん
2005/07/12(火) 16:11:580603598
2005/07/12(火) 16:38:08だとするとできれば避けたいです。
とりあえず今までwhileの中に入れてたsrand(time(NULL))を
whileの外からだすことにしました。するとさっきよりよい結果が。
それでも似た値(特に一回目が)になりますが妥協することにします。
ありがとうございました。
0604デフォルトの名無しさん
2005/07/12(火) 16:44:11ループ回るたびに乱数ルーチン初期化してるのがそもそも間違い。
普通は
srand(time(0));
while(true)
{
printf("%d\n", rand());
}
こんな感じで使う。
ちなみに乱数生成のパラメータはグローバルスコープ持ってるのが普通だから、通常はアプリ起動時に1回だけsrand呼べば十分。
0605超初心者ゴン
2005/07/12(火) 19:37:42memcpy((pCODE)->name,(BABS.name),sizeof(BABS.name));//古いメモリから確保されたメモリにコピーします
len = strlen(BABS.add);
pCODE->add = new char[len+1];
strcpy(pCODE->add , BABS.add);
memcpy(&(pCODE->add_len),&(BABS.add_len),sizeof(short));
memcpy(&(pCODE->anco),&(BABS.anco),sizeof(short));
memcpy(&(pCODE->teno),&(BABS.teno),sizeof(short));
memcpy(&(pCODE->num) ,&(BABS.num) ,sizeof(short));
memcpy(&(pCODE->age) ,&(BABS.age) ,sizeof(short));
//指定されたメモリを上書きする
memcpy((g_pCODE->name)+g_REVI_num,(pCODE->name),sizeof(hangar));
len = strlen(pCODE->add);
(g_pCODE->add) = new char[len+1];
strcpy((g_pCODE->add)+g_REVI_num,(pCODE->add));
memcpy(&(g_pCODE->add_len)+g_REVI_num,&(pCODE->add_len),sizeof(hangar));
memcpy(&(g_pCODE->anco)+g_REVI_num,&(pCODE->anco),sizeof(hangar));
memcpy(&(g_pCODE->teno)+g_REVI_num,&(pCODE->teno),sizeof(hangar));
memcpy(&(g_pCODE->num) +g_REVI_num,&(pCODE->num) ,sizeof(hangar));
memcpy(&(g_pCODE->age) +g_REVI_num,&(pCODE->age) ,sizeof(hangar));
delete [] pCODE; //使い終わったメモリを解放する
struct hangar{
char name[21];//名前
short anco;//市外局番
short teno;//局番
short num;//番号
short age;//年齢
char *add;//住所
short add_len;//住所用の長さ
};
g_REVI_numは修正�bナす ・hangar *g_pCODE; ・extern hangar *g_pCODE;
なにかうまく行きません。なんか変なところばかりですけど、もっと変なところはありませんか?
0606デフォルトの名無しさん
2005/07/12(火) 20:08:37>もっと変なところはありませんか?
なんて答えて欲しいんだ?
で、なんでmemcpy()を使うの? 普通に考えれば只の代入でよさそうな気がするのだけれど。
0607デフォルトの名無しさん
2005/07/12(火) 20:16:34#include <stdio.h>
main() {
printf("Hello!");
return 0;
} でプログラムをコンパイルしようと
すると、
エラー E2209 sample1.c 1: インクルードファイル 'stdio.h' をオープンできない
警告 W8065 sample1.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main )
*** 1 errors in Compile ***、というエラーがでます。どなたか解決策を教えてください。
コンパイラはborlandを使ってます。
0608デフォルトの名無しさん
2005/07/12(火) 20:18:56コンパイラの設定がうまく行ってないと思われる。
0609デフォルトの名無しさん
2005/07/12(火) 20:20:32http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq4.html
0610デフォルトの名無しさん
2005/07/12(火) 20:55:16*pCode = BABS;
パット見だけど、でいいんでないの?
0611デフォルトの名無しさん
2005/07/12(火) 21:16:02文節中に副詞句を割り込ませるとはなかなかやるな。
それはそうと、pCode->addの指す先をコピーしないとまずい希ガス。
0612デフォルトの名無しさん
2005/07/12(火) 21:29:34浅いコピーと深いコピーの違いだな
>>610だと浅いコピーになる
0613デフォルトの名無しさん
2005/07/12(火) 22:13:13なぜか正常に動作してくれません。
mallocあたりがおかしいんでしょうか。それとも文字列の代入が・・・?
#define N 5
int main(void){
char s[101] , *stbl[N];
int i;
for(i = 0 ; i < N ; i++) stbl[i] = NULL;
for(i = 0 ; i < N ; i++){
printf("%d : " , i+1);scanf("%100s" , s);
if((stbl[i] = (char *)malloc(sizeof(char) * strlen(s) + 1)) == NULL)
printf("Memory Error\n");goto FREE;
stbl[i] = s;
}
for(i = 0 ; i < N ; i++) printf("%s\n" , stbl[i]);
FREE:
for(i = 0 ; i < N ; i++) free(stbl[i]);
return 0;
}
0614デフォルトの名無しさん
2005/07/12(火) 22:16:10> stbl[i] = s;
strcpy(stbl[i], i);
あとここを
> char s[101] , *stbl[N];
こうすれば
char s[101] , *stbl[N] = {0};
直後のfor(i = 0 ; i < N ; i++) stbl[i] = NULL;が不要になる。
0615デフォルトの名無しさん
2005/07/13(水) 00:03:58/* Big endian: */
#if !(defined(__alpha)||defined(__i386__)||defined(__vax__))
#define BIG_ENDIAN
#endif
こんな感じのコードをみかけます。
ダウンロードしてきたソースコード内を検索してみましたが、
defined(XXX)の中のXXXがマクロ定義されている部分は見つかりませんでした。
コンパイラさんは一体いつ、どこでXXXが定義されている、いないを判断しているんでしょうか
コンパイラは
gcc version 3.3.3
です。
0616デフォルトの名無しさん
2005/07/13(水) 00:43:13コンパイラにすら届かない
0617デフォルトの名無しさん
2005/07/13(水) 00:46:24CPUが勝手に処理するんでしょうか?
0618初心者
2005/07/13(水) 00:54:08住所だけが可変なんで固定長ならそうでいいかもしんないですけど。・・・
でもあとで住所を更新すればいいかもしんないですけど。。。
0619デフォルトの名無しさん
2005/07/13(水) 00:54:52プリプロセッサが処理する
0620デフォルトの名無しさん
2005/07/13(水) 01:20:50>pCODE->add = new char[len+1];
〜中略〜
>delete [] pCODE; //使い終わったメモリを解放する
↑ありえない。delete [] pCODE->add; delete pCode; だろ
>short add_len;//住所用の長さ
↑わざわざ宣言してるのに何故使わない?
>&(g_pCODE->add_len)+g_REVI_num
↑意味わからん。これでいいだろ→(g_pCode+g_REVI_num)->add_len
>住所だけが可変なんで
↑ならそう書け↓
memcopy(pCode, &BABS, sizeof(hangar));
pCODE->add = new char[BABS.add_len+1];
strncpy(pCODE->add, BABS.add, BABS.add_len);
0621デフォルトの名無しさん
2005/07/13(水) 01:24:190622デフォルトの名無しさん
2005/07/13(水) 01:25:59もーすぐあのスレで宿題が解かれるよ
0623デフォルトの名無しさん
2005/07/13(水) 01:49:06コンパイラ(プリプロセッサ)が自動的に定義するマクロがある。
gccだったら、
echo | gcc -dM -E -
としてみると、そういうマクロの一覧が見られる。
0624デフォルトの名無しさん
2005/07/13(水) 01:54:15カスタムビルドで使う環境変数マクロ(ProjectDirなど)を
自作したいんですがどうすれば可能でしょうか?
0625デフォルトの名無しさん
2005/07/13(水) 02:54:350626デフォルトの名無しさん
2005/07/13(水) 08:43:57言語は C/C++ どっちでもいいです。できれば環境に依存しない方法を。
今のところは↓のようにしているのですが、これって問題ありますか?また、一般的ですか?
long filesize(const char* path)
{
long size;
FILE *fp=fopen(path,"rb"); if(fp==NULL)return -1;
fseek(fp,0,SEEK_END);
size=ftell(fp);
fclose(fp);
return size;
}
0627デフォルトの名無しさん
2005/07/13(水) 09:32:06環境に依存しない一般的な方法はない。
そもそも、ファイルの概念が存在しない環境もある。
0628デフォルトの名無しさん
2005/07/13(水) 09:46:44そのやり方は、まぁ無難だね。
問題は、2GBを超えるファイルの扱いだけど。
それと、多くの環境でstat()が使えるし、
外部コマンドに頼る方法もあるので検討してみては?
0629626
2005/07/13(水) 10:28:120630デフォルトの名無しさん
2005/07/13(水) 10:28:59int a, b;
unsigned int c;
a = -1;
b = 0;
c = 20;
if (a < (b + c))
return 0;
ということを行なうと、どうやらunsigned比較が行なわれるらしく、比較の結果がfalseになります。
この暗黙のキャストの優先順位はどう決まっているのでしょうか?
0631デフォルトの名無しさん
2005/07/13(水) 10:36:17unsigned と signed の演算では unsigned として計算される。
signed として扱いたいなら明示的にキャストする必要あり。
0632超初心者ゴン
2005/07/13(水) 10:51:17ありがとうございます!
0633超初心者ゴン
2005/07/13(水) 11:28:02strcpy(pCODE->add, BABS.add, BABS.add_len);
'strcpy' : 関数が不正な 3 個の実引数をともなって呼び出されました。
ってなってしまいました。
0634デフォルトの名無しさん
2005/07/13(水) 11:32:480635デフォルトの名無しさん
2005/07/13(水) 11:35:300636デフォルトの名無しさん
2005/07/13(水) 11:38:50ありがとうございました。
コンパイラは警告はいてくれませんでした。VS6.0です。
警告レベルをあげてみますね。
0637デフォルトの名無しさん
2005/07/13(水) 11:47:41将来使うつもりで変数を宣言しておいたところ、「一度も使われていません」警告がでました。
それは当然なのですが、これが邪魔っけなので消したいのですが
int a = 0;
a = a;
とかやると(現段階では)無駄な動作が入ってしまいます。
昔どこかで「これは使われてないけど、使ったことにしておく」命令を見た覚えがあるのですが、どなたかご存知ないでしょうか。
よろしくお願いします。
0638デフォルトの名無しさん
2005/07/13(水) 11:48:12ゲーム作るには、何らかのソフトウェアが必要ですよね?
0639東海大学前
2005/07/13(水) 11:48:36・駐車時間が1時間未満ならば無料
・駐車時間1時間から3時間未満までは150円
・3時間以上は、一律300円
・0(ゼロ)を入力すると終了する。
というのがどうしても分からないのですが、よかったら教えて頂けないでしょうか?
<プログラム実行例>
PARKING
Input minutes = 430
Parking time => 7:10 =>\300
Input minutes = 127
Parking time => 1:7 =>\150
Input minutes =67
Parking time => 1:7 =>\150
Input minutes =32
Parking time =>0:32 =>\ 0
Input minutes =0
0640デフォルトの名無しさん
2005/07/13(水) 11:50:15gccにはそういう指定がある。VC++とか他のコンパイラは知らん。
0641デフォルトの名無しさん
2005/07/13(水) 11:50:31何のコンパイラ使ってるか知らんが、WIN32 SDK さえあれば、
C言語だけで作れないことはない。
0642デフォルトの名無しさん
2005/07/13(水) 11:59:51> <プログラム実行例>
>
>
> PARKING
> Input minutes = 430
> Parking time => 7:10 =>\300
> Input minutes = 127
> Parking time => 1:7 =>\150
> Input minutes =67
> Parking time => 1:7 =>\150
> Input minutes =32
> Parking time =>0:32 =>\ 0
> Input minutes =0
なんだ、もう出来上がってるじゃん。
0643デフォルトの名無しさん
2005/07/13(水) 12:01:45コメントにしておけば?
0644デフォルトの名無しさん
2005/07/13(水) 12:09:36コンパイラのオプションで警告が出ないようにする。
できるかどうかはコンパイラによる。
0645東海大学前
2005/07/13(水) 12:10:570646東海大学前
2005/07/13(水) 12:16:26[2] 問題文(含コード&リンク): キーボードから整数値の駐車時間を分単位で読み込む。
・駐車時間が1時間未満ならば無料
・駐車時間1時間から3時間未満までは150円
・3時間以上は、一律300円
・0(ゼロ)を入力すると終了する。
というのがどうしても分からないのですが、よかったら教えて頂けないでしょうか?
<プログラム実行例>
PARKING
Input minutes = 430
Parking time => 7:10 =>\300
Input minutes = 127
Parking time => 1:7 =>\150
Input minutes =67
Parking time => 1:7 =>\150
Input minutes =32
Parking time =>0:32 =>\ 0
Input minutes =0
[3] 環境
[3.1] OS:Windows/Linux/等々 windows xp
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか c/c
[4] 期限 できれば今すぐお願いします。
0647デフォルトの名無しさん
2005/07/13(水) 12:19:200648デフォルトの名無しさん
2005/07/13(水) 12:23:54いい加減、スレ違いだって事に気づけよ
0649デフォルトの名無しさん
2005/07/13(水) 12:52:39char *i_mainchar;
sprintf(i_mainchar,"%d",i_main);
for(int i = 1;strlen(i_mainchar) - 1 >= i; i++){
cout << i_mainchar[i];
}
なぜか実行すると落ちるんですが…
cout部分のiを直接指定すると平気です。
原因がわかりません。よろしくお願いします。
0650デフォルトの名無しさん
2005/07/13(水) 12:55:12こうやると途中にスペースがあるファイルだとスペースで読み込みを中止して
次の行になってしまうんですが回避する方法はありませんか?
std::string FileName;
std::cin >> FileName;
std::ifstream Input_File( FileName.c_str() );
std::string str;
std::vector< std::string > input;
int i=0;
while(!Input_File.eof()){
Input_File >> str;
input.resize(i+1);
input[i] = str;
i++;
std::cout << str << std::endl;
}
0651デフォルトの名無しさん
2005/07/13(水) 13:01:05i_maincharが何も指してない。
0652649
2005/07/13(水) 13:15:15ありがとうございました^^
# Cの変数は難しい〜。
0653デフォルトの名無しさん
2005/07/13(水) 13:26:09std::stringへの>>は空白区切り。
行単位で読みたいときはstd::getline
0654デフォルトの名無しさん
2005/07/13(水) 13:42:44a;
とだけ書けば良かったような希ガス。
0655デフォルトの名無しさん
2005/07/13(水) 14:24:36bccなら
プリプロセッサ指令#pragma warn - 8057を入れるか
コマンドラインオプションで-w-8057入れとけ
0656超初心者ゴン
2005/07/13(水) 15:48:21誰か見ていただけませんでしょうか?
0657デフォルトの名無しさん
2005/07/13(水) 16:00:130658超初心者ゴン
2005/07/13(水) 16:02:080659デフォルトの名無しさん
2005/07/13(水) 16:03:250660デフォルトの名無しさん
2005/07/13(水) 16:05:05それやるとBCCでは
W8019 コードは効果を持たない
と言われる。
なぜかcppだと言われない。
0661デフォルトの名無しさん
2005/07/13(水) 16:10:340662デフォルトの名無しさん
2005/07/13(水) 16:11:57(void)a;
じゃだめ?
0663超初心者ゴン
2005/07/13(水) 16:19:380664デフォルトの名無しさん
2005/07/13(水) 16:21:030665超初心者ゴン
2005/07/13(水) 16:23:37どうすれば送れるのですか?
0666デフォルトの名無しさん
2005/07/13(水) 16:28:56回線切って首吊って氏ね。
0667超初心者ゴン
2005/07/13(水) 16:31:190668超初心者ゴン
2005/07/13(水) 16:31:540669超初心者ゴン
2005/07/13(水) 16:34:110670659
2005/07/13(水) 16:35:170671デフォルトの名無しさん
2005/07/13(水) 16:44:290672デフォルトの名無しさん
2005/07/13(水) 16:54:070674デフォルトの名無しさん
2005/07/13(水) 17:15:52環境をかけって事をいいたいのではないかと。
0675659
2005/07/13(水) 17:43:340676デフォルトの名無しさん
2005/07/13(水) 17:58:470677613
2005/07/13(水) 18:12:58遅れてスマソ
strcpy(stbl[i], i); は strcpy(stbl[i], s); ですよね。
正常に動作することはできましたが、なんでstbl[i]=s; ではだめなんでしょうか・・・?
0678デフォルトの名無しさん
2005/07/13(水) 18:33:28sがA番地、stbl[i]がB番地を指しているとすると
strcpy()では、A番地から始まる文字列をB番地にコピーする
stbl[i] = s; では、stbl[i]もA番地を指すようになる
(ついでに、malloc()で確保したB番地を指す者が存在しなくなるので、メモリリークとなる)
やってることは全然違う。
0679デフォルトの名無しさん
2005/07/13(水) 19:14:24stbl[i] = s;ができるのならstrcpyも存在するわけがない。
つまりstbl[i] = s;ができないからstrcpyが在る。
0680デフォルトの名無しさん
2005/07/13(水) 19:53:42トートロジー以下
0681デフォルトの名無しさん
2005/07/13(水) 20:07:440682デフォルトの名無しさん
2005/07/13(水) 20:20:03関数のプロトタイプみただけじゃ何やってるかわからん。
引数に指定された値を書き換えるのって気持ち悪いと思うのはオレだけか?
0683デフォルトの名無しさん
2005/07/13(水) 20:24:50無理にやれとは言わないよ
> 関数のプロトタイプみただけじゃ何やってるかわからん。
プロトタイプに期待しすぎ
> 引数に指定された値を書き換えるのって気持ち悪いと思うのはオレだけか?
書き換えないときはconstで
0684デフォルトの名無しさん
2005/07/13(水) 20:29:48引数に指定された値を書き換えるのはCでは不可能だが?
0685デフォルトの名無しさん
2005/07/13(水) 20:33:54それ、C/C++だけか?
0686マリー
2005/07/13(水) 21:11:310687初心者丸出し
2005/07/13(水) 21:12:52getcharやscanfでキーボード入力ができません。
windowsではキーボード入力できないのですか?
0688デフォルトの名無しさん
2005/07/13(水) 21:14:09なんで「できない」と思ったのか?
0689デフォルトの名無しさん
2005/07/13(水) 21:16:40できますよ!
そのプログラムを晒しなさい、怒らないから
0690デフォルトの名無しさん
2005/07/13(水) 21:17:140691初心者丸出し
2005/07/13(水) 21:35:18聞いといてなんですが何とか解決しました。
もう一つ聞きたいのですが、エディタは皆さんどんなのを使ってるのでしょうか?
今使っているエディタは括弧の対応が分かりづらくて苦労してます
0692デフォルトの名無しさん
2005/07/13(水) 21:36:32まあ薦めはしないが
0693デフォルトの名無しさん
2005/07/13(水) 21:41:11STLって使える場面ではどんどん使って大丈夫ですか?
それともあまり使わないほうがいいのでしょうか?
0694デフォルトの名無しさん
2005/07/13(水) 21:41:56薦めないのか?vi使ってるよ
0695初心者丸出し
2005/07/13(水) 21:51:15実はお恥ずかしい話ですが、シェル(ターミナル?)がないと
コンパイルの仕方分からないんですよ…
だからコンパイル実行機能付きのエディタ使ってるんですが…
0696デフォルトの名無しさん
2005/07/13(水) 21:51:48>>2は少々誇張表現気味。
あまり気にせずに使え。
0697デフォルトの名無しさん
2005/07/13(水) 21:52:57どうせすぐ慣れるから今はそれでいいんじゃない?
0698デフォルトの名無しさん
2005/07/13(水) 22:30:25cygwinでも入れとけ。
unix互換シェルにgccも入ってる
viやemacsも入ってたはず
0699デフォルトの名無しさん
2005/07/13(水) 22:33:40なるほど、気にしないで使ってみます。返答ありがとうございました。
0700初心者丸出し
2005/07/13(水) 22:58:14cygwinですか一度入れてみます
ありがとうございました
0701デフォルトの名無しさん
2005/07/13(水) 23:23:450702デフォルトの名無しさん
2005/07/14(木) 00:08:41ご参考までに。
#include <stdio.h>
char* to_radix_n(unsigned int x, char* s, int n) {
int index = 0, left = 0, digit;
char temp;
do {
digit = x % n;
s[index++] = digit > 9 ? digit - 10 + 'A' : digit + '0';
} while (x /= n);
s[index--] = '\0';
while (left < index) {
temp = s[left];
s[left++] = s[index];
s[index--] = temp;
}
return s;
}
int main(void) {
unsigned int x;
char s[256];
printf("Enter Number:"); scanf("%u", &x);
printf("%u(10) = %s(16)\n", x, to_radix_n(x, s, 16));
}
0703620
2005/07/14(木) 00:10:41>strcpy(pCODE->add, BABS.add, BABS.add_len);
~~~~~~~
もういちど>>620を良く見直せ。
0704デフォルトの名無しさん
2005/07/14(木) 00:32:30LSI C86 Ver3.30c試食版をXPつかっているんだがコマンドプロンプトで
コンパイルしたら
aaa.c 1: can't open: stdio.h: No such file or directory
て、でてコンパイルできないんだが。
たのむ!誰か教えてくれ!
0705デフォルトの名無しさん
2005/07/14(木) 00:33:180706デフォルトの名無しさん
2005/07/14(木) 00:36:370707デフォルトの名無しさん
2005/07/14(木) 00:38:500708デフォルトの名無しさん
2005/07/14(木) 00:48:550709デフォルトの名無しさん
2005/07/14(木) 00:51:120710デフォルトの名無しさん
2005/07/14(木) 00:51:420711デフォルトの名無しさん
2005/07/14(木) 00:52:53これで問題解決
0712デフォルトの名無しさん
2005/07/14(木) 00:54:05GPLとか希望に燃える16歳にはキツスギス
0713デフォルトの名無しさん
2005/07/14(木) 00:56:42cygwin入れるぐらいならLinux入れろと。
0714デフォルトの名無しさん
2005/07/14(木) 00:57:08LSI-C86試食版は、ロングファイル名に対応してないからだろ。
ソースの置き場所を工夫してみろ。
0715デフォルトの名無しさん
2005/07/14(木) 00:57:27うん、実行するのにdllガイルんじゃ友達に自慢できないもんね
0716デフォルトの名無しさん
2005/07/14(木) 00:57:42>>704のコンパイラならその萌えてる希望は実現可能って事か。
切ないぞ
0717デフォルトの名無しさん
2005/07/14(木) 00:58:21まじかよw
0718デフォルトの名無しさん
2005/07/14(木) 00:59:49>>715
くだらん理由だよw
0719デフォルトの名無しさん
2005/07/14(木) 01:00:35本当?おかしいなぁ。
0720デフォルトの名無しさん
2005/07/14(木) 01:06:41aaa.c 1: can't open: stdio.h: No such file or directory
と、でるばっかりだ。
そもそもなんでこれがでるのか教えてくれないか
0721デフォルトの名無しさん
2005/07/14(木) 01:10:030722デフォルトの名無しさん
2005/07/14(木) 01:10:14忍耐力あるんだな
>>707
>>714
0723デフォルトの名無しさん
2005/07/14(木) 01:10:29まじでmingw入れろ。幸せになれるから。
0724デフォルトの名無しさん
2005/07/14(木) 01:11:44#include <stdio.h>
main()
{
printf("ようこそC言語へ!\n");
return 0;
}
0725デフォルトの名無しさん
2005/07/14(木) 01:16:33うむ、完璧だ
0726デフォルトの名無しさん
2005/07/14(木) 01:19:43変えるためフォントを開いたんだよな。そのとき書式も変えてMS P明朝
にしてあるんだが何か関係あるか
0727デフォルトの名無しさん
2005/07/14(木) 01:19:58ぼちぼち次の餌をクレ
0728デフォルトの名無しさん
2005/07/14(木) 01:25:460729デフォルトの名無しさん
2005/07/14(木) 01:27:48そう思うなら新規でテキストファイル作ってそこにコピペしろ
後>>722の意味がわからないならそう言え
0730デフォルトの名無しさん
2005/07/14(木) 01:31:260731446
2005/07/14(木) 01:37:14char c = -1;
とすると (c==-1) と (0<=c) の両方が成立してしまうコンパイラ>LSI C86
0732デフォルトの名無しさん
2005/07/14(木) 01:38:25ttp://www.cmagazine.jp/beginner/lsic/
0733デフォルトの名無しさん
2005/07/14(木) 01:49:520734デフォルトの名無しさん
2005/07/14(木) 01:51:48{
char c[3000], nwo[3000];
int j, i;
scanf("%s", &c);
/*for(i=0; i<3000; ++i){
nwo[i]=0;
} */
printf("%c\n", c[2]);
return 0;
}
キーボード入力でabcdeと入力したらcが出力されるようにしているつもりなんですが、
/* */をはずすと何も出力されなくなるんです。なぜだか分かりません
配列cとは何も関係ないように思うのですが
0735デフォルトの名無しさん
2005/07/14(木) 01:54:37画像処理を課題に出されて、その第一段階でつまずいてしまいました。
配列に画像データをバイナリで取り込んで、配列をファイルに書き出しして画像データに戻そうとしたのですが、
元画像サイズが1MBちょっとなのに対して、できた画像は50kB足らずで当然表示も出来ません。
バイナリエディタで開くと途中までは書き込めているようなのですが・・・
また、3kBの画像ではちゃんと動きました。
何が問題なのでしょうか?ご教授お願いします。
コンパイラはLSI C-86 Ver.3.30c 試食版を
ttp://homepage3.nifty.com/aokura/#C言語を始めよう!
を通して使っています。ってこれのせいかな・・・
0736735
2005/07/14(木) 01:55:00#include <stdio.h>
#define H 54/* 54byte */
#define D 1228800 /* 縦*横*4byte = 640*480*4 */
FILE *fp;
char data[H+D];
void get_ref(void){
fp = fopen("ref.bmp","rb");
fread(data, 1, H+D, fp);
fclose(fp);
}
void main(){
get_ref();
fp = fopen("ref2.bmp","wb");
fwrite(data, 1, H+D, fp);
fclose(fp);
}
0737デフォルトの名無しさん
2005/07/14(木) 01:57:42んじゃメモリの構造を考える時間だな
charの前にstaticつけてみろ
0738デフォルトの名無しさん
2005/07/14(木) 01:58:54int main(void)
{
char c[3000] , nwo[3000] = {0};
int i , j;
scanf("%s" , c);
printf("%c\n" , c[2]);
return 0;
}
0739デフォルトの名無しさん
2005/07/14(木) 01:59:04scanf("%s", c);
0740734
2005/07/14(木) 02:02:38できたー!
0741デフォルトの名無しさん
2005/07/14(木) 02:04:36メモリの構造というと語弊があったな
メモリの構造→メモリの確保の仕方
0742734
2005/07/14(木) 02:07:52NULL pointer assignment
って出てしまいました。よくわかりません
0743デフォルトの名無しさん
2005/07/14(木) 02:15:37int main(void){
char c[2];
scanf("%s",c[0]);/*2文字以上入力*/
printf("%s\n" , c[0]);
return 0;
}
C言語のauto変数でこんなことも許されてるのは何故ですか?
ほかのメモリ領域を侵食してしまったりして危険だと思うのですが
0744734
2005/07/14(木) 02:15:41staticをつけるとグローバル変数になると言うことでよろしいのでしょうか?
0745デフォルトの名無しさん
2005/07/14(木) 02:18:20本当にコンパイルしたのか?
0747デフォルトの名無しさん
2005/07/14(木) 02:25:16もしそれがエラーにならないんだったら、使うのをオススメできないんだが。
0748743
2005/07/14(木) 02:33:13エラーも無しで綺麗にリンカーまで通ってしまいました
オプション指定無しでですが
#昔、auto変数の配列のことで聞いた事があったので試してみたのですが…
#lsic86は簡単な実験をするときに使っていたのですが、gccの導入を考えておこうと思います
0749デフォルトの名無しさん
2005/07/14(木) 02:41:38それによって生じるメモリの扱われ方とか確保のされ方とかその辺を言いたかった
ちなみに>>743もstaticつければ多分エラーがでるのではないかと
実行環境ないから検証できんが
0750749
2005/07/14(木) 02:44:12スルーしてくれ
0751デフォルトの名無しさん
2005/07/14(木) 02:47:22引数の型チェックはしないし、できない。大体、引数の個数も型も
決まっちゃいないんだからな。
コンパイラがprintf()書式指定文字列を「知って」おり、それに照らし合わせて
積極的にチェックするような仕様でない限り、コンパイルが通ってしまうのは、
普通だ。
0752デフォルトの名無しさん
2005/07/14(木) 02:57:280753デフォルトの名無しさん
2005/07/14(木) 02:59:48>>743のように、char*を渡すべきところにcharを渡すようなバグ
に対しては、何の役にも立たない。
0754743
2005/07/14(木) 03:00:57ということはlsic86が悪いというわけでは無いのですね
でも、静的変数にしておくとscanfで入力したあとに
エラーとして(NULL)が出力されてプログラムが終了するのですが
これは静的変数と動的変数の違いの一つなのでしょうか?
0755743
2005/07/14(木) 03:02:13× 動的変数
○ 自動変数
0756デフォルトの名無しさん
2005/07/14(木) 03:02:34いや、クラッシュしてるから
0757デフォルトの名無しさん
2005/07/14(木) 03:07:10じゃなくて、書式指定文字列ではここはnull terminateされたchar*文字列
を渡すんだといっておきながらcharを渡しているわけだから、
その時点でバグなの。
その結果は、メモリの破壊。SEGVで落ちるかも知れないし、
どこかを知らずに書き換えるだけかもしれない。
可変長引数関数に関しては、一般的なCコンパイラはそういった種類の
バグを検出できない、というだけの話。
0759デフォルトの名無しさん
2005/07/14(木) 06:28:29メッセ−ジは発生しないのでしょうか?
0760デフォルトの名無しさん
2005/07/14(木) 07:30:17int main(void)
{
int dat;
int ans;
printf("Input 'dat' ... ");
scanf("%d", &dat);
ans - dat + 2;
printf("dat : 2 = %d\n",ans);
return 0;
}
質問です
上のソースファイルをコンパイルすると
30:1: warning: no newline at end of file
というメッセージがでてどうすればいいかわかりません。
メッセージの意味とどうすればいいか教えてください。
0761デフォルトの名無しさん
2005/07/14(木) 07:36:28ソースファイルは改行で終わらないといけない。
なのにお前のコードはそうなってはいないよという警告。
0762760
2005/07/14(木) 07:50:53お答えありがとうございます
なるほどそういういみですか。
最後の } を入力した後、enterキーを押して改行を行うと本には書いてあるんですが、
そのとうりやって、保存して、メモ帳を閉じる、という手順でやってるんですが。。。
何がいけないんでしょう?
0763デフォルトの名無しさん
2005/07/14(木) 08:16:570764760
2005/07/14(木) 08:28:55朝からごくろうさんです。
0765デフォルトの名無しさん
2005/07/14(木) 08:44:02あんたの日本語能力、態度、その他諸々。
0766デフォルトの名無しさん
2005/07/14(木) 08:44:38英語能力も指摘しておかないと。
0767デフォルトの名無しさん
2005/07/14(木) 09:19:39a.c:16: error: two or more data types in declaration of `main'
int main()
{
の括弧でエラーが出てるんですが…
0768デフォルトの名無しさん
2005/07/14(木) 09:24:02その前のクラス、構造体宣言にセミコロンが無い。
0769デフォルトの名無しさん
2005/07/14(木) 09:31:39どうもありがとうございました^^
0770768
2005/07/14(木) 09:44:51まぁ俺は経験からすぐにわかったが、別に経験が必要なわけじゃない。
http://www.google.co.jp/search?hl=ja&q=%22two+or+more+data+types+in+declaration%22&lr=lang_ja
0771769
2005/07/14(木) 10:16:29文字列検索は""をつけるといいんですね。。覚えておきます。。
0772デフォルトの名無しさん
2005/07/14(木) 10:54:08char table_name[10]=
{
(省略)
};
の「char table_name[10]」の部分の正式な名称があるとおもいますが、教えていただけますでしょうか?
0773デフォルトの名無しさん
2005/07/14(木) 11:00:310774超初心者ゴン
2005/07/14(木) 11:05:00(pCODE)->addとpCODE->addって意味は一緒でしょうか?
0775デフォルトの名無しさん
2005/07/14(木) 11:15:070776デフォルトの名無しさん
2005/07/14(木) 11:16:17同じだが、何か省略してないか?
0778デフォルトの名無しさん
2005/07/14(木) 11:57:41class CSub1
{
int *pdata
CSub1(int i){
pdata=somoting(i);
}
}
class CSub2
{
CSub2(int *pdata){}
}
class CMain:public CSub1 ,public CSub2
{
int *const pdata;
CMain(int i):CSub1(i),pdata(CSub1.pdata),CSub2(CSub1.pdata) //or CSub2(pdata)
{}
}
としてもコンパイルが通りません
CSub1 CSub2は既存のライブラリーのクラスなので変更できません.
解決策はないのでしょうか?
0779デフォルトの名無しさん
2005/07/14(木) 12:07:18その定義を二つの部分に分けるなら、「char」と「table[10]={...}」に分かれる。
したがって、「char table_name[10]」の部分に名前はない。
文法的には、
「char」がdecl-specifier-seq
「table_name[10]」がdeclarator
「={...}」がinitializer
だと思う。
0780デフォルトの名無しさん
2005/07/14(木) 12:21:43省略しすぎで訳わからん。
>778だけ見るとCSub1::pdataはprivateに見えるのだが?
0781デフォルトの名無しさん
2005/07/14(木) 12:39:09どうして一番重要なエラーメッセージを載せない?
0782デフォルトの名無しさん
2005/07/14(木) 12:53:07その中でランキングを作ろうと思って
a[0].name=("%s",name);/*ここにゲームの結果*/
a[0].rscore=("%d",score);
for(i=0;i<10;i++)/*ファイルの読み取り*/
fscanf(fp1,"%s%d",a[i+1].name,&a[i+1].rscore);
上のようにやってこのあと構造体に渡そうとしてるんですけど
どうやらデータがa.name,a.rscoreに入ってないようで表示させようとしたら
エラーででて終了してしまうんですけど、どこが悪いかわかりますか?
0783デフォルトの名無しさん
2005/07/14(木) 13:12:29>どこが悪いかわかりますか?
頭。
名前に空白を入れられても詰まらんから、スコアファイルはfscanf()よりfgets()+sscanf()の方が無難だろうなぁ。
スコアを先に置けばsscanf()の代わりにstrtol()でもいいかも知らん。
いずれにしても、やりたいことが判らんからもう少し全体が判るようにソースを晒して味噌。
#まさか、最初はファイルがないから読み込めないって落ちだったら笑うが。
0784778
2005/07/14(木) 14:00:57class CCreateData
{
public:
int *pdata;
CCreateData(int i){pdata=create(i);}
};
class CWrapperOfDataOperation
{
public:
CWrapperOfpDataOperation(int *pdata){
variouseInitialize(pdata);
}
operator = ...
};
class CDataAndOperation:public CCreateData ,public CWrapperOfpDataOperation
{
public:
int *const pdata;
CDataAndOperation(int i):CCreateData(i),pdata(CCreateData.pdata),CWrapperOfpDataOperation(pdata)
{}
};
ごめん,今したらコンパイルは通った。
けれど int *const pdata; に値が何もわりあてられてないので
コンストラクター
CWrapperOfpDataOperation(pdata)
で失敗して
0xcccccd8を読み込み中にアクセス違反が発生しました
というエラーが出る
0785デフォルトの名無しさん
2005/07/14(木) 14:07:40> a[0].name=("%s",name);/*ここにゲームの結果*/
> a[0].rscore=("%d",score);
(´・д・`) ポカーン…
0786デフォルトの名無しさん
2005/07/14(木) 14:24:53> a[0].name=("%s",name);/*ここにゲームの結果*/
> a[0].rscore=("%d",score);
豪快だなあ・・・Lua みたいだな
文字列同士の代入は出来ないぞ
sprintf( a[0].name, "%s", name );/*ここにゲームの結果*/
とかだな
あと、a[] の配列サイズは 11 個あるんだよな?
0787デフォルトの名無しさん
2005/07/14(木) 14:46:46そう言う事は、構造体の定義を見てから言え。
0788デフォルトの名無しさん
2005/07/14(木) 16:09:28>783
0789デフォルトの名無しさん
2005/07/14(木) 17:02:34宣言子
0790デフォルトの名無しさん
2005/07/14(木) 18:33:35> >>782
> >どこが悪いかわかりますか?
> 頭。
イイコトイッタ(゚∀゚)
0791デフォルトの名無しさん
2005/07/14(木) 18:35:29変数の定義の一部
0792デフォルトの名無しさん
2005/07/14(木) 20:19:16, '´ / / `''‐、 \
, '‐''"~´ ̄ ̄`~`ヽ、 / \ ヽ
. /  ̄``''‐.、 ∠>ヽ./\ ヽ
. / _____ \ /゚ / ヽヽ
〈 ,. ‐''"~´ l ``''‐、 ヽ. / [ [[[ ヽi
. ヽ. /ヽ、_,. -┴─-== __=-'_、_, \、_/ _l
. | / 、.__/ ノ!ヽ、._ー-‐''⌒,r=-─ゝノ|| ‖  ̄ ̄ ̄ |
! { / ,イ{ ヽ ( 〈、_,.ィrヮー< _,リ_|| ‖ !
ヽ :ヽ _{. 〈.'`ァrッ‐、- - ,, ヽ-‐='..ゞ.{_.|| ‖ :l
. `‐、\\ヽヽ-‐ツ ''´ `{_ |! ‖ !
: |{_ ヽ.i. 〔ー- { !. |!__ ,'
. : |{_ _)l `,ィ-─_、 // | 0| ___/
: |{_ ミ. ! ヽ ̄,.-‐) .// /l ̄ __/
: |{ ,.`ヽ. `ー '´.∠‐'´ /'´ ̄ノ,ノ/
,l ‐''"~´ ̄ ̄ ̄l~´ /-──<´
| 「 --┘ |___/ `! |
L.. -─ ''_""~ ̄‐''"~´l | |
アドレスを直接参照できるなんて気持ち悪いって言ってんだよーーーーー
0793デフォルトの名無しさん
2005/07/14(木) 20:56:530794デフォルトの名無しさん
2005/07/14(木) 22:11:01void Main(void){
この上記の引数のvoidは、1番目のvoidを強調していると考えてよいのでしょうか。
0795デフォルトの名無しさん
2005/07/14(木) 22:12:38単に引数がないことを明示している。
0796デフォルトの名無しさん
2005/07/14(木) 22:15:02よい。
参考までに
int main(int);
の場合は一番目のintを強調していると考えてよい。
0797デフォルトの名無しさん
2005/07/14(木) 22:22:240798デフォルトの名無しさん
2005/07/14(木) 22:26:05あと、自分へのリンクを作成するにはどうすればいいんですか?
ボーランドC++コンパイラ win xp です。
0799デフォルトの名無しさん
2005/07/14(木) 22:26:44さらに
参考までに
struct ahya *hoge(struct ahya *);
の場合は一番目のstruct ahya *を強調していると考えてよい。
0800デフォルトの名無しさん
2005/07/14(木) 22:35:57よくわかりました。
0801デフォルトの名無しさん
2005/07/14(木) 22:36:02これの場合は若干控えめな表現。
0802デフォルトの名無しさん
2005/07/14(木) 22:38:31そうなんですか。ありがとうございます。参考になります。
>>801
こんなこともできるのですか。
難しいですね、ありがとうございました。
0803デフォルトの名無しさん
2005/07/14(木) 23:19:04このURLエンコードのソースコードをコンパイルしてみたら
unsignedとsignedの変換でエラーが出まくったのでその部分だけキャストして直して
文字コードをEUCに、改行コードをLFにしてLinux上でコンパイルして実行してみたんだけど
全角文字を入力するとセグメンテーション違反になってしまう。
何故?
それと、他にURLエンコードの関数を知ってたら教えて欲しいです。
0804デフォルトの名無しさん
2005/07/14(木) 23:27:44落ちるかどうかは知らんけど、そのソースはSJIS用だねぇ。
それを修正しているならその辺りを疑ってみては?
0805デフォルトの名無しさん
2005/07/14(木) 23:29:010806デフォルトの名無しさん
2005/07/14(木) 23:38:17とかでぐぐるとそのウンコソースが比較的上位に出るようだな(w
別にURLエンコードって、ソーステキストの文字エンコーディングに
依存する必要は無いはずなんだが....
わざわざSJIS漢字の1byte目の場合は、2byte目も決めうちで%エンコード
してるみたいね
その必要は無いのに。
0807デフォルトの名無しさん
2005/07/14(木) 23:56:56ソース貼る前にコンパイル通るか確認しろよ、ばか。
初期化順は初期化リストに書いた順ではなく、
基底クラス(書いた順)、各メンバ(書いた順)になる。
その例ではメンバ CDataAndOperation::pdata の初期化よりも先に
基底クラス CWrapperOfpDataOperation の初期化が行われるので、
当然の結果となる。
gcc だと -Wall で警告が出る。
0808デフォルトの名無しさん
2005/07/14(木) 23:57:42#include <string.h>
#include <ctype.h>
/*
* Encodes src string into dst, returns dst itself.
*/
char *url_encode(const char *src, char *dst)
{
int c;
const char *rfc2396_mark = "-_.!~*'()";
char *result = dst;
while (c = *src++) {
c &= 0xff;
if (isalnum(c) || strchr(rfc2396_mark, c))
*dst++ = c;
else if (c == ' ')
*dst++ = '+';
else
dst += sprintf(dst, "%%%02X", c);
}
*dst = 0;
return result;
}
0809803
2005/07/15(金) 00:15:49レスありがとうございました。
>>808のソースがちゃんと動いたので使わせてもらいます。
わざわざ書いくれてありがとうございました。
0810デフォルトの名無しさん
2005/07/15(金) 00:18:16それ、特殊キャラクタの数が足りない
0811デフォルトの名無しさん
2005/07/15(金) 00:43:11unreserved = alphanum | mark
mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
unreserved character以外はescapeされるべきである
というrfc2396の記述に従ったんだが
何か間違ってたかい?
0812803
2005/07/15(金) 01:01:00これらの文字列があったら不正と判断すれば良いんですか?
他に不正と判断すべき文字列ってありますか?
0814803
2005/07/15(金) 01:09:14!!!をグーグルで検索するとエスケープされますけど
>>808の関数はエスケープしませんね。
if (isalnum(c) || !strchr(rfc2396_mark, c))
ではないですか?
0815デフォルトの名無しさん
2005/07/15(金) 01:11:120816803
2005/07/15(金) 01:19:25×エスケープ
○エンコード
間違えすぎ_no
こうしてみましたけど、間違ってますか?
char *url_encode(const char *src, char *dst) {
int c;
const char *rfc2396_mark = "-_.!~*'()";
const char *rfc2396_unwise = "{}|\\^[]`";
char *result = dst;
while (c = *src++) {
c &= 0xff;
if (strchr(rfc2396_unwise, c))
return NULL;
else if (isalnum(c) || !strchr(rfc2396_mark, c))
*dst++ = c;
else if (c == ' ')
*dst++ = '+';
else
dst += sprintf(dst, "%%%02X", c);
}
*dst = 0;
return result;
}
0818デフォルトの名無しさん
2005/07/15(金) 01:24:54だめ。
てか、途中でreturn NULLしちゃってどうするの。
rfc2396のmarkに含まれる記号文字は、エンコードしなくていいと
言ってるだけで、しても構わない。
もし、何らかのプログラム(たとえばIE)の挙動にあわせたい等の理由で
その中身を替えたいのなら、rfc2396_markの文字を適当に調整しなさい。
0819デフォルトの名無しさん
2005/07/15(金) 01:35:50return NULL;は、
呼び出し側で
if(url_encode(str,result)){
成功時処理
}else{
失敗時処理
}
としようと思ったんです。
unreserved = alphanum | markという記述の意味とか
ついさっきやっと気付きました。
>>808のコードを使う事にします。
ありがとうございました。
0820デフォルトの名無しさん
2005/07/15(金) 12:31:540821デフォルトの名無しさん
2005/07/15(金) 13:21:15マウスの操作がめんどくさくて腱鞘炎になりかけ
今まで開発してたVC++.net 2003のソースコードも
そのまま使えて、なおかつ
Emacsぽくキーバインドだけでほとんど操作ができる環境ってないの?
0822デフォルトの名無しさん
2005/07/15(金) 13:27:44emacsとか
0823デフォルトの名無しさん
2005/07/15(金) 14:39:28どうするんだろう?
0824デフォルトの名無しさん
2005/07/15(金) 14:59:29普通にxxx.rcを手書きすればいいじゃない。
>>821
それ以前に、ショートカットキーのカスタマイズはお試しになったのかしら?
0825デフォルトの名無しさん
2005/07/15(金) 15:12:33お釜?
0826デフォルトの名無しさん
2005/07/15(金) 16:52:05MFCだからって別にリソースで凄いことやってるわけじゃないからな?
0827デフォルトの名無しさん
2005/07/15(金) 19:15:090828デフォルトの名無しさん
2005/07/15(金) 19:24:080829デフォルトの名無しさん
2005/07/15(金) 19:26:59const オブジェクトに対してもconstメンバ関数なら呼べる
そうでなければ呼べない
0830デフォルトの名無しさん
2005/07/15(金) 19:28:340831デフォルトの名無しさん
2005/07/15(金) 20:06:44こちらのサイトttp://hp.vector.co.jp/authors/VA016117/dscroll.html
のプログラムをコピペして実行してみたのですがどうしてもスクロールバーが表示されません。
アドバイスいただけないでしょうか。
0832831
2005/07/15(金) 20:32:35お騒がせしてすみませんでした。
0833デフォルトの名無しさん
2005/07/15(金) 21:10:340834デフォルトの名無しさん
2005/07/15(金) 22:14:23回答ありがとうございます。
0835デフォルトの名無しさん
2005/07/15(金) 22:43:38外部ファイルでテンプレートを定義してもLNK0219エラーが出てしまうんですけど、
何か普通の関数を定義するときとは違う方法が必要なのでしょうか?
よろしくお願いします。
(外部ファイルでテンプレート→cppに実態、ヘッダにプロトタイプ宣言。メインCPPでヘッダ読み込み。)
0836デフォルトの名無しさん
2005/07/15(金) 22:51:490837デフォルトの名無しさん
2005/07/15(金) 23:01:38出来ました。ありがとうございました!
それにしても、どうしてなんでしょうね?
0838デフォルトの名無しさん
2005/07/15(金) 23:11:20キーボード入力のときにリターンで終了させるときと、
Ctrl+Dで終了させるときがありますが、プログラムの違いは何処なんでしょうか?
それとwindowsのコマンドプロンプトではCtrl+Dで終了できないのですが
何か他に方法があるのでしょうか
0839デフォルトの名無しさん
2005/07/15(金) 23:15:50Ctrl+C
0840838
2005/07/15(金) 23:29:44終了できましたが肝心の結果が表示されませんでした。
これはプログラムの問題ってことですか?
0841デフォルトの名無しさん
2005/07/15(金) 23:34:26WindowsでCtrl+Dの代わりなら、Ctrl+Zだな
Ctrl+Dで終わるプログラムは、EOFで終わるように組まれてるプログラムだ
0842838
2005/07/15(金) 23:48:41できました。ありがとうございます
ということはCtrl+DはEOFってことなんですね。
0843デフォルトの名無しさん
2005/07/16(土) 00:04:35正確にはEOFというわけじゃなく、現在の端末入力をすぐに送る
ってことだ。プログラム側から見ると、入力中はブロックして(待って)
いるread()がその時点でリターンする。
行頭でCtrl-Dを入力した場合や、Ctrl-Dを連続して入力した場合、
read()が読み取るべき入力内容が何もないから、read()は0を返す。
それがEOFと解釈されるわけだ。
0844デフォルトの名無しさん
2005/07/16(土) 00:19:52Debug/test1.exe : fatal error LNK1120: 外部参照 1 が未解決です。
このようなエラーはどのように解決するんでしょうか?
初心者なんで、教えてもらえませんか?
0845デフォルトの名無しさん
2005/07/16(土) 00:21:130846デフォルトの名無しさん
2005/07/16(土) 00:23:21わかりました・・・
0847838
2005/07/16(土) 00:29:23なるほどー難しいですが、なんとなく分かりました。
0848デフォルトの名無しさん
2005/07/16(土) 00:43:56objファイルががリンクされてない。
0849デフォルトの名無しさん
2005/07/16(土) 01:08:480850デフォルトの名無しさん
2005/07/16(土) 01:35:19http://www.cplusplus.com/doc/tutorial/tut3-1.html
の一番下の黄色い四角にあるプログラムを拡張して、
マトリックスをパラメータとして関数に渡したいのですが、うまくいきません。
ご指導お願いします。
#include <iostream.h>
void printmatrix (int arg[][], int length) {
for (int n=0; n<length; n++)
for (int m=0; m<length; m++)
cout << arg[n][m] << " ";
cout << "\n";
}
int main ()
{
int matrix[][] = {{1,2,3},{4,5,6}};
printmatrix (matrix,3);
return 0;
}
int main ()
{
int firstarray[] = {5, 10, 15};
int secondarray[] = {2, 4, 6, 8, 10};
printarray (firstarray,3);
printarray (secondarray,5);
return 0;
}
エラー表示
cpp(4) : error C2087: '<Unknown>' : missing subscript
cpp(13) : error C2087: '<Unknown>' : missing subscript
cpp(13) : error C2078: too many initializers
0851デフォルトの名無しさん
2005/07/16(土) 01:41:35エラーメッセージに書いてある通り、C/C++では配列の要素数は明らかでないといけない。
従って、二重配列をパラメータとしたいのであれば
void printmatrix(int arg[][3], int length) {...;}
として受け取らないといけないし、
int matrix[][3] = {{1, 2, 3, }, {4, 5, 6, }, };
として定義しないといけない。
要素数を固定にしたくないのであれば、1次元の配列(≒ポインタ)を渡すようにするのが無難。
しかしまぁ、<iostream.h>ですか。またアナクロな……
0852デフォルトの名無しさん
2005/07/16(土) 02:11:45ありがとうございます。
マトリックスのサイズは将来的に固定しないで扱えるようにしたいので、
1次元の配列に並べなおして計算していくことにします。
>しかしまぁ、<iostream.h>ですか。またアナクロな
何かがまずいのでしょうか?
0853デフォルトの名無しさん
2005/07/16(土) 02:21:22.hのついたヘッダファイルは、C++の規格がまだ整っていなかったころ使われていた過去の遺物。
0854デフォルトの名無しさん
2005/07/16(土) 02:26:31たまに見かける.hがないヴァージョンが最新とは知りませんでした。
何じゃこりゃと無視せずに勉強することにします。
ありがとうございます。
0855デフォルトの名無しさん
2005/07/16(土) 02:32:22C++ ha mukasikara <iostream> datta.
0856デフォルトの名無しさん
2005/07/16(土) 02:38:15あんたの言う昔は何年前のことかね?
0857デフォルトの名無しさん
2005/07/16(土) 06:06:210858ミキミキ
2005/07/16(土) 08:07:04言語はA〜Cの中から選択をしてください。
A : Visual Basic
B : C/C++
C : Java
0859デフォルトの名無しさん
2005/07/16(土) 08:50:35それとも、inline内部の関数は全部展開してくれる?
0860デフォルトの名無しさん
2005/07/16(土) 08:51:03つーか、削除依頼出しておけ。
0861デフォルトの名無しさん
2005/07/16(土) 08:52:19inlineはコンパイラにインライン展開してもいいことを示唆するための指示子。
マクロとは全く違う。
0862デフォルトの名無しさん
2005/07/16(土) 12:37:50質問ですが,実行ファイルの終了時にウィンドウ(コマンドプロンプト)が
消えないようにするにはどうしたらよいのでしょうか.
0863デフォルトの名無しさん
2005/07/16(土) 12:43:39#include <stdlib.h>
int main()
{
system("pause");
return 0;
}
0864デフォルトの名無しさん
2005/07/16(土) 12:48:58thxです.
0865デフォルトの名無しさん
2005/07/16(土) 13:16:39Sleep(ミリ秒);
or
#include "stdio.h"
scanf("%d", c);
0866デフォルトの名無しさん
2005/07/16(土) 13:59:28アホかい。
0867デフォルトの名無しさん
2005/07/16(土) 14:01:400868デフォルトの名無しさん
2005/07/16(土) 14:02:14コマンドプロンプトから実行させるようにユーザーに言えばいい
0869デフォルトの名無しさん
2005/07/16(土) 14:32:13止めるだけのためにscanf()を使うのは楊枝を鉈で削るようなもの。
無駄なばかりか危険ですらある。
0870デフォルトの名無しさん
2005/07/16(土) 14:42:050871デフォルトの名無しさん
2005/07/16(土) 14:55:41scanf("%*s");
っていうほうがよく見かける
0872デフォルトの名無しさん
2005/07/16(土) 15:05:25まぁ、getchar()で充分だと思うのだけど。
0873デフォルトの名無しさん
2005/07/16(土) 15:14:08他にもいっぱい解決手段が書いてあるけど。
0874デフォルトの名無しさん
2005/07/16(土) 15:14:460875デフォルトの名無しさん
2005/07/16(土) 15:22:030876デフォルトの名無しさん
2005/07/16(土) 15:27:010877デフォルトの名無しさん
2005/07/16(土) 16:06:38GUIからでもコマンド呼べるのはCUIの長所の一つですが。
バッチ的なルーチンでも出力内容を見るために、ちょっと待って欲しい時はある。
漏れもgetchで待たせて、目の前にあるスペースキー等でコマンドプロンプトのウィンドウを抹殺することはよくある。
個人個人の好みの問題だ罠。
0878デフォルトの名無しさん
2005/07/16(土) 16:20:46まだじゃない?どうぞ
ttp://www.uploda.org/file/uporg148741.zip.html
0879デフォルトの名無しさん
2005/07/16(土) 18:33:08なにかテクニックがあるなら他の自作クラスで活かしたいんですが。
0880デフォルトの名無しさん
2005/07/16(土) 18:41:240881879
2005/07/16(土) 18:45:29ちょっと考えたのはコンストラクタとデストラクタでnewとdeleteを呼ぶってやり方なんですが、
deleteは自身がデストラクタを呼ぶらしいので永久ループになりそうな気がします。
0882デフォルトの名無しさん
2005/07/16(土) 18:50:38何を意味不明なことをいっとるんだ
~string() { delete this; };
とか言うコードを考えてるのか?
そんな阿呆なことは流石にやらない。
メンバ変数をdeleteするだけなら何も問題無い。
その歳に、そのメンバに対するデストラクタは走るが、
自身に対するデストラクタは走らないから、無限ループにはならないよ。
0883デフォルトの名無しさん
2005/07/16(土) 19:03:33class string {
private:
char* p;
int length;
public:
string() : length(1024) { p = new char[length]; }
~string() { delete p; }
};
0884デフォルトの名無しさん
2005/07/16(土) 19:19:350885879
2005/07/16(土) 19:53:18ありがとうございます。
0886デフォルトの名無しさん
2005/07/16(土) 20:10:15> ~string() { delete p; }
~~~~~~~~~
別の問題が発生していますが(笑)
0887デフォルトの名無しさん
2005/07/16(土) 20:24:310888デフォルトの名無しさん
2005/07/16(土) 20:29:48決まりなぞない
俺はpstr
0889デフォルトの名無しさん
2005/07/16(土) 20:46:10sでいい場合もあるが、意味を優先してつけるべき。
from, toとかsrc, dstとかpatternとか
0890デフォルトの名無しさん
2005/07/16(土) 21:09:50どっちか気分による
0891デフォルトの名無しさん
2005/07/16(土) 21:10:520892デフォルトの名無しさん
2005/07/16(土) 21:21:46それとも、unsigned char*型?
0893デフォルトの名無しさん
2005/07/16(土) 21:24:30ハンガリアンと一緒に滅んだ思想だよ
型じゃなくて意味で名前を付けろ。型そのものが意味である場合は
別に構わないが。
0894デフォルトの名無しさん
2005/07/16(土) 21:27:31文字として扱うのにsignedもunsignedもねぇよ
0895デフォルトの名無しさん
2005/07/16(土) 21:28:23ハゲドー
0896デフォルトの名無しさん
2005/07/16(土) 21:28:290897デフォルトの名無しさん
2005/07/16(土) 21:30:28ちなみに、チャー型じゃなくて、キャラ型だからね、発音は。
0898デフォルトの名無しさん
2005/07/16(土) 21:36:24man iconv(3)を読むと、「iconv 関数は 1 度に 1 つのマルチバイト文字を変換する」
と書いてありますが、マルチバイト文字が複数含まれる文字列(『あいうえお』とか)に
対して実行した場合一度で全て変換されました。
ネットで探したサンプルではwhile()で回すものと一度のみの両方がみつかりましたが
どちらが正しいのでしょうか?感覚的には前者が正しいような気がしますが、実際の
挙動は後者になるので悩んでいます。一度に変換される文字数は不定だったりする
のでしょうか?
0899デフォルトの名無しさん
2005/07/16(土) 21:37:08イライラする香具師の方が多いと思うが
0900デフォルトの名無しさん
2005/07/16(土) 21:43:40はいはい日立の腐れ社員は腐れコーディング規約でも量産して
三流派遣社員に鼻で笑われてくださいよ
0901デフォルトの名無しさん
2005/07/16(土) 21:47:29> iconv 関数は 1 度に 1 つのマルチバイト文字を変換する
の意味は、一度のiconv()呼び出しで一つのマルチバイト文字しか変換しない
という意味ではなくて、単純に一文字ずつ逐次変換していく、という
内部動作を語ってるの。
関数全体としては、変換できたバイト数は引数経由で取得できるから、
変換が完了したかどうかはそれを見て判断する。で、完了するまで
ループする。という使い方が正しい。
0902デフォルトの名無しさん
2005/07/16(土) 21:57:070903デフォルトの名無しさん
2005/07/16(土) 21:58:300904デフォルトの名無しさん
2005/07/16(土) 21:59:170905898
2005/07/16(土) 22:04:17ありがとうございます。
「1 つのマルチバイト文字を変換」が内部動作を表しているということは
理解できましたが、そうなるとiconv()をwhileの内部に入れても、それは
必ず一度しか実行されないということにならないでしょうか?
iconv()の実行後に、結果が (size_t)-1 にならず、かつinleftが0より大きい
という状況はありえるということでしょうか。(それがありえる場合、whileは
無限ループに陥りかねない気もします…)
0906デフォルトの名無しさん
2005/07/16(土) 22:06:33文字型っつーんだよ
0907デフォルトの名無しさん
2005/07/16(土) 22:13:36#include <math.h>
int kc(int n,float x){
double k;
k = x*tan(M_PI/n);
//printf("k=%1.10f\n",k);
return k;
}
int main(void){
double k;
k = kc(12,1);
printf("k=%f\n",k);
}
-------------------------
return k; の返り値が0になってしまいます。
どこか型などがおかしいのでしょうか?
0908デフォルトの名無しさん
2005/07/16(土) 22:17:34int kc(
0909デフォルトの名無しさん
2005/07/16(土) 22:17:55> iconv()の実行後に、結果が (size_t)-1 にならず、かつinleftが0より大きい
> という状況はありえるということでしょうか
無論あり得る。outbufのサイズが不十分な場合だな。
その場合は、変換を続行するために、ポインタをずらしたりバッファ間で
コピーするなどのバッファ管理は当然必要になる。
0910デフォルトの名無しさん
2005/07/16(土) 22:22:02int GetLength()
{
return m_len;
}
というのがあって、
文字列の長さを取得するのに、GetLength()呼び出しとm_len呼び出しはどっちが速い?
0911デフォルトの名無しさん
2005/07/16(土) 22:24:37あ、解決しました。
ありがとうございました。
0912デフォルトの名無しさん
2005/07/16(土) 22:25:43答: m_len は呼び出せない。
0913898
2005/07/16(土) 22:26:25ありがとうございます!
理解できました。
一度エラーが出たら処理失敗扱いであぼーんしていたのですが
outbufが足りない場合はそうやって対処してから続きを行うことが
できるんですね。勉強になりました。。。
0914デフォルトの名無しさん
2005/07/16(土) 22:27:550915デフォルトの名無しさん
2005/07/16(土) 22:28:08それだけの情報ではわからない。
m_len を呼び出すと言うのも意味不明。
スピードは実測が基本。
0916デフォルトの名無しさん
2005/07/16(土) 22:29:50m_lenを呼び出すというのは適当に脳内置換してやる。
GetLengthがクラス宣言内にあればどうせインライン展開されるから速さは同じ。
0917デフォルトの名無しさん
2005/07/16(土) 22:30:590918デフォルトの名無しさん
2005/07/16(土) 22:33:30失礼。outbufが足りない場合は戻り値-1でE2BIGになるかな?
なんにせよ、
> 一度エラーが出たら処理失敗扱いであぼーん
エラーの場合でも、それはしないほうがよい。
ちゃんとerrnoを見よう。
EINVALの場合、inbufのMBC文字がハンパだということだから、
続きがある場合はバッファに追加すれば変換できる可能性がある。
行単位などではなくブロック単位で変換する場合はその手当ては必須だ。
本当にエラー(変換不能)と言えるのは、EILSEQの場合だけだろう。
この場合も、取りあえず?に変換して文字飛ばしして対処という手もある。
0919デフォルトの名無しさん
2005/07/17(日) 00:56:09#include <stdio.h>
int main(){
char str[]="abcde";
char* p;
*p = 'f';
str = p;
}
をコンパイルしようとすると
error: incompatible types in assignment
になります(gcc 3.3)。str = (char*)p とキャストしても駄目でした。
どこでつまずいてるのかわからないんですが、
「char配列の名前=charポインタ」という認識自体が間違ってるんでしょうか?
0920デフォルトの名無しさん
2005/07/17(日) 01:00:380921デフォルトの名無しさん
2005/07/17(日) 01:01:57配列はポインタではない。
配列は定数みたいなモンで、配列に代入はできない(初期化はできる)
あと、そのコードで
*p = 'f';
はダメだぞ。どこも指してないポインタが指している場所に値を代入しようと
してる。
コンパイルできても、クラッシュする。
0922デフォルトの名無しさん
2005/07/17(日) 01:03:180923デフォルトの名無しさん
2005/07/17(日) 01:04:010924デフォルトの名無しさん
2005/07/17(日) 01:06:38二つの間違いがある。
1.配列の名前は配列の先頭アドレスを指す定数である
~~~~
2.pはまだ有効なアドレスを持っていないので*p = 'f';はエラー。p = "f";にすべき
09261/2
2005/07/17(日) 01:08:54double sum = 0;
int i = start;
if(end<start)
sum = 0;
else
{
while(1)
{
sum = sum + *(arg+i);
++i;
if(i>end)
break;
}
}
return (sum);
}
09272/2
2005/07/17(日) 01:09:14for(int i=0; i<n; i++)
{
*(L+i*n+i) = sqrt(*(A+i*n+i) - sum_element(A,0,i-2));
}
}
void main(){
int n = 4*4;
double si[16];
ifstream fin ("PGAmatrix.dat");
for(int i=0; i<n; i++)
fin >> si[i];
fin.close();
double *SI = si;
double *L = new double[n];
Cholesky(SI, L, n);
}
外部から読み込んだマトリックスをコレスキー分解を作ろうとしている最初の段階なんですが、
コンパイルは通るものの、-6.27744e+066という数字が出力されてしまいます。
恐らくポインタの扱いに間違いがあると思うのですが、ご指導お願いします。
0928デフォルトの名無しさん
2005/07/17(日) 01:15:44SI, L には n 個しか要素が無いから i*n+i 個目の要素は
i > 0 のときにに存在しない要素になる。
0929デフォルトの名無しさん
2005/07/17(日) 01:54:11*cfgの内容はデフォルトのまんまです。
0930デフォルトの名無しさん
2005/07/17(日) 01:58:21SDKに関して勉強してきます。
0931デフォルトの名無しさん
2005/07/17(日) 01:58:25それくらい自分で調べてください
0932デフォルトの名無しさん
2005/07/17(日) 01:58:26ポインタは問題ないのでしょうか?
家に帰ってきちゃったので、明日学校で試して見ます。
ありがとうございます。
0933デフォルトの名無しさん
2005/07/17(日) 02:31:28{
if(lowest_number > highest_number){
swap(lowest_number, highest_number);
}
srand((unsigned)time(NULL));
double range = highest_number - lowest_number + 1.0;
double rn = lowest_number + range * (double) rand()/RAND_MAX;
return rn;
}
double rnorm(double mean, double stdv){
double r1=random_range(0.0,1.0);
double r2=random_range(0.0,1.0);
double rn = sqrt((-2.0*log(r1)))*sin(2*3.141593)*r2;
return rn;
}
void main(){
int n =10;
for(int i=0; i<n; ++i)
{
double rn=rnorm(0.0,1.0);
cout << rn << endl;
}
}
一様乱数を標準正規乱数に変換して指定された数だけ出力するようにしたいのですが、
同じ乱数が出力されてしまいます。
異なる乱数を指定した数だけ出力する方法を教えてください。
0934933
2005/07/17(日) 02:32:19#include<iostream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <iomanip>
#include <vector>
#include<math.h>
using namespace std;
0935デフォルトの名無しさん
2005/07/17(日) 04:41:37見るからに1秒以内で終わる(time(NULL)の値が変化しない)処理の中で
毎回srandしてたらそりゃ同じ結果しか出んだろ
0936デフォルトの名無しさん
2005/07/17(日) 06:02:04だがポインタを保持して置くのは変数
0937デフォルトの名無しさん
2005/07/17(日) 07:52:06とりあえずコンパイル時にソースファイルに-Wを指定するとWinMainから始まるプログラムとしてリンクされる。
0938デフォルトの名無しさん
2005/07/17(日) 08:44:53配列の名前だって名前空間使ってるんだから、変数みたいに代入できるんだろうと思ってました。
(できれば便利なのにな...)
0939デフォルトの名無しさん
2005/07/17(日) 09:04:25> (できれば便利なのにな...)
そうか?
0940デフォルトの名無しさん
2005/07/17(日) 09:25:40あと、確保/解放するメモリの量は速度に関係しますか?
0941デフォルトの名無しさん
2005/07/17(日) 09:30:03でも配列から同じ要素数の配列への代入はできてもいいんじゃないか?
できるようになれば一貫性の向上につながると思う。
0942デフォルトの名無しさん
2005/07/17(日) 09:32:51初心者は意識しなくて構いません。
#つーか、ちゃんと理解できていれば遅いかどうか嫌でも判るわけで。
0943デフォルトの名無しさん
2005/07/17(日) 09:35:04memcpyかmemmoveで我慢汁。
sizeofで配列全体のサイズがわからなかったら糞言語だったんだろうがな。
0944デフォルトの名無しさん
2005/07/17(日) 09:41:100945デフォルトの名無しさん
2005/07/17(日) 09:55:07mallocはヒープから取ってくる、普通の配列は自動変数と同じようにスタック上に確保する、という理解なのですが。
ただ、ヒープとスタックどちらが速いのか、また、ヒープ上での確保速度は大きさに依存するのかがわからないんです。
0946デフォルトの名無しさん
2005/07/17(日) 10:03:02自ずと答えがわかるはずなんだがなぁ
0947926
2005/07/17(日) 10:32:07すいません。解決できてません。
もう少し、アドバイスをお願いします。
0948デフォルトの名無しさん
2005/07/17(日) 11:15:33配列名は配列の先頭を指すポインタ型のリテラルと理解するとわかりやすいと思う。
0949デフォルトの名無しさん
2005/07/17(日) 11:56:51以下のように書いていたのですが、文字列に文字列を代入することが出来ないようで困っています。
何か代用方法はありませんでしょうか?
char a[]="A";
char b[]="B";
char c[]="C";
char y[]="○";
char x;
scanf("%s",x);
switch(x){
case 'A':
a[]=y;
break;
}
0950デフォルトの名無しさん
2005/07/17(日) 11:59:07配列はその要素数を超えてアクセスできない。
int a[1];
a[0] = 1; // ok
a[1] = 1; // ng
0951デフォルトの名無しさん
2005/07/17(日) 12:00:58strcpy
っていうか、糞コードだなぁ。
0952デフォルトの名無しさん
2005/07/17(日) 12:09:03どーいうときに使うのか分かんなくて読み飛ばしてたところに思いっきり書かれてました。
早い返答ありがとうございます。
クソなのは昨日から勉強始めたばかりなので目瞑っておいてください…。
0953デフォルトの名無しさん
2005/07/17(日) 12:26:08malloc()の速度は基本的には実装依存なので、ライブラリのソースを見
るか計ってみないとわからない。
でも、速度が大きさに依存する実装方法はちょっと思い浮かばない。ヒー
プのフラグメントっぷりに依存することは多いかも。
0954デフォルトの名無しさん
2005/07/17(日) 13:44:16scanf("%s",x); //間違い。xはポインターじゃない。
scanf("%c", &x);
もしxを文字型配列にするんならscanfじゃなくてfgetsにしたほうがいい。
0955952
2005/07/17(日) 14:05:20ご飯食べてさぁ続き、と思ったら更に質問するようなことが起きたのですが、
おもいっきしその解答が先出しされててびっくりしました。
本当にありがとうございまっす。
0956デフォルトの名無しさん
2005/07/17(日) 14:08:42なんでdouble *SI = si;なんて冗長な事してるの?
バグとは関係ないけど見辛いから質問するときは止めとけ。
あと、*Lも
0957デフォルトの名無しさん
2005/07/17(日) 14:11:47どこかにあるのでしょうか?ヘッダファイル(?)をあさるしかないのでしょうか?
例えばファイルの ctime が知りたいと思ったときどのような手順で調べるのが
普通なのでしょうか?
google で検索しようとしてキーワードに標準と入れると STLの説明ばかり
ひっかかってしまいます。タコで申し訳ありません。
0958デフォルトの名無しさん
2005/07/17(日) 15:06:30マニュアル
書籍
ヘッダーファイル
0959デフォルトの名無しさん
2005/07/17(日) 15:37:26float x;
x = 1/4;
printf("%f\n",x);
わ、割り算が出来ません...orz
0960デフォルトの名無しさん
2005/07/17(日) 15:38:201.0/4.0
0961デフォルトの名無しさん
2005/07/17(日) 15:45:07割り算はできてる。int / int で切り捨てられて 0 になっている
>>960 は 80点
x = 1.0f / 4.0f;
0962デフォルトの名無しさん
2005/07/17(日) 15:46:40なんでわざわざ単精度で割算するんだ?
0963961
2005/07/17(日) 15:49:39俺に聞かないでくれ
x が float型だからそうしたんだよ
(まぁ printf に渡されるのは double になっちまうけどな)
0964デフォルトの名無しさん
2005/07/17(日) 15:55:270965961
2005/07/17(日) 15:59:09規格を額面通り受け取って
コンパイラによる最適化を考えなければ
よりよいコードだと思ったのだが。
何か問題でも?具体的に頼む
なんか自信なくなってきた
0966デフォルトの名無しさん
2005/07/17(日) 16:01:18まずはあなたが何故そう書いたのか説明してくれよ
0967デフォルトの名無しさん
2005/07/17(日) 16:11:08「よりよいコード」とか考えるんだったら x を double にするのが正解だろ。
0968デフォルトの名無しさん
2005/07/17(日) 16:12:530969961
2005/07/17(日) 16:31:21ゴメソ。じゃ説明する
>>960のコードは次のコードと同じようなことをしている
int i = 1L + 4L;
わざわざ大きい型を使っている
最終的に小さい型へ型変換される
>>967 禿同
0970デフォルトの名無しさん
2005/07/17(日) 16:37:23ttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.4.4.html
計算精度を落とし、速度も落とし、それでもfloatで計算する事が20点アップするとは思えないが。
さすがに1/4の場合なら結果に違いは無いかもしれんが。
0971デフォルトの名無しさん
2005/07/17(日) 16:39:11x=a+b+c;
while(x>3)
{
printf("%d",&a);
a++;
}
このループがエンドレスなのは何故でしょうか…。
0972デフォルトの名無しさん
2005/07/17(日) 16:40:10書いてある通りに動いてると思うよ
0973デフォルトの名無しさん
2005/07/17(日) 16:40:24と思ってx<3にしたら今度は何も表示されないように…。
0974デフォルトの名無しさん
2005/07/17(日) 16:40:350975デフォルトの名無しさん
2005/07/17(日) 16:49:36だよねー
0976デフォルトの名無しさん
2005/07/17(日) 17:01:57なんか年寄りの昔話にしか思えないんだけど。最近のCPUでも成り立つ話なのか・・・。
0977デフォルトの名無しさん
2005/07/17(日) 17:03:43自分で設定した条件式すらも理解できんのか?
前判定・後判定って知ってるか?
for文知ってるか?do while文知ってるか?
まだまだアドレスやらポインタやらは早いんじゃないかな?
>>976
コンパイラにマシン語吐き出させたら分かるんじゃない?
0978デフォルトの名無しさん
2005/07/17(日) 17:09:35えーと、昨日始めたばかりなので、
アドレスやらポイントやらは何言われてるのかよー分かりませんが、
先に式書いておいてもwhileの中では反映されないってことに気付きました。
これが前判定後判定ってことですよね?
0979デフォルトの名無しさん
2005/07/17(日) 17:10:18CPUって言うよりコンパイラだべ。
0980デフォルトの名無しさん
2005/07/17(日) 17:12:260981デフォルトの名無しさん
2005/07/17(日) 17:14:23ループの中でxが更新されない限り、一度成り立った条件は崩れないだろ。
(他のタスクでうんちゃらかんちゃらは分かりにくくなるので省略)
だからループ抜けなかったり、入らなかったりするのは当然。
0982デフォルトの名無しさん
2005/07/17(日) 17:15:05マシン語読めないんでorz
>>979
おお、コンパイラの話なのですか。
この記事は恐らくgccだと思うので、VCなら関係ないのかな・・。
0983デフォルトの名無しさん
2005/07/17(日) 17:17:050984デフォルトの名無しさん
2005/07/17(日) 17:22:40printf("%d",&a);
&aは変数aのアドレス
0985957
2005/07/17(日) 17:23:12例えば公式サイトだと
ttp://gcc.gnu.org/onlinedocs/
だと思うのですが、そこのどの辺を見るとよいのでしょうか?
0986デフォルトの名無しさん
2005/07/17(日) 17:28:52あああ、scanf("%d",&a)とかと勘違いしてましたー。
アドレスとやらはちょこっと教科書読み進めてみたら出てきましたけど、
良く分からないので取り合えず放置しときます。
あんまり低レベルでグダグダ質問しても失礼なのでこの辺りで自習に戻ります。
ありがとうございました。
0987デフォルトの名無しさん
2005/07/17(日) 17:37:29ttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.4.4.html
0988デフォルトの名無しさん
2005/07/17(日) 17:41:26そことは別だがここはどうだ?
http://www.shibu.jp/cppreference/
0989デフォルトの名無しさん
2005/07/17(日) 17:44:02彼が何が分からないのか今分かった。
一度 x=a+b+c という等式を教えたら、その後は自動的に計算し
てくれると思ってるのか。
"="はその時点での右辺の計算値を左辺の変数に代入するとい
う意味。
下記だとaしか更新されない。ループの中でxに再代入しない限り
ループに入る前の値を保持する。
x=a+b;
while (x<3) {
a = a+1;
}
0990デフォルトの名無しさん
2005/07/17(日) 17:47:36何の前提もなく
> C言語の浮動小数点数には、float型とdouble型がありますが、この説明からは、
> float型には何のメリットも無いようでしょう。実際、無いのです。
ならば、この文章は間違いだな。
0991デフォルトの名無しさん
2005/07/17(日) 18:11:01この部分だけ切り取って読むと、思い込みの激しい筆者に見えるな。
C言語の総論として書いているのをみると、この作者にとってはWindowsやLinux
上でのアプリ開発のためだけに、C言語は存在するのかなぁと、見えてしまう。
色々なCPUのコンパイラは昔々の話ではなく今でも立派な現役なのに。
0992957
2005/07/17(日) 18:32:55ありがとうございます。
0993デフォルトの名無しさん
2005/07/17(日) 18:39:53FPUの実装にもよるし、コンパイラがどう最適化するかにもよるし。
特にコンパイラの最適化に関しては、最近はSSEのスカラ演算レベルなら
自動でやってくれるから、全部float型の方がいいかもしれないしね。
0994デフォルトの名無しさん
2005/07/17(日) 18:44:13次スレまだー?
0995デフォルトの名無しさん
2005/07/17(日) 19:05:55float型の変数に例の結果を代入するのを書いたんだが、
1.0/4.0も1.0f/4.0fも即値でコードに3E800000が埋め込まれて
movで代入するだけになってる。
0996デフォルトの名無しさん
2005/07/17(日) 19:22:450997デフォルトの名無しさん
2005/07/17(日) 19:42:39だれかgccとbccでチェック頼む。
0998デフォルトの名無しさん
2005/07/17(日) 19:55:020999デフォルトの名無しさん
2005/07/17(日) 20:20:44同じように、1.0f / 4.0fとしないで 1/4.0で充分だろう。
1000デフォルトの名無しさん
2005/07/17(日) 20:37:3410011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。