スレを勃てるまでもないC/C++の質問はここで 8
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/03/02(月) 00:36:19過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
http://pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
http://pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
http://pc11.2ch.net/test/read.cgi/tech/1232983248/
0002デフォルトの名無しさん
2009/03/02(月) 00:39:371.書き込みウィンドウを出し半角入力に切り替える
2.Wキーを押しっぱなしにする
3.Wキを押しっぱなしにしながらsageのチェックするところをおもむろにクリック
0003デフォルトの名無しさん
2009/03/02(月) 00:40:06PSのアークザラッド�Uというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、
かれこれ1年ほど経ちますが、なかなかうまくいきません。
*もちろん抽出した画像は個人範囲内で利用するつもりです。
◆試してダメだったこと
ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。
(ちなみに他のゲームはほとんど抽出可能)
◆教わったこと
・アークザラッド�Uは独自の画像形式を使っているから抽出できない。
・PS上で表示されてるということは絶対に摘出はできるはず。
・ttp://www.gradius2.com/index.php?UID=1174775153
◆抽出は不可能ではないということを知ったとき
2ちゃんねるで質問したところ、
ある方が実際にキャラクターの歩行画像を抽出して
私が立てたスレにアップしてくださいました。
スクリーンショットじゃダメなんです。どうか皆さん、お力をお貸しください。お礼は絶対にします。
0004デフォルトの名無しさん
2009/03/02(月) 00:40:12お前はあんなことのために2^32バイトだか2^64バイトだかの配列を確保するのか?
バカだろ?
0005デフォルトの名無しさん
2009/03/02(月) 00:41:28template <typename T>
class Myclass
{
public:
T mem;
//他、Tを使ったメンバ関数・メンバ変数が多数
int foo(int x){std::cout << x << std::endl;return x;}
double foo(double x){std::cout << x << std::endl;return x;};
unsigned long foo(unsigned long x){std::cout << x << std::endl;return x;};
};
のようなクラスがあって、呼び出すときは
Myclass<char> hoge;
hoge.foo((int)-1);
hoge.foo((double)3.14);
hoge.foo((unsigned long)42);
のように使っている状況。
で、この3つのfooをテンプレートにしてまとめたいんだけど、どうすりゃいいかね??
template <typename T,typename U>
class Myclass
{//〜〜};
とは意味合いが違うじゃん。。。
0006デフォルトの名無しさん
2009/03/02(月) 00:44:32乙。
0007デフォルトの名無しさん
2009/03/02(月) 00:46:14乙彼。
あと>>5はかわいそうな人による釣りだから皆様 無視してくださってかまいません。
0008デフォルトの名無しさん
2009/03/02(月) 00:49:39乙
0009デフォルトの名無しさん
2009/03/02(月) 00:55:150010デフォルトの名無しさん
2009/03/02(月) 01:03:32状況にもよるが全然ありだろ
大規模なNUMAマシンとかならおそらく最速だ
マルチスレッドにもしやすいしな
0011デフォルトの名無しさん
2009/03/02(月) 01:05:16草ついてないとこを見ると……もしかして天然?
だとしたら痛いぞ。
0012デフォルトの名無しさん
2009/03/02(月) 01:08:590013デフォルトの名無しさん
2009/03/02(月) 01:21:17a1[0]を仮の共通要素とおく。
aM(Mは1-5)について仮値以上になるまで添え字インクリメント。
->越えたらその値を仮値としてM=1からやりなおし。
->同値なら次のMへ。M>5なら仮値を共通値として保持。保持した共通値を超えるまでa1の添え字をインクリメントし、その要素を仮値とする。
いずれかの添え字が範囲外になったら終了。
これよりはint分配列確保の方が、計算量は少ないな(終了条件が早期に成立した場合は別)。
a1-a4はインクリメントのみ。a5は比較のみ(インクリメントは不要)で済む。
0015デフォルトの名無しさん
2009/03/02(月) 01:41:120016デフォルトの名無しさん
2009/03/02(月) 02:14:440017デフォルトの名無しさん
2009/03/02(月) 02:17:010018デフォルトの名無しさん
2009/03/02(月) 02:22:38class hoge{
hoge(int i,...);
}
class piyo:public hoge{
piyo(int i,...):hoge(ここが分からない){
〜
}
}
上記のような感じです、
hogeのコンストラクタを丸々コピーする以外に何か方法があればご教授お願いします。
0019デフォルトの名無しさん
2009/03/02(月) 07:05:32氏んでEYo!
0020デフォルトの名無しさん
2009/03/02(月) 08:16:00死ね
0021デフォルトの名無しさん
2009/03/02(月) 08:21:52素直なやり方を書いて実際に比較してみたら?
っていうか、あんたの言う素直なやり方ってどんなのか、ソースあげてみてよ。
0022デフォルトの名無しさん
2009/03/02(月) 08:26:060023デフォルトの名無しさん
2009/03/02(月) 08:42:05そんな事してねーで孝三隊のポインタに氏たら?
0024デフォルトの名無しさん
2009/03/02(月) 09:17:58piyoてなにおまえ? ふざけてんの? ヒヨコなの?
0025デフォルトの名無しさん
2009/03/02(月) 09:24:520026デフォルトの名無しさん
2009/03/02(月) 10:33:340027デフォルトの名無しさん
2009/03/02(月) 12:08:47テンプレート構造体つかえ。
0028デフォルトの名無しさん
2009/03/02(月) 12:42:39可変長の引数は止めたほうがいい。
オブジェクトを作って渡す様にしたほうがいい。
0029デフォルトの名無しさん
2009/03/02(月) 19:10:190030デフォルトの名無しさん
2009/03/02(月) 20:07:51T (&X)[len];
public:
A(T(&x)[len]): X(x){};
};
int B[10];
A<int, 10> B(b); // error:b is not a type
オレ何勘違いしてるか教えてくれ。
0031デフォルトの名無しさん
2009/03/02(月) 20:09:35A<int, 10> a(B); // error:b is not a type
0032デフォルトの名無しさん
2009/03/02(月) 20:22:50通った。 VC9, gcc4.3.2
0033デフォルトの名無しさん
2009/03/02(月) 20:33:06あるクラスがlistとそのlistのカレント要素をメンバでもつ場合、
カレント要素をiteratorにするのは好ましいでしょうか?
好ましくない場合どのようにカレント要素を
持つのが一般的でしょうか?
0034デフォルトの名無しさん
2009/03/02(月) 20:35:53003530
2009/03/02(月) 20:51:55int B[10];
A<int, 10> a(B); // error:B is not a type
};
・・・ 当然ですな 疲れてるようだから寝ます。
0036デフォルトの名無しさん
2009/03/03(火) 01:22:51参考書ごとに違いが有って、scanfを使用するものもありましたが中には
int c
c = getchar()
で一文字ずつ入力させるプログラムがありましたがどちらの方が良いのでしょうか
0037デフォルトの名無しさん
2009/03/03(火) 01:26:040038デフォルトの名無しさん
2009/03/03(火) 02:14:020039デフォルトの名無しさん
2009/03/03(火) 02:23:35scanfをあまり使わないほうがいいとは思うが、理由を知らないと意味が無い類のものなので
調べてください
0040デフォルトの名無しさん
2009/03/03(火) 04:05:36case by case
0041デフォルトの名無しさん
2009/03/03(火) 06:13:07参考書による違いは、参考書を読まないと判らない。
何故なら、getchar()でやる方法を練習のために示す本もあるから。
scanf()は万能ではないし問題点もあるから使わないに越したことはないが、
だからと言って取り敢えず使うためのプログラムにgetchar()で作るのは愚。
まぁ、余程のことがない限り、fgets()(+sscanf()かatoi()かstrtol()か)で事が足りる。
# そして、余程のときはやはりgetchar()では事が足りないので環境依存の方法が必要。
0042デフォルトの名無しさん
2009/03/03(火) 12:26:07ありがとうございました
0043デフォルトの名無しさん
2009/03/03(火) 12:30:08scanfにはちゃんとバッファオーバーフローさせない方法もあるから
その点を理解して正しく使う分には問題ないよ。
実際scanfは便利。
0044デフォルトの名無しさん
2009/03/03(火) 12:38:130045デフォルトの名無しさん
2009/03/03(火) 21:21:53ここにはscanfしか語れない初心者しかいねぇのかYO
0046デフォルトの名無しさん
2009/03/03(火) 21:44:230047デフォルトの名無しさん
2009/03/03(火) 21:46:480048デフォルトの名無しさん
2009/03/03(火) 22:07:53リストの内部イテレータが外部インターフェースに対してスタティックに成るけど
オレ様の用途に十分かどうか教えてくれ。
と 33 は問いかけてると読む。
004933
2009/03/03(火) 22:37:54その通り。君はプロだ。やっぱプロは違うなぁ
で見解は?
>>46>>47
チミたち、C++ならいたての学生には用はないのだよ
気安くレスしないでくれ
0050デフォルトの名無しさん
2009/03/03(火) 22:40:100051デフォルトの名無しさん
2009/03/04(水) 00:40:04void test(char yui,...) とある場合、...の意味するものはなんでしょうか?
0052デフォルトの名無しさん
2009/03/04(水) 00:41:47va_start、va_end、va_arg
http://www.geocities.co.jp/SiliconValley/6071/technic/17.html
0053デフォルトの名無しさん
2009/03/04(水) 05:28:00memset(str, `\0`, MAX_PATH);
lstrcpy(str, ゙53゙);
if(str[0]==`5`)
{
MessageBox(hWnd,゙ウンコ―(・∀・)゙,゙今夜のメニュー゙,MB_OK|MB_ICONHAND);
}
else
{
MessageBox(hWnd,゙チンコ―(・∀・)゙,゙今夜のメニュー゙,MB_OK|MB_ICONHAND);
}
今夜のメニューがウンコ―になるためには、
if(str[0]==0x52)のようにしなきゃ駄目ですか
0054デフォルトの名無しさん
2009/03/04(水) 07:11:26005551
2009/03/04(水) 07:14:51そのリンク先で、myfunc( "test" , 100 );とよびだされた場合、
"test"というのはどう扱われるのでしょうか?
0056デフォルトの名無しさん
2009/03/04(水) 07:23:32ttp://www.geocities.jp/ky_webid/c/057.html
なるたけ単純な具体例のあるページ
0057デフォルトの名無しさん
2009/03/04(水) 07:43:01そこは引数の数があってないので参考にするな
ちなみに"test"は引数の開始位置を得るだけにしか使われていない
0058デフォルトの名無しさん
2009/03/04(水) 08:16:17...の直前の引数(va_startの第2引数)に入る。
0059デフォルトの名無しさん
2009/03/04(水) 08:49:08そんなことに、まともに答えられないお前もどうかと
0060デフォルトの名無しさん
2009/03/04(水) 11:01:27取得するような関数ないでしょうか?
0061デフォルトの名無しさん
2009/03/04(水) 11:02:420062デフォルトの名無しさん
2009/03/04(水) 11:32:24環境依存
0063デフォルトの名無しさん
2009/03/04(水) 12:02:150064デフォルトの名無しさん
2009/03/04(水) 12:10:11通常なら
uint8_t buff[1024]; memcpy(buff, var1, sizeof(var1); ...
callfunc(buff);
などするか、
struct { var1_t a; var2_t b; ... } buff = { var1, var2, ... };
callfunc(&buff);
とすると思いますが、両者ともサイズ計算とか型情報をその場に
書く必要があり、長いこともあり簡潔にできないかなと考えています。
実はgcc拡張ですらない、環境依存な挙動レベルでは
uint8_t *buff = (uint8_t *)&(struct {}){ var1, var2, ... };
というのが動いたりして、ソース記述としては一番気に入っているのですが、
当然使えません。そこで質問ですが、これくらい簡潔(冗長な情報を
書かずに済ませられる)に書け、さらにせめて実装別の拡張程度で済ませられる
バイト列へのパッキング方法ってないでしょうか?
0065デフォルトの名無しさん
2009/03/04(水) 12:25:13テンプレート関数(&buff, T) {memcpy(buf, ite, sizeof(T))〜; buf.ite+sizeof(t); return &buf}
0066デフォルトの名無しさん
2009/03/04(水) 12:45:58でもなんとなくCに見える
class Pack
{
char buff_[1024];
int size_;
public:
Pack() : size_(0) {}
operator char const *(){ return buff_; }
int size(){ return size_; }
template<class T> friend Pack &operator <<(Pack &pack, T t)
{
memcpy(pack.buff_ + pack.size_, &t, sizeof(T));
pack.size_ += sizeof(T);
}
};
// Pack p; p << val1 << val2 << val3;
0067デフォルトの名無しさん
2009/03/04(水) 12:57:41BI& <T>push(BI&, T&){ memcpy(if(BI.ite + sizeof(T) < sizeof(Bi.buff))BI.buff[ite], T, sizeof(T)); BI.ite += sizeof(T); return BI}
int buff[99];
BI<int, 99> b = { buff, 0};
b = push(b, Z) = push(b, Y) = push(b, X);
0068デフォルトの名無しさん
2009/03/04(水) 13:44:38006964
2009/03/04(水) 20:18:52とりあえず
memcpy方式
-> オフセット計算が煩雑だし、エンディアン変換でさらに冗長になるので却下
struct方式
-> 型情報と構造定義と代入側の順序をメンテするのが面倒だが、
型チェックもしてくれるだろうしこれが妥当か・・・
sprintf方式(mprintf(buf, "NVc", v1, v2, v3) みたいなのを自分で作る)
-> 一番見通しがいいけど、型チェックが不可になる
という感じに考えが行きつつあります。具体的なコードだと
#define T(n) typeof(n) _ ## n /* require gcc */
void myfunc(uint8_t a, uint32_t b) {
typedef struct __attribute__((packed)) { T(a); T(b) } in_t;
nextcall((uint8_t *)&(in_t){ a, htonl(b) });
みたいな感じです。が、やってみると型チェックしてくれないので、まだ悩み中。
0070デフォルトの名無しさん
2009/03/04(水) 20:23:15たとえば以下のようなコードがあった場合
int a;
if(a){
を
int a;
if(a != 0){ //
と変更したり、
boolean c()
{
int r = 0;
略
return r;
}
を
boolean c()
{
int r = 0;
略
return (r != 0);
}
する。
0071デフォルトの名無しさん
2009/03/04(水) 20:27:210072デフォルトの名無しさん
2009/03/04(水) 20:42:14扱う型の種類、パックする環境、アンパックする環境、を可能な限り詳しく教えて下さい。
特になぜエンディアンが問題になるのか解るように。
007370
2009/03/04(水) 20:58:04boolean a;
if(a)
{
とか
boolean c()
{
boolean r = 0;
略
return r;
}
の場合は修正の必要は無いです。
0074デフォルトの名無しさん
2009/03/04(水) 21:04:050075デフォルトの名無しさん
2009/03/04(水) 21:13:52char 配列 可変長要素 エンディアン とくれば UTF-8 系の処理だろうな
007664
2009/03/05(木) 00:32:45いまCodeWarriorっていうIDEのOSSなプラグインを改造して、WIN(VC++)+UNIX(gcc)で
使えるツールに仕立てようとしています。機能は組み込み開発用デバッグアダプタの
USB越しのコマンド制御で、レジスタ読んだりMCUステップ実行させたりします。
扱う型自体はu?int(8|16|32)_t(かそれをtypedefした/enumで結果的にいずれかに
落ちた)型だけです。パック・アンパックはホスト側でだけですが、ターゲットのエンディアンは
MCUで異なるのと、ホストもx86以外もあるのでhtonlなどの他、htoll(host-to-littelong)
なども用意して使っています。
memcpyだとエンディアン変換で面倒云々は
myfunc(uint32_t hoge) {
hoge = htoll(hoge);
memcpy(buff, &hoge, 4)
などアドレス取るために行数が倍になるという話です。ここは一行にまとめて書けるstructや
パッキング関数に渡す方法のほうがすっきりします。
既に一度ざっと移植したのですが、元ソースが
*(unsigned int *)(data + 2) = hogehoge;
data[6] = hoge;
*(unsigned char *)(data + 7) = fugafuga & 0xFF;
とかややぐちゃっとしてるので、もっとすっきりとUSBで流し込むバイト列の生成が
できないかなぁと質問してみました。まあせいぜいコマンド1つあたり5変数程度
パックするだけなんで、大問題というより途中から面白くなってきたのでやってるのですが。
007764
2009/03/05(木) 00:42:26gcc -pedantic --std=(gnu|c)99 -Wall -Wextra -Werror -Wconversion
でいけた(-Wconversionがチェック用)ので、今のところstruct方式がエレガントかなぁと。
いまはVC++で使える方法を探してます。こっちはC++なんで、元のキャスト代入方式より
簡潔にはしたいですが、もっと色々とできそう。typeof/decltypeを見つけて小躍りしましたが、
これはVC++では使えないのですね・・・
0078デフォルトの名無しさん
2009/03/05(木) 00:58:00ターゲットのMCUによってエンディアンが異なるなら、
memcpyだけではなく、structでも、自作sprintfでも、要素ごとにエンディアンの変換は必要ではないですか?
なぜmemcpyでだけエンディアン変換が問題になるのでしょうか。
0079デフォルトの名無しさん
2009/03/05(木) 01:01:42008064
2009/03/05(木) 01:22:25もちろんそうですが、memcpyベースだと2つの文になります。
引数やstructの中なら横に{ htons(v1), htonl(v2), v3, ...} と}羅列できるので、
やや行数的にお得かなと気持ちが傾いてます。
>>79
はい、元コードがキャスト方式です。ただ、キャストとmemcpyは書き込み先バッファの
オフセット位置を明示的に調節する必要があるので、「とりあえず変数を並べると
よろしくパッキングされる」みたいにできないかなぁと。
まあベタに書いてく元コードでいいじゃん?てな気もする程度の問題ですが、
色々方法がありそうで面白いので深追いしてみようかなと。
0081デフォルトの名無しさん
2009/03/05(木) 07:36:42重要なのはソースの行数だけですか?
(1)ソースの行数、(2)ソースの文字数、(3)ソースの可読性、(4)オブジェクトのサイズに優先順位を付けるとどうなりますか?
0082デフォルトの名無しさん
2009/03/05(木) 08:35:55008364
2009/03/05(木) 09:18:13各項目での自分的評価だと、こんな感じです(1が最も短い・速い・わかりやすい・etc):
cast: 3321
標準的な記法で、外部知識を要しない。オブジェクトサイズも最小。ただ、キャストの嵐が目に
やさしくない(マクロで対処は可能)のとオフセット計算が間違えやすい。パックされた構造の把握は
縦に読む必要がある。縦の行数はパック対象変数分程度。バッファコピーが必要になるとmemcpyが必要。
例: *(uint32_t *)(dst + 4) = (uint32_t)htonl(src); <- これがN行続く
memcpy: 4211
標準関数なので、外部知識を要さず、サイズも呼び出しのみで小さい。キャストも不要。
オフセット計算は必要で、転送データ構造のイメージは縦に読んで把握する必要がある。
縦の行数は最大で対象変数の数+エンディアン変換数程度で最大。
例: src = htonl(src); memcpy(dst + 4, &src, sizeof(src)); <- これがN行続く
struct: 2222
外部知識は要しないが、一般性で劣る。サイズはキャスト方式と同等か、スタック消費分劣る。
オフセット計算が不要で、構造イメージは横に並んだ順そのままで把握はしやすい。しかし、
構造定義が長くなりがちで、変数の使用位置から離れるとズレやすいかも。バッファコピーが必要に
なるとmemcpyが必要。
例: struct { uint32_t _a; uint8_t _b, ... } buf = { htonl(src1), htonl(src2), ... }; <- スタック利用
or typedef struct { uint32_t _a; uint8_t _b, ... } in_t;
*(int_t *)(buf + 4) = { htonl(src1), htonl(src2), ... }; <- 既存バッファへの書き込み
mprintf: 1113
フォーマット表記の知識を得る必要があるが、処理部分のコードはかなり簡潔にデータ構造を
表現・理解できる。ただし、mprintfの実装分、メモリと処理速度で劣る。処理の中身はmemcpy。
例: mprintf(buf + 4, "NN...", src1, src2, ...);
0084デフォルトの名無しさん
2009/03/05(木) 10:58:37虚数を含んだ計算式を作る必要があるのですが
色々調べたところ、<complex.h>をインクルードすると
虚数iを大文字Iとしてプログラムを書くことで虚数を扱える、とあったのですが
下のようなビルドエラーが出てしまいます(complex.hが無い、という意味か?)。
fatal error C1083: include ファイルを開けません。'complex.h': No such file or directory
ちなみに、VC++2008を使って勉強していますが
ソース自体はCの文法で書いています。
webでも色々調べたんですが、解決方法は見つからず・・・どなたか助言下さい。
0085デフォルトの名無しさん
2009/03/05(木) 11:24:30C++用の
<complex>
ならあるみたい
0086デフォルトの名無しさん
2009/03/05(木) 11:51:190087デフォルトの名無しさん
2009/03/05(木) 14:58:340088デフォルトの名無しさん
2009/03/05(木) 15:58:16using namespace std;
#include <math.h>
#define FNC void fnc();
FNC;
int main()
{
fnc();
return 0;
}
FNC
{
cout<<"FOFOOFOF"<<endl;
}
どこが間違っているんでしょうか?
0089デフォルトの名無しさん
2009/03/05(木) 16:01:21セミコロン入れたらダメじゃね? 知らんけど。
0090デフォルトの名無しさん
2009/03/05(木) 16:04:49ハイパーサンクス
0091デフォルトの名無しさん
2009/03/05(木) 18:27:57そんな事に手間取るくらいなら自前で作った方が早いだろ。
加減算、乗算は一瞬でしょ。
割り算は意味わからなくても公式で一発だし。
0092デフォルトの名無しさん
2009/03/05(木) 18:31:38fputcの要領で、16ビットや32ビットなど必要なものを
(中身はエンディアン変換とfwriteを使い)自分で関数を作っていくのはどう?
と思ったが、VC++だとfmemopenがないから駄目だよな。
0093デフォルトの名無しさん
2009/03/05(木) 18:45:46適当に探せば外部のライブラリがありそうじゃない?
それでしのいでいるうちに猛勉強してC++も使えるようになれればおk。…無茶か?
0094デフォルトの名無しさん
2009/03/05(木) 19:15:150095デフォルトの名無しさん
2009/03/05(木) 19:31:37「自分で書くコードが、どんなときに例外をスローすべきなのか」
となると別の話になるけど。そういうことが聞きたいの?
0096デフォルトの名無しさん
2009/03/05(木) 19:40:34で FindFirstFile( )関数の失敗した値
INVALID_HANDLE_VALUE
が返ってきた時
if( INVALID_HANDLE_VALUE == h )
{
FindClose(h);
}
ってやるんだけど 失敗したときのハンドル値で FindClose() していいの?
失敗してるこの場合 FindClose() はいらないの?
0097デフォルトの名無しさん
2009/03/05(木) 19:47:00していい。
ttp://msdn.microsoft.com/ja-jp/library/cc429233.aspx
0098デフォルトの名無しさん
2009/03/05(木) 19:48:43いらなかった。
0099デフォルトの名無しさん
2009/03/05(木) 19:49:18いらなかった。
0100デフォルトの名無しさん
2009/03/05(木) 20:00:59助かった。
0101デフォルトの名無しさん
2009/03/05(木) 22:29:35指し示すアドレスから、そのデータ型の構造体が連続して配置されている場合、
n番目のデータにアクセスしたい場合、どうしたら良いでしょうか。(下記サンプル参照)
typedef struct {
unsigned char test1;
unsigned char test2;
} Test_set1;
typedef struct {
unsigned short test3;
unsigned short test4;
} Test_set2;
typedef struct {
Test_set1* test5;
Test_set2* test6;
} Test_all;
volatile const Test_all Test_struct = {
(Test_set1*)0x3FFFFFA0,
(Test_set2*)0x3FFFFFB0 ←メモリ上では、Test_set2型がn個連なっている。
};
void Test_func(unsigned char index){
unsigned short tmp1, tmp2;
tmp1 = Test_struct.test6->test3;
tmp2 = Test_struct.test6[index]->test3; ←コレはダメぽい・・・
}
やっぱポインタを任意回数インクリメントか、indexを足すしかないでしょうか?
0102デフォルトの名無しさん
2009/03/05(木) 22:34:240103101
2009/03/05(木) 22:54:33おぉ・・・・・素早いレスありがとうございます。
確かにコンパイル出来るようですっ! 明日アセンブラで狙ったところに
アクセスしているか確認してみます。
この場合、test6 はポインタですが、Test_struct.test6[index] と書くと、Test_set2型の
RAM扱いになるんでしょうか?(ショボイ質問ですいません)
0104デフォルトの名無しさん
2009/03/05(木) 22:59:240105デフォルトの名無しさん
2009/03/05(木) 22:59:540106デフォルトの名無しさん
2009/03/05(木) 23:23:120107デフォルトの名無しさん
2009/03/05(木) 23:44:50順番ちがくね?
0108デフォルトの名無しさん
2009/03/06(金) 00:04:270109デフォルトの名無しさん
2009/03/06(金) 00:08:36これの = { 1, 1 };
って・・・・なんでしょうか・・?
こんなの見たことありません・・!
これはどういう意味なんですか・・?
0110デフォルトの名無しさん
2009/03/06(金) 00:23:180111デフォルトの名無しさん
2009/03/06(金) 00:28:440112デフォルトの名無しさん
2009/03/06(金) 00:54:22Effective C++などには配列はやめてvectorとstringを使おうと書かれているが、
ロベールでは徹底的に配列を使う(というより全編にわたってほぼ余すところなく登場する)。
配列はポインタと表裏一体なので、初心者は最初からCの一番の鬼門と真正面から向き合うことになる。
メモリ操作に関する知識は絶対に必要なのでこのスタンスもわからなくはないが初心者にはやや厳しくはないか?
他にも、ビット列の再解釈がしばしば登場したり、ハンガリアン記法が採用されていたり。
まぁ、いずれも必要な知識だけどさ。
0113デフォルトの名無しさん
2009/03/06(金) 01:11:00どの解説も同じでは面白くない、違う方が良い。
Cから順番に説明があったり、
いきなりクラスから説明したり、
それを読者が選ぶ事が出来る。良い時代です。
それぞれが、それぞれに良い
0114デフォルトの名無しさん
2009/03/06(金) 01:23:41自分はCを学ぶにあたってポインタの習得にだいぶ苦労したので
Accelerated C++でCを勉強したときは目からうろこだった。
0115デフォルトの名無しさん
2009/03/06(金) 01:41:15その考え方ステキだな。
俺は途中でロベールを読んだが、たま〜に知らない事が出てきて面白かった程度の記憶しか残っていない。
(逆に言えば特につっかからなかったとも言える。慣れてたからだろうけど。)
最初に読んでいたらきっと感慨も違っただろうなぁ。
0116デフォルトの名無しさん
2009/03/06(金) 01:58:46機械語を逆アセンブルするときは、逆順、後ろから読む。
そして、終わったら前から順次読む。
本を読む時も同じ。逆から読む。
変かもしれない
人それぞれです、その人に合ったものを選ぶ事が出来れば幸せになります。
自分自身を知って、マッチする方法を選ぶ能力を養う
これが幸せへの法則かもしれません。
0117デフォルトの名無しさん
2009/03/06(金) 15:52:32プログラムで範囲外だとエラー文を表示するのですが、
long型のオーバーフローする値(4294967296)を打ち込むと
入力エラーにならず読み込んでしまいます。
どういった対策をすればよいのでしょうか?
ちなみにint型で定義してあります。
0118デフォルトの名無しさん
2009/03/06(金) 15:53:130119デフォルトの名無しさん
2009/03/06(金) 15:53:40doubleで読み込めば
0120デフォルトの名無しさん
2009/03/06(金) 16:41:16入力部分と、保持する数値とを分離するとか。
>119
現実的にはともかく、理論的には変わんなくね? そうでもない?
0121デフォルトの名無しさん
2009/03/06(金) 16:45:220122デフォルトの名無しさん
2009/03/06(金) 16:53:07そういう時のscanf
0123デフォルトの名無しさん
2009/03/06(金) 18:15:570124デフォルトの名無しさん
2009/03/06(金) 18:17:480125デフォルトの名無しさん
2009/03/06(金) 18:18:290126デフォルトの名無しさん
2009/03/06(金) 18:45:281〜9999条件なら 4294967296 (0x1 0000 0000)は弾いてくれると思うが
如何か
0127デフォルトの名無しさん
2009/03/06(金) 19:27:150128デフォルトの名無しさん
2009/03/06(金) 19:35:05弾けるのは4294967296とか、一部じゃないかw
0129デフォルトの名無しさん
2009/03/06(金) 21:33:28もしも 117 の不具合症状を含むライブラリや CPU が有るようなら大問題
概念的指摘ならば問題はないが数字を出して上手くいかないと主張するなら
実行環境を示して頂きたい。
0130デフォルトの名無しさん
2009/03/06(金) 21:53:180131デフォルトの名無しさん
2009/03/06(金) 21:54:39>ちなみにint型で定義してあります。
といっているが、そもそもオーバフローする値が入力できるんだから元は
文字列とかint以外の値でしかありえない
それをintに変換した後ではじくのは不可能
面倒くさくても地道にやるしかない
1) 文字列のまま取得
2) 前後の空白とかとる
3) 数値以外のものがあったらエラー
4) 先頭の0を削除
5) 5桁以上ならエラー
6) 空文字列なら0
7) 整数変換
とか、まあがんばれ
0132デフォルトの名無しさん
2009/03/06(金) 22:31:450133デフォルトの名無しさん
2009/03/07(土) 01:18:090134デフォルトの名無しさん
2009/03/07(土) 07:38:06どうしたw突然何があった。
…まあ状況次第ではある意味大半の人の理解を超えているよ。
0135デフォルトの名無しさん
2009/03/07(土) 07:48:07他人のソースを読むと微妙な気分になる。
C++はまあまあ良い言語だが、他人のソースは
くそったれと思う。
って事かな?
0136デフォルトの名無しさん
2009/03/07(土) 08:22:39もっときれいに書けないのかよ昔の俺
0137デフォルトの名無しさん
2009/03/07(土) 08:26:160138デフォルトの名無しさん
2009/03/07(土) 12:04:250139デフォルトの名無しさん
2009/03/07(土) 13:45:17ロベール先生すいません
あなたの説明は僕の理解を超えている
0140デフォルトの名無しさん
2009/03/07(土) 13:47:43適当な本を買った方がいいよ。
サイトは限界があると思う。
…そしてアドレスとポインタが分からないならロベール先生のせいじゃなくてまだC++に入るほどの腕じゃないと言うことだからC言語の本が良いと思うよ。
0141デフォルトの名無しさん
2009/03/07(土) 14:02:08なのでPCプログラミングより8bitマイコンでも触るのお勧め。
ポインタが判らないという事はメモリマップとかスタックイメージも
脳内に浮かんでいないのは確実な訳で、それは計算機の知識が決定的に
欠けてる訳で、ってことはC/HWに限らずJVMやCLRも理解できない訳だから
一番見通しのいい低レベルハードウェアを触って身に付けるといいと思う。
0142デフォルトの名無しさん
2009/03/07(土) 14:39:23あっそ。
0143デフォルトの名無しさん
2009/03/07(土) 14:53:10void ChangeToShohwa(int x)
{
if(1926 < x && x < 1989)
x -= 1925;
else
x = 0;
}
void Shohwa()
{
int nYear;
cout << "西暦を入力して下さい > ";
cin >> nYear;
ChangeToShohwa(nYear);
if(nYear)
cout << "その年は昭和 " << nYear
<< " 年です。" << endl;
else
cout << "その年は昭和ではありません。" << endl;
}
int main()
{
Shohwa();
Shohwa();
return 0;
}
なぜこれで失敗するのかが理解できない・・あほでごめんなさい
0144デフォルトの名無しさん
2009/03/07(土) 15:07:32http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01034.html
>
普通に理由が書かれてるじゃん。
0145デフォルトの名無しさん
2009/03/07(土) 15:08:00手滑った
http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01034.html
>引数は、新たに変数が作られ、それに値が代入されるという仕組みになっているからです。
0146デフォルトの名無しさん
2009/03/07(土) 15:17:510147デフォルトの名無しさん
2009/03/07(土) 15:20:350148デフォルトの名無しさん
2009/03/07(土) 15:33:450149デフォルトの名無しさん
2009/03/07(土) 15:46:37そのこぴったのを変更しているだけ
0151デフォルトの名無しさん
2009/03/07(土) 17:55:04ポインターのような人間には解りづらく、そして機械に都合のいいように作られたものの使用を強制する言語はダメポ言語
普通は人間に合わせて言語が作られるべきだろ
0152デフォルトの名無しさん
2009/03/07(土) 18:16:590153デフォルトの名無しさん
2009/03/07(土) 18:33:00ポインターを駆使して記述されています。
0154デフォルトの名無しさん
2009/03/07(土) 18:47:530155デフォルトの名無しさん
2009/03/07(土) 19:01:39This is it.
0156デフォルトの名無しさん
2009/03/07(土) 19:11:01int (*i())[6]
int *(*(*i)())[4]
数秒以内にポインタiが何を指しているのか理解できないと
Cの初歩にすら達してないと言われた
お前らなら、一目瞭然で数秒どころか一瞬だろ
0157デフォルトの名無しさん
2009/03/07(土) 19:19:29実際そんな使い方はまったくしない。
一目でわかりやすい宣言をするのが上級者。
0158デフォルトの名無しさん
2009/03/07(土) 19:25:030159デフォルトの名無しさん
2009/03/07(土) 19:30:04俺の場合、特に最後は()の解析で時間かかるぞ
0160デフォルトの名無しさん
2009/03/07(土) 19:33:59いきなり 156 が現れたら 書いた奴の精神状態を疑う。
0161デフォルトの名無しさん
2009/03/07(土) 19:59:17俺、今でも数秒では無理だが、宣言をすらすらと解析できないとなると程度しれるよな
まだまだ初級のおれがちょっと前に新人にこのp何さしてるのって聞かれたのがこれ
int (CC::*(p[3]))(void);
これぐらいなら頻繁に使うだろうし、ム板連中なら一瞬だろ
ちなみに>>156は会社の新人PGのC言語コースの理解度試験
0162デフォルトの名無しさん
2009/03/07(土) 20:12:25俺だったらまずtypedefするが…
0163デフォルトの名無しさん
2009/03/07(土) 20:24:130164デフォルトの名無しさん
2009/03/07(土) 20:24:22どういう風にtypedefするんだ?
0165デフォルトの名無しさん
2009/03/07(土) 20:28:02メンバーイニシャライザを使用したコンストラクタをクラス定義の外に分離したいんだが、
g++でコンパイルするとこのようなエラーが出る。
--------------------------------------------------------
uha@seven:~/dev/uhaww$ g++ -Wall -o debug debug.cpp
debug.cpp: In constructor ‘TestException::TestException(std::string&)’:
debug.cpp:8: error: ‘sCause’ was not declared in this scope
debug.cpp:8: error: expected `{' at end of input
debug.cpp: At global scope:
debug.cpp:10: error: redefinition of ‘TestException::TestException(std::string&)’
debug.cpp:8: error: ‘TestException::TestException(std::string&)’ previously defined here
--------------------------------------------------------
分離すること自体考えてはいけないのだろうか...
メンバーイニシャライザ使わなければ分離できるのに。。
間違いがあればよろしくお願いします。
0166デフォルトの名無しさん
2009/03/07(土) 20:28:56まさか typedef int (CC::*(p[3]))(void)
なんて言わないよな
int (CC::*(p[3]))(void)が何をあらわすのか、解りやすくするtypedef頼むよ
0167デフォルトの名無しさん
2009/03/07(土) 20:29:28>>164
typedef int (CC::*ccpoint)(void);
ccpoint p[3];
こんな感じにするんじゃね?
0168デフォルトの名無しさん
2009/03/07(土) 20:34:07実際はベテランほど保守性を考慮して単純に書く。
Cの設計者でさえシンプルに書けと言ってるのに、
何を勘違いしてるんだろね。
0169デフォルトの名無しさん
2009/03/07(土) 20:38:150170デフォルトの名無しさん
2009/03/07(土) 20:46:27が頻繁に出てくるようでは駄目だと思うわ
0171デフォルトの名無しさん
2009/03/07(土) 20:57:19講座サイトの解説で使ってるVisual C++はちょっと違って
現在編集中のプログラムを実行する方法がわかりません。
ご教授よろしくお願いします。
0172165
2009/03/07(土) 21:01:490173デフォルトの名無しさん
2009/03/07(土) 21:13:57F1を押してヘルプを読め
0174デフォルトの名無しさん
2009/03/07(土) 21:18:57スレ違いだろ
0175デフォルトの名無しさん
2009/03/07(土) 21:19:31日本語で書いてくれ
0176デフォルトの名無しさん
2009/03/07(土) 21:21:160177デフォルトの名無しさん
2009/03/07(土) 21:22:200179デフォルトの名無しさん
2009/03/07(土) 21:34:360180デフォルトの名無しさん
2009/03/07(土) 21:40:121番目は多次元配列っぽくて、
2番目と3番目は関数ポインタの配列っぽいれすか?
あと>>161はメンバ関数へのポインタっぽい?
答えをたのむぅ。
0181デフォルトの名無しさん
2009/03/07(土) 21:48:22Cの文法の知識として、本当におまえら、読めないのか?
javaばっかやってるから、バカになる
0183デフォルトの名無しさん
2009/03/07(土) 22:02:29本当に読めないので、ぜひ、答えを
0184デフォルトの名無しさん
2009/03/07(土) 22:51:56( ((int[10])へのポインタ)[4] )へのポインタ ×2
int (*i())[6];
(int f()のような関数へのポインタ)[4]
int *(*(*i)())[4]
( (int *f()のような関数へのポインタ)[4] )へのポインタ
ということでいいのか?
0185デフォルトの名無しさん
2009/03/08(日) 00:00:320186180
2009/03/08(日) 00:09:442番目は二次元配列を戻り値とする関数i。
3番目は「関数ポインタを格納する二次元配列へのポインタ」へのポインタ。
わからーんw
0187180
2009/03/08(日) 00:50:521番目は「二次元配列へのポインタ」のポインタのポインタとなる要素数10の変数iだとすると
int *(**i[10])[4]; と書く必要があるようだ。わからん・・・。答えはまだか。
0188デフォルトの名無しさん
2009/03/08(日) 01:11:50intへのポインタのポインタの配列へのポインタの配列
int (*i())[6]
intへの配列へのポインタを返す関数
int *(*(*i)())[4]
intへのポインタの配列へのポインタを返す関数へのポインタ
0189180
2009/03/08(日) 01:21:47んでもって、(*変数名)[4]が多次元配列へのポインタで、
変数名の後の[10]がその変数の要素数になる、と。
だんだんわかってきた。おもしろい。w
0190デフォルトの名無しさん
2009/03/08(日) 01:39:49剥がしたものが、それぞれ
int(などの普通の型名)であれば…… 「int」
* であれば…… 「へのポインタ」
[N] であれば…… 「の配列」
(int,int) (など、カッコ内に型名)であれば…… 「が戻り値の型、(int,int)が引数の型である関数」
MyClass:: であれば…… 「で、MyClassのメンバであるもの」
をつけていく。これで読めるはずだ。英語圏の人は逆向きにやるらしいけど。
0191デフォルトの名無しさん
2009/03/08(日) 01:45:13「ポインタ⇔配列」の互換ができるのは、末尾の「〜へのポインタ」「〜の配列」の部分のみ。
だから、ポインタの配列はポインタへのポインタで受けることができるし、2次元配列は配列へのポインタで受けることができるが、
2次元配列をポインタへのポインタで受けるのは不正。
0192デフォルトの名無しさん
2009/03/08(日) 01:51:13読めないよ。
int &a
int func<int>()
0193180
2009/03/08(日) 01:52:140194デフォルトの名無しさん
2009/03/08(日) 01:56:420195デフォルトの名無しさん
2009/03/08(日) 02:07:280196デフォルトの名無しさん
2009/03/08(日) 02:07:550197デフォルトの名無しさん
2009/03/08(日) 02:26:30標準化するとき、誰からも反対が出なかったのが不思議なくらいだ。
頭がいい人がいっぱい集まってやってるハズなのに。
0198デフォルトの名無しさん
2009/03/08(日) 03:13:06っていうか、Quizみたいなみょうちくりんな宣言が必要になるプログラムは
そもそもの設計が間違っている気も。
0199デフォルトの名無しさん
2009/03/08(日) 03:21:05後は関数ポインタの宣言を何とかして欲しかったくらいか
>>156をすらすら読み、161みたいなのを頻繁に使うプログラマにはなりたくない
161はtypedefしないらしいし…
0200デフォルトの名無しさん
2009/03/08(日) 04:01:48もし>>156をtypedefを使って分りやすくしてくれと言われたらどのように
typedefする?有る意味typedefの練習になるんじゃないか
0201デフォルトの名無しさん
2009/03/08(日) 04:15:48例えばchar*をstringとしてtypedefしたり(C++ならstd::stringがあるけど)、単純に置き換えるんじゃなくて
意味が分かるようにしなければ、結局分かりやすくはならないんじゃないか。
0202デフォルトの名無しさん
2009/03/08(日) 04:37:26普通はそうだが、練習なら良いんじゃないか
>>156を見てこれならどうtypedefしたらいいんだろと疑問に思っただけ
>>156は宣言構文解釈による頭の体操って感じかな
頭の体操なら現実では使わないものでも良いんじゃないか
0203デフォルトの名無しさん
2009/03/08(日) 04:42:15つまり、windows.hを批判してるってことですね。
0204デフォルトの名無しさん
2009/03/08(日) 04:48:180206デフォルトの名無しさん
2009/03/08(日) 05:54:53gcc+Qtでなんも困らん。
0207デフォルトの名無しさん
2009/03/08(日) 09:50:090208デフォルトの名無しさん
2009/03/08(日) 10:16:150209デフォルトの名無しさん
2009/03/08(日) 10:29:48さっさとジュース買って来い
0210デフォルトの名無しさん
2009/03/08(日) 11:34:40何をしているのかと。
0211デフォルトの名無しさん
2009/03/08(日) 20:47:58using namespace std;
#include <math.h>
#include <stdio.h>
void ChangeToShohwa(int x)
{
if(1926 < x && x <1989)
x -=1925;
else
x = 0;
}
int main()
{
int x;
ChangeToShohwa(x);
if
printf("昭和%d年ですよ",x);
else
cout<<"昭和じゃないです"<<endl;
}
: error C2061: 構文エラー : 識別子 'printf'
: error C2181: else 文が if と一致しません。
0212デフォルトの名無しさん
2009/03/08(日) 20:51:56お師匠
0213デフォルトの名無しさん
2009/03/08(日) 21:03:52それコンパイラか頭のバグ
コンパイラ何? 頭は何?
0214デフォルトの名無しさん
2009/03/08(日) 21:06:59ifだけじゃだめだろ
この場合if(x)かな?
他もひどすぎて、思ったとおりには実行されないと思うが
0215デフォルトの名無しさん
2009/03/08(日) 21:08:52VIsual C++ 2008
頭・・?
0216デフォルトの名無しさん
2009/03/08(日) 21:10:55これのどこがひどいと言うんだ・・・!!
シンプルで無駄のないプログラムじゃないか!!
0217デフォルトの名無しさん
2009/03/08(日) 21:11:45バカは失せろ
0218デフォルトの名無しさん
2009/03/08(日) 21:14:25すいませんでした
出直してきます
0219デフォルトの名無しさん
2009/03/08(日) 21:18:15int x = 1945;
void ChangeToShohwa(int& x)
if(x)
これで良いだろ
0220デフォルトの名無しさん
2009/03/08(日) 21:19:120221デフォルトの名無しさん
2009/03/08(日) 21:20:14int返せよ
0222デフォルトの名無しさん
2009/03/08(日) 21:23:40そう言うならおまえがそれやれよ
0223デフォルトの名無しさん
2009/03/08(日) 21:36:000224デフォルトの名無しさん
2009/03/08(日) 21:50:09まともに動かなくていいのよ。この後、参照の話が出てきて
まともに動かない理由とちゃんと修正されたバージョンのコードが記載されてるから。
しかし、ロベールは2000年の記事じゃから古いぞ。
使っているコンパイラもVC++6で著者自身が
環境依存はいやだと書いているくらいだし。
0225デフォルトの名無しさん
2009/03/08(日) 21:58:42Googleのプンソで採用されているコーディング標準では
参照パラメータはすべてconstにせよってあった。
まぁ、それはさすがに行き過ぎだと思うけど
関数の可読性という点ではなるほどとも思う。
0226デフォルトの名無しさん
2009/03/08(日) 22:31:380227デフォルトの名無しさん
2009/03/08(日) 22:58:21>>145
0228デフォルトの名無しさん
2009/03/08(日) 23:02:070229デフォルトの名無しさん
2009/03/08(日) 23:22:01和暦形式に代わってるとか死ねとおもうね
0230デフォルトの名無しさん
2009/03/09(月) 00:05:100231デフォルトの名無しさん
2009/03/09(月) 00:07:370232デフォルトの名無しさん
2009/03/09(月) 00:12:490233デフォルトの名無しさん
2009/03/09(月) 01:07:340234デフォルトの名無しさん
2009/03/09(月) 03:14:07って言われること、けっこう良くあるけど、
天皇が暗殺されたら、どうするのかね?
0235デフォルトの名無しさん
2009/03/09(月) 03:48:14そんなの昭和64年からの常識だろ。
0236デフォルトの名無しさん
2009/03/09(月) 08:07:310237デフォルトの名無しさん
2009/03/09(月) 08:37:29イスラムが再び勃興してイスラム暦に切り替わるかもしれない。
UTCみたいな無色透明な基準年が必要だな。
0238デフォルトの名無しさん
2009/03/09(月) 09:31:35基準だったら皇紀でもいいわけだろ。
0239デフォルトの名無しさん
2009/03/09(月) 09:50:40小生も美しいコード書けるようになりたいですハイ。
弟子入りさせて貰えませんか?
0240デフォルトの名無しさん
2009/03/09(月) 09:55:34俺が小学生の頃、46億年前に地球ができたって聞いたから今は46億18年だな。
0241デフォルトの名無しさん
2009/03/09(月) 09:59:490242デフォルトの名無しさん
2009/03/09(月) 10:04:54ビッグバン歴
0243デフォルトの名無しさん
2009/03/09(月) 10:07:090244デフォルトの名無しさん
2009/03/09(月) 10:44:56同じように、1989年も殆ど昭和じゃないし。
0245デフォルトの名無しさん
2009/03/09(月) 10:51:46SendKeysやPostmessage,標準入力などでキー送信を送ろうとしているのですが、
SendKeysの場合:通常のキーは受け付けるがファンクションキーは駄目
Postmessage、標準入力の場合:何も受け取らない
となります。
ファンクションキーを送信したいのですがどうすればいいのでしょうか?
アドバイスお願いいたします。
・DOSプロンプトだと標準入力はちゃんと受け付けるが、コンソールアプリは受け付けない
->DOSプロンプトとコンソールアプリの仕組みは別物?
0246デフォルトの名無しさん
2009/03/09(月) 11:31:49今どうやってんの、C++/CLIなのか?
0247デフォルトの名無しさん
2009/03/09(月) 11:35:00PostMessageやSendMessageがダメなのは知ってる。
他は知らない。
0248デフォルトの名無しさん
2009/03/09(月) 11:54:27> 送れないこともないだろ?
> 今どうやってんの、C++/CLIなのか?
VC++6.0MFCコンソールアプリ で作りました。送る方はVB.NET2005です。
PostMessageはWM_CLOSEは送れたようです。その他は
SendKes.Send(chr(0))
SendKes.Send(chr(62))
とするとchr(62)は送れるんですが、chr(0)は無視されますっていうか
SendKes.Send(chr(0)) っていうのはVBでは無謀なのかな、でもvbNullStringでも
駄目でした。
それに標準入力で送れないのはなぜなんでしょう?(DOSプロンプトへはおくれるのに)
0249デフォルトの名無しさん
2009/03/09(月) 11:54:41[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8957.txt
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: MSC ver.5.1
[3.3] 言語:C
パスワードの入出力プログラムをつくりたい。
PASSは4文字とし、1文字入力される毎に'*'を1個表示し、
4文字入力後パスワードをチェック。
PASSが正しければ「システムの使用を許可します」と表示し、
間違っていれば3回再入力させて、3回を超えたらエラーを表示。
(パスワードは予めプログラム内部で定義されているという前提で)
こういうプログラムを書いてみたのですが、main以下「*password=1994」を
正解として宣言し、else文の部分でc[i]と*passwordを認識させてprintfで
c[i]を表示させたいんですけれどもうまくいきません。
何故でしょう?
何となく原因はわかるのですが、漠然としていて手が出せないんです。
上のコードをみて、名人方のアドバイスをお聞かせ願いたい。
0250デフォルトの名無しさん
2009/03/09(月) 12:00:25SendInputはどう?
0251デフォルトの名無しさん
2009/03/09(月) 12:16:23何をやりたいのかの説明がおかしいし、プログラムに至っては支離滅裂だ。
c[i]に文字を入れているのなら、1994なんて数値を入れちゃダメだろ。
初歩からやり直すことをお勧め。
0252デフォルトの名無しさん
2009/03/09(月) 12:21:31位置エネルギーと一緒で無限遠を元年にすればいい
0253デフォルトの名無しさん
2009/03/09(月) 12:31:54#include <stdio.h>
#include <conio.h>
int main(){
const char* password = "1994"; int count = 0;
do{
int i; char input_password[4];
printf("パスワードを入力して下さい。(4文字): \n>");
for(i = 0; i < 4; ++i){input_password[i] = getch(); putchar('*');}
}while(!strcmp(password, input_password) && count++ < 3);
if(count >= 3){
puts("仏の顔も三度まで!\n正式なpasswordがないとシステムは使用できません!");
}else{
printf("password = %s\nシステムの使用を許可します。\n", password);
}
}
>>251氏
なるほど、確かにおっしゃるとおりだと思います。
説明不足で申し訳なく。
このプログラムは'1994'というPASSを定義して、c[i]に入力させてそのPASSを
入力させたら正解、それ以外なら間違いで再入力させるといった感じでつくりたかったんです。
そして、私はCを学び初めてほんの1ヶ月くらいの素人でありまして
現在進行形で勉強中の身であります。
初歩から学んでいるつもりなのですが、何分覚えることが沢山すぎて手探りな状況な次第。
もし、よければ勉強するポイントなど上げて貰えると助かるのですがお願いできますでしょうか?
0255デフォルトの名無しさん
2009/03/09(月) 12:35:411) 初心者です、を免罪符にした発言を慎む。
2) 一歩目から他人に頼るな。努力の跡すら見えないのは相手にされない。
0256デフォルトの名無しさん
2009/03/09(月) 12:39:56インポ目で他人を頼って(ry
0257デフォルトの名無しさん
2009/03/09(月) 12:40:16一ヶ月もあれば、パスワード入力くらい書けるようになる。
それができていないのは、初歩からきちんと自分のものにしていないのではないだろうか。
まさかとは思うが、本を読んで理解した気になっただけで書けるようになるとは思っていないだろうな。
まぁ、先ずはもっと単純な文字入力からおさらいしてみようかw
0258デフォルトの名無しさん
2009/03/09(月) 12:45:280259デフォルトの名無しさん
2009/03/09(月) 12:56:16メモ帳だとその程度か
input_passwordが0終端してないぞ
0260デフォルトの名無しさん
2009/03/09(月) 13:00:26肝に銘じます。
>>257氏
言われてみれば、本を読んでたら出来るようになるとは少なからず思っていました。
でも、実際やってみて全然出来ないどころか、覚えることすら出来ていないことに
自己嫌悪に陥っています。
単純な文字入力から勉強し直してみます。
>>258氏
宿題スレの名人方は、添削するより、ひたすら課題を自分でこなしていく
のが好ましいようなので、張り付いてだけじゃ私の力量うpには繋がりませんよね・・・。
参考にはなっていますけども。
0262デフォルトの名無しさん
2009/03/09(月) 13:25:08本を読むだけでも相当な勉強になる。
…ただしただ読み流すだけではダメで、理解しながら読まないと、ただ字面を追っているだけになる。。
そして少しでも疑問に思ったら先へ進まないでコーディングしてみる。
この辺は中高生の数学と共通する物がある。
ってな感じが俺の認識。
0263デフォルトの名無しさん
2009/03/09(月) 13:25:400264デフォルトの名無しさん
2009/03/09(月) 13:27:35自分で回答するんだよw
0265デフォルトの名無しさん
2009/03/09(月) 13:29:31自分でも答えを考えるんだよ。
>…ただしただ読み流すだけではダメで、理解しながら読まないと、
ただ字面を追っているだけになる。
はい、どうやら私は読んで理解したつもりだっただけで
字面を追っていることをこれまで繰り返していただけのようです。
「早くCの知識を身につけたい」という気持ちだけが先走っていたといいますか。
勉強しても早々簡単にはみにつかないものなのにおかしいですね。
>>264氏
もし自分で回答なんかしちゃったりしたらら駄目だしされまくりで
精神的に辛すぎるような気もしますが・・・
0267デフォルトの名無しさん
2009/03/09(月) 15:24:29ダメだしされて何が悪い。直せばいいじゃないか。
ダメだしも指摘もなければずっと悪いままだぞ。
0268デフォルトの名無しさん
2009/03/09(月) 15:43:56講釈なんて聞いても無駄だよ。
自分ができない夢を語っているだけなんだから。
文字入力の基礎からやり直そうと思って勉強し直してるんですけども
いつまでたっても目的のパスワードプログラムが出来そうもない・・・
何となく問題の原因はわかりかけてるんだけど、漠然としてて・・・
そっから全然前に進まない
ほんと使えないなぁ・・・私って・・・OTL
>>267氏
確かにその通りかもしれません
すぐには無理でしょうが、いずれ力量うpしたら実践してみたいと思います。
0270デフォルトの名無しさん
2009/03/09(月) 17:16:130271デフォルトの名無しさん
2009/03/09(月) 17:50:370272デフォルトの名無しさん
2009/03/10(火) 01:04:54liba.aがlibb.aの関数を使用し、libb.aがlibc.aの関数を使用しているとき
gcc -o prog main.o liba.a libb.a libc.a の順番に書かないとundefinedなんとかというエラーが出る。
もしも、liba.aとlibb.aの双方が互いの関数を使用している場合、
これらのスタティックライブラリを上記のgccでリンクするにはどうすればよいのか。
0273デフォルトの名無しさん
2009/03/10(火) 02:46:290274デフォルトの名無しさん
2009/03/10(火) 02:49:11そうならないようにモジュールの配置を見直す。
0275デフォルトの名無しさん
2009/03/10(火) 07:01:54そういうのを循環参照と言って、良くない設計の兆し。
0276デフォルトの名無しさん
2009/03/10(火) 08:38:45よく書かれてるな。
0277デフォルトの名無しさん
2009/03/10(火) 12:32:55昔のHP/UXにもそういうの(順序を人間が決めないといけない)があって
lorder | tsort で依存関係をトポロジカルソートして makefile に食わせた覚えが。
# include <stdio.h>
int c, cc;
main(){
printf ("getcharの実験 Ctrl + Z で終了\n");
while ((c=getchar())!=-1) {putchar('*'); putchar(c);}
printf ("getchの実験 スペースキーで終了\n");
while ((cc=getch())!=32) {putchar('*'); putchar(cc);}
}
このプログラムの「while ((c=getchar())!=-1)」の「!=-1」って
「Ctrl + Z」をあらわしてるんですかね?
それと、「while ((cc=getch())!=32)」の「!=32」ってのは
「スペースキー入力」を意味してるんでしょうか?
いま、入出力を勉強中なのですが、これがよくわからなくて。
教えて下さい、お願いします。
0279デフォルトの名無しさん
2009/03/10(火) 14:02:32-1はEOFだろ。Ctrl-Zかどうかは環境による。
なるほど。
では、上のプログラムを数字の「1994」と入力したら終了するように
書き換えるにはどうすればいいのでしょうか?
自分では、「!=1994」と記述すれば問題ないだろうと思っていたのですが
実行してみると全く終了する気配がありません。
コンパイルも正常に通り、延々と入力させるプログラムに成り果ててしまいました。
0281デフォルトの名無しさん
2009/03/10(火) 14:15:22atoi(str) != 1994
まあ普通は
strcmp(str, "1994") != 0
0282デフォルトの名無しさん
2009/03/10(火) 14:29:110283デフォルトの名無しさん
2009/03/10(火) 14:32:40ってMSC5.1?
MS-DOSの頃のじゃないのかそれw
なるほど、atoi関数使って整数文字列を整数値に変換してからでないと
いけなかったんですか
ということは文頭の#includeにstdlib.hを追加しないといけないのかな
ありがとうございます名人
私は名人のようなPGになりたいです!
>>283
はい、そうです。
調べてみたらPC9800シリーズに標準装備されてた頃のやつっぽいです。
まぁ、今のところ不自由はしていないので古くてもいいかなって思って
使っています。
/* getchar.c */
# include <stdio.h>
int c, cc;
main(){
printf ("getcharの実験 Ctrl + Z で終了\n");
while ((c=getchar())!=-1) {putchar('*'); putchar(c);}
printf ("getchの実験 スペースキーで終了\n");
while ((cc=getch())!=32) {putchar('*'); putchar(cc);}
}
この「while ((c=getchar())!=-1)」の「!=-1」の部分を「atoi(str) != 1994 」
に書き直すにはどうしたらいいんでしょうか?
自分でやってみたらえらい不細工な文になってしまってとても見てられたものじゃ
なかったもので・・・ご教授願いたいのです
0286デフォルトの名無しさん
2009/03/10(火) 16:14:09別関数にするのがいいけど
0287デフォルトの名無しさん
2009/03/10(火) 16:46:12char str[1024] = {0};
int i = 0;
とか宣言して
str[ i++ ] = c;
を追加
0288デフォルトの名無しさん
2009/03/10(火) 17:11:10>>249のリンク先のコードの中にもう入ってるんだけどねー
・文字=数値(ASCIIコード)
・文字列=文字の配列
質問者が↑をまだ理解しきれてないんじゃないのか
あとatoi()をパスワード認証に使うのは同意できない
パスワードも入力も文字列なのに、なぜ数値に変換する?
例えばもしパスワードが"1994"でなく"0083"だったら、入力が
"0083"でも"083x"でも"83xx"でもOKになるんだけど、それが君の望む挙動なの?
自然に文字列どうし比較しようよ。「普通はstrcmp()」って書いてくれてるやん
『文字列は難しい』ってみんなが脅すから避けてるのかもしれないけど
『文字列(をうまく説明するの)は難しい』の意味だから気にせず勉強しろよ
理解できた後なら『俺どーしてこんな質問してたんだろ』ってなるよ、絶対
こんなERRがでちゃいました;;
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8960.txt
gch2.C
gch2.C(8) : warning C4135: conversion between different integral types
gch2.C(11) : warning C4016: 'strcmp' : no function return type, using int as default
gch2.C(11) : warning C4071: 'strcmp' : no function prototype given
gch2.C(15) : warning C4016: 'getch' : no function return type, using int as default
gch2.C(15) : warning C4071: 'getch' : no function prototype given
gch2.C(18) : warning C4035: 'main' : no return value
0290デフォルトの名無しさん
2009/03/10(火) 17:33:23テキストがカーニハン&リッチーなんですけど、ここでのハロープログラムは
#include<stdio.h>
main()
{
printf("hello,world\n);
}
と、とてもシンプルなんですけど、ネットを見ると
#include <stdio.h>
int main(void)
{
printf("Hello, World!\n");
return 0;
}
になっています。要するに
#include <stdio.h>
int hello(void);
main()
{
hello();
}
int hello(void)
{
printf("Hello, World!\n");
return 0;
}
というのが合わさったものと考えていいのでしょうか?
今コンパイラがある環境のPCからじゃないので、
上のプログラムでコンパイルされるかすら分からないのですが・・・。
全然理解仕切れていないのでもう少し文字列について辺りを勉強し直そうと
思います
atoi()は、使っていて自分には荷が重い関数かもしれないと思ったので
「strcmp()」を使うことにしました。
まだ「strcmp()」も勉強不足で理解していないのでそこも勉強し直しの
範囲に入りますが。
今回、漸く自分の勉強課題が見えてきたような気がします。
>>288さんの言葉を励みにして頑張りたいと思います。
0292デフォルトの名無しさん
2009/03/10(火) 17:54:12そして完成したファイルがコマンドプロンプトで実行されるんですけど
GUIってどうやって付けるんですかね、タダでやりたいんですけど
0293デフォルトの名無しさん
2009/03/10(火) 17:58:41それでコンパイルは通る。けど、K&Rはそういう意図で書いてるわけではない。
本来mainの戻り値は必ずintなので、厳密に文法どおりなのはネットのほう。
(戻り値をintと明記し、引数をvoidと明示し、0を返す)
K&Rのほうは警告オプション付でコンパイルすると
「戻り値の型が書いてないから勝手にintにするぜ」とか
「returnがないぜ」とか警告が出るはず。
K&Rはおそらく「一番はじめの入門だから、できるだけ例は短いほうがいいに決まってる」
ぐらいの気持ちでそう書いたんじゃないのか。信者には別の言い分があるのかもしれんが
0294デフォルトの名無しさん
2009/03/10(火) 18:03:27あれは他の言語をばりばり使っている人のための
「C言語仕様確認書」みたいなものであって
戻り値も知らないような初心者には難しい。
0295デフォルトの名無しさん
2009/03/10(火) 18:08:12だから、間違ってはないはず…
記憶が曖昧なんであまり当てにしないでくれ
不親切なのには同意するが
0296デフォルトの名無しさん
2009/03/10(火) 18:13:43なぜなら main が戻す値をどう扱うかが環境依存なので。
0297デフォルトの名無しさん
2009/03/10(火) 18:14:42#include <stdio.h>
int main()
{
int turn, i, ch;
char pass[5];
for (turn = 0; turn < 3; turn++) {
printf("パスワードを入力してください>");
for (i = 0; i < 4; i++) {
ch = _getch();
if (ch == EOF) return 2;
printf("*");
pass[i] = ch;
}
printf("\n");
pass[i] = '\0';
if (strcmp(pass, "1994") == 0) {
printf("Ok\n");
return 0;
}
}
printf("NG\n");
return 1;
}
0298デフォルトの名無しさん
2009/03/10(火) 18:16:04ありがとうございます。
学校で押し付けられたテキストがK&Rだったので・・・。
ネットを参考にしたら何か違うぞ?ってずっと思ってました。
main()は不可侵な関数だとてっきり・・・。
明日学校でガッツリと関数の勉強します。
K&R以外のテキストで・・・。
C言語って難しいっすね。
0299デフォルトの名無しさん
2009/03/10(火) 18:17:51補足ありがとうございます。
戻り値とかもまだまだあやふやですが頑張ります。
0300デフォルトの名無しさん
2009/03/10(火) 18:18:56その後に仕様ができたんで、「K&Rが仕様どおりでない!」
ってのはある意味あってるけどお門違いかもしらん
0301デフォルトの名無しさん
2009/03/10(火) 18:25:18K&Rを知らずに 僕等は育った
プログラマになって 歩き始める
オブジェクト指向を くちずさみながら
僕等の名前を 覚えてほしい
K&Rを知らない 子供たちさ
0302デフォルトの名無しさん
2009/03/10(火) 18:37:040303デフォルトの名無しさん
2009/03/10(火) 18:41:13「いちいち」もなにもmainは一個しかないだろうが…
暗黙の宣言やらなんやらで警告出まくりなのに
コンパイル通ってるんだからよしとするヤツのほうがきついわ
0304デフォルトの名無しさん
2009/03/10(火) 18:43:17main()
void main()
int main()
0305デフォルトの名無しさん
2009/03/10(火) 18:45:430306デフォルトの名無しさん
2009/03/10(火) 18:47:080307デフォルトの名無しさん
2009/03/10(火) 18:59:46http://www.j-cast.com/2009/03/10037360.html
0308デフォルトの名無しさん
2009/03/10(火) 19:17:140309デフォルトの名無しさん
2009/03/10(火) 20:03:53main関数への引数がないのであれば、C言語では int main(void)
C++では int main() voidを書かなくて良いとのこと。
また、main関数はint型の戻り値とのこと。あくまでも準拠。
0310デフォルトの名無しさん
2009/03/10(火) 20:20:11個人スタイルの押し付けをしていたら、キリがない。そこんと、よろしくー
0311デフォルトの名無しさん
2009/03/11(水) 09:26:130312デフォルトの名無しさん
2009/03/11(水) 10:46:43ANSI、ISOでは標準スタイルとして提唱している。ただし、
main関数内でその変数を用いていない場合、警告が出るので
何事も必要に応じて適切に。以上。
0313デフォルトの名無しさん
2009/03/11(水) 11:40:53めんどいからint ac,char *av[]って書いてる。
あとchar **argvって書くべきって意見も昔聞いた。
0314デフォルトの名無しさん
2009/03/11(水) 11:53:570315デフォルトの名無しさん
2009/03/11(水) 12:03:58覚えてる限りでいいからkwsk
俺も最初は**で書いてたけど、
mainの中で結局
for (i = 0; i < argc; i++) {
argv[i];
}
とかして[i]でアクセスするから、
*argv[]のほうが素直だと今は思ってる。
0316デフォルトの名無しさん
2009/03/11(水) 12:09:28データが連続していることを連想しやすいように[]を使うと言う意見もあるが、
argvのようにポインタの指す先が連続していて更にその中身のポインタが連続していることを表現できるわけじゃないし。
>>315
例えばstrcpy()のような関数を自分で実装するとしたら
char * strcpy(char dest[], char const src[]);と書くの?
私は素直にchar * strcpy(char * dest, char const * src);と書くが。
0317デフォルトの名無しさん
2009/03/11(水) 12:30:38それはよくわからんが、
char *p;なら *(p + i)などという操作をイメージし、
char a[];なら a[i]という操作をイメージするという程度。
配列やポインタを渡す関数のパラメータは、
ポインタで統一して書いてる。
ポインタであるのに配列であるかのような書き方は嫌だ。
そういう意味では、mainのargvだけ特別扱いしてることになる。
同様の例でもmainじゃないとchar **ppとしてる。
mainのときは用途が>>315に書いたように定型化してるというか、
argcを参考にargv[i]とするのを尊重してやりたいというか。
0318デフォルトの名無しさん
2009/03/11(水) 12:35:50よく判らんのだが、まさかとは思うが*(p + i)なんて本当に書くの?
argv[i]と書くのと同様に、件のstrcpy()の例ならsrc[index]という書き方になると思うのだけれど。
# 細かい言い訳は兎も角、main()だけは別扱いと言うことなら未だ理解できるが。
0319デフォルトの名無しさん
2009/03/11(水) 12:49:43p[ i ]は *(p + i)のシンタックスシュガーだし
0320デフォルトの名無しさん
2009/03/11(水) 12:50:07範囲がargcでわかってるからしたいこと。
そうでないときゃ、for (p = src; *p != '\0'; p++)としたりするでしょ。
あくまで[i]でやりたいならstrlenで一回文字列を調べてから、
for (i = 0; i < len; i++)とするでしょ。
上記のstrcpyだって、
char *strcpy(char *d, char *s) {
while ( *d++ = *s++);
return d;
}
ていうのもある。
長さを先に測りたい人は[i]すればよろし。
長さをパラメータで与えたい人は(int len)でも渡せばよろし。
ポインタでどうこうやるときは、つねに*(p + i)しなくたっていい。
0321なんだかなぁ……
2009/03/11(水) 12:53:46いやだから、for (int index = 0; src[index] != '\0'; ++index)とは書かないの?
なんで? >319の事実があるのに? 某組み込み系のガイダンスだとポインタ演算禁止なのに?
長さを先に測りたいなら[i]ってどんな理屈? 長さを先に測ってから*(p + i)しちゃいけないの?
0322デフォルトの名無しさん
2009/03/11(水) 13:10:39>321もいい加減構うのやめとけ。
0323デフォルトの名無しさん
2009/03/11(水) 13:24:420324デフォルトの名無しさん
2009/03/11(水) 13:39:490325デフォルトの名無しさん
2009/03/11(水) 13:41:360326デフォルトの名無しさん
2009/03/11(水) 13:59:100327デフォルトの名無しさん
2009/03/11(水) 14:14:090328デフォルトの名無しさん
2009/03/11(水) 15:00:160329デフォルトの名無しさん
2009/03/11(水) 15:23:08int main( );
または、次の引数も使えます。
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
0330デフォルトの名無しさん
2009/03/11(水) 15:34:10windowsでVisual Studio 2005を使用しています。
過去に作ったコンソールアプリケーションを編集しようと思ったのですが
不幸なことに.hファイルと.cppファイルを消してしまったために
編集ができない状態です。現状ではobjファイルが残っており、
デバッグコマンドなどでプログラムを動かすことはできるものの、
どうしても元のソースファイルを手に入れる必要があるのですが
objファイルからcppファイルに逆コンパイルする方法はありますでしょうか?
0331デフォルトの名無しさん
2009/03/11(水) 15:51:29ありません。
0332デフォルトの名無しさん
2009/03/11(水) 15:55:41重要なのは一貫性を保つことであって、些細なことは個人の自由としている。
他人のコードに手を入れるときは、その人の流儀に従うべきで、
自分の宗教を持ち込んで後の読み手のリズムを狂わせてはいけない、とある。
0333デフォルトの名無しさん
2009/03/11(水) 16:26:23objも消しちゃえば諦めがつくぞ
すっきりしてまた一から出直そう
0334デフォルトの名無しさん
2009/03/11(水) 16:31:44objファイルはリンク前のコンパイル済みファイルなので
逆アセでもできそうな気がするけど。
0335デフォルトの名無しさん
2009/03/11(水) 16:39:07どうしても諦めがつかなくてorz
>>334
確かに、逆コンパイルというと語弊があったかもしれません…
なんとか逆アセンブル出来ませんかね?orz
0336デフォルトの名無しさん
2009/03/11(水) 17:15:26逆アセンブルならできるよ、まぁお前に読めるとは思えないけどさw
いっぱいあるから探してみなよ
確実に1から書き直したほうが早いだろうが
0337デフォルトの名無しさん
2009/03/11(水) 18:03:230338デフォルトの名無しさん
2009/03/11(水) 18:27:51あまりに酷いコードの時はそうも言ってられないw
0339デフォルトの名無しさん
2009/03/11(水) 19:45:07逆アセンブラならvisual studioについてるよ。
0340デフォルトの名無しさん
2009/03/11(水) 22:44:10案外、オートバックアップのサーバ上に残っていたりしてw
0341デフォルトの名無しさん
2009/03/12(木) 09:08:14C言語では、そういったお手軽なライブリなどは、整備されていないのでしょうか?
LL言語、シェルスクリブトが適している分野をCで書くのは、どうなんでしょうか?
Cに偏った使い方をするなら、binコマンドなどのcoreutiltyのmanやソースを読んで、巧みに使うのがいいんでしょうか?
住めば都で慣れれば、C言語での保守も苦では、なくなるものなのでしょうか?
0342デフォルトの名無しさん
2009/03/12(木) 10:57:37Savitzky-GolayアルゴリズムのCサンプルコードとかないですか?
0343デフォルトの名無しさん
2009/03/12(木) 12:19:52NumericalRecipesにある。
ttp://www.nrbook.com/a/bookcpdf/c14-8.pdf
尤も、これ見ただけで実装できるかどうかは知らんが。
0344デフォルトの名無しさん
2009/03/12(木) 14:11:0543,2,21,23,みたいなテキストなのですが、質問があります
・テキスト中のスペースは無視されるのですか?
・メモリについてmallocとか全くわかってないのですが使わないとかなりヤバイですか?
0345デフォルトの名無しさん
2009/03/12(木) 14:29:37・無視されるように読めば無視される。
Ex.:scanf()系, atoi()
・使わなくてもできなくはないが、どっちみちポインタの扱いには慣れが必要なので、そういう意味ではやばい。
つーか、課題か何かでなければ言語の選択の段階で間違っている。
0346デフォルトの名無しさん
2009/03/12(木) 14:33:550347デフォルトの名無しさん
2009/03/12(木) 14:45:09C#なら正規表現が使えるからかなり楽になると思うが
一般にはこの手の作業にはスクリプト系の言語がより向いている
まあ、CとC#の選択なら、最初からC#のスレで聞いとけって話だ
0348デフォルトの名無しさん
2009/03/12(木) 14:46:58Cでも正規表現使えると思ってますたw
ありがとうございました
0349デフォルトの名無しさん
2009/03/12(木) 14:55:57Cの場合、C#みたいに標準で用意されていないの。
0350デフォルトの名無しさん
2009/03/12(木) 14:59:550351デフォルトの名無しさん
2009/03/12(木) 15:01:12今できたけど…「 ./a.out < ファイル名 」で使ってみて
#include <stdio.h>
#include <ctype.h>
int main()
{
int c;
int max = 0, num = 0;
while((c = getchar()) != EOF){
if(isdigit(c)) num = num * 10 + c - '0';
else {
max = (num > max) ? num : max;
num = 0;
}
}
max = (num > max) ? num : max;
printf("max = %d\n", max);
return 0;
}
0352デフォルトの名無しさん
2009/03/12(木) 15:15:02適当にコピペしたらインクルードやgetcharが使えなかった
0353デフォルトの名無しさん
2009/03/12(木) 15:25:25移植は手前の仕事
0354デフォルトの名無しさん
2009/03/12(木) 15:28:520355デフォルトの名無しさん
2009/03/12(木) 15:43:030356デフォルトの名無しさん
2009/03/12(木) 15:46:180357デフォルトの名無しさん
2009/03/12(木) 19:42:090358デフォルトの名無しさん
2009/03/12(木) 19:46:460359デフォルトの名無しさん
2009/03/12(木) 19:47:380360デフォルトの名無しさん
2009/03/12(木) 19:51:350361デフォルトの名無しさん
2009/03/12(木) 19:59:110362デフォルトの名無しさん
2009/03/12(木) 20:19:56>>342
numerical recipes in CやC++に載ってる。C++もベタに書いてあるので、
++の意味はほとんど無いw あとはqtiplotだっけ? originのfree implementationの
ソース読むとか、MSDNにも解説があるな。しかし簡単な式だから、すぐ作れるだろ
携帯からなので、PCでググればもっと探せそう。
0363デフォルトの名無しさん
2009/03/13(金) 13:46:55>343
携帯だとすぐ下のレスも見られないのか?
つーか、元質はCだと書いているのさえ見えてないのか。
0364デフォルトの名無しさん
2009/03/13(金) 18:01:41>>343はPCのFoxit readerでさえ読み込めないんだけど?
どうせ貼るなら、こっち貼れ
ttp://www.fizyka.umk.pl/nrbook/c14-8.pdf
0365デフォルトの名無しさん
2009/03/13(金) 18:55:28>Foxit readerでさえ
「でさえ」?
そりゃ Adobe Reader で読めなかったときに使う言葉だろ。
0366デフォルトの名無しさん
2009/03/13(金) 19:15:04>>363は携帯で読めないのかって書いてるじゃん。
まあもちろん携帯のadobe readerでも読めない訳だが。
0367343
2009/03/13(金) 19:21:33普通にIE+AcrobatReaderで見えるけど。怪しげなクローンより本家の方がいいと思ったんだけどな。
# そして私は>363ではない。
0368デフォルトの名無しさん
2009/03/13(金) 20:26:31なんか、変なプラグイン入れろって出る。
IEからでも。
0369デフォルトの名無しさん
2009/03/14(土) 03:35:05どうせnumeric recipiは信用できないからいいけど。
0370デフォルトの名無しさん
2009/03/14(土) 18:25:38ネット上のサンプルをコピペしたコードが多々あって、勝手にオープンソースにしていいのかわかりません。
ライセンス表記がされていないものも多いので確認のしようがないのです。
こういう場合でも勝手にBSDライセンスとか付けて配布してしまっていいのでしょうか?
出所はもちろん明記するつもりですが。
0371デフォルトの名無しさん
2009/03/14(土) 18:31:470372デフォルトの名無しさん
2009/03/14(土) 18:55:18コードを書けないのなら無茶な事しない。
ネット公開されてれば、使ってよいの判断ですが、
それでも、自身でコードを書き直して公開するのが本当でしょう。
動けば良いだけのコードをオープンソースですか、違うでしょ
0373デフォルトの名無しさん
2009/03/14(土) 21:00:58でも反面、せっかく既にあるコードまで自分で書き直さなきゃならないのか?とも思うのです。
しかもサンプルの書き方が一番スマートなのに、あえて別の書き方をするのも無意味に思えてなりません。
サンプルを利用して書くのは普通のことだと思いますが、皆どうしているのでしょうか。
とりあえず今回はクローズドでいきます。ありがとうございます。
0374デフォルトの名無しさん
2009/03/14(土) 21:54:26もともとライセンス表記もせずパブリックドメイン同然で公開しているコードなら
コピペのままではなく、君がそのコードを理解して、作りなおせば問題ないだろ。
出所も明かす必要無し。
コードって作り直せないくらい長かったり何回だったりするの?
0375デフォルトの名無しさん
2009/03/14(土) 21:56:480376デフォルトの名無しさん
2009/03/14(土) 22:21:17いや逆に、数十行程度のサンプルが多くて直しようがないんです。
そのまで洗練されているのでいじると無駄にこんがらがります。
変数名やカッコの書き方を変えるといったしみったれたことしかできず…。
0377デフォルトの名無しさん
2009/03/14(土) 22:40:02サンプルコードをかき集めた場合は、いろんな流儀で書かれているわけだから、自分の流儀に書き直したほうがメンテしやすくなるぞ。変数名や括弧を直すだけでも効果的だ。
そうすれば改良できるところが見えてくるぞ。
0378デフォルトの名無しさん
2009/03/14(土) 22:44:48小さいところでも直していけばいいのですね。そういう方向でいってみます。
0379デフォルトの名無しさん
2009/03/14(土) 22:59:23その程度だったら記憶を手繰りながら書けるべ。
0380デフォルトの名無しさん
2009/03/14(土) 23:05:010381デフォルトの名無しさん
2009/03/14(土) 23:07:190382デフォルトの名無しさん
2009/03/14(土) 23:09:050383デフォルトの名無しさん
2009/03/14(土) 23:18:43ほとんど再利用されることはない
参考にすることはあっても
0384デフォルトの名無しさん
2009/03/14(土) 23:21:500385デフォルトの名無しさん
2009/03/14(土) 23:26:410386デフォルトの名無しさん
2009/03/14(土) 23:35:47結局、作り直して使ってるだろ
0387デフォルトの名無しさん
2009/03/15(日) 00:52:540388デフォルトの名無しさん
2009/03/15(日) 01:06:400389デフォルトの名無しさん
2009/03/15(日) 01:16:570390デフォルトの名無しさん
2009/03/15(日) 02:17:37流用者が理解するのを諦める難解な操作を
程よく織り込むのがプロの仕事だ
0391デフォルトの名無しさん
2009/03/15(日) 02:30:080392デフォルトの名無しさん
2009/03/15(日) 08:58:28「何それ?だっせーソース」
とか笑われたことがあるんだろ
0393デフォルトの名無しさん
2009/03/15(日) 11:41:410394デフォルトの名無しさん
2009/03/16(月) 14:12:14それを11桁の文字型として出力しなければいけないのですが(余った桁はスペースで埋める)
下記のようにsprintf関数を使ってH_KOJIN_IDから、ファイル書き出し用構造体outの項目KOJIN_IDに
セットするときに、現状のままだと余った桁に0が入ってしまいます。
データセット部
sprintf(out.KOJIN_ID,"%11.11ld",H_KOJIN_ID);
余った桁に半角スペースが入るようなsprintf指定方法はありませんか?
0395デフォルトの名無しさん
2009/03/16(月) 14:24:220396デフォルトの名無しさん
2009/03/16(月) 14:43:450397デフォルトの名無しさん
2009/03/16(月) 14:46:47間違えて%11.11dで試しましたが、%11dだけにしたら
できました。
ありがとうございました。
0398デフォルトの名無しさん
2009/03/16(月) 14:51:24マルチすんなゴミ
0399デフォルトの名無しさん
2009/03/17(火) 00:50:51教えてください
0400デフォルトの名無しさん
2009/03/17(火) 00:55:300401デフォルトの名無しさん
2009/03/17(火) 00:56:09だいたい相場はかわらんさ
0402デフォルトの名無しさん
2009/03/17(火) 01:00:511800-4500円
0403デフォルトの名無しさん
2009/03/17(火) 02:17:46ただし、○冊セットの中の1冊のお値段、というオチが付くことも多そう。
0404デフォルトの名無しさん
2009/03/17(火) 02:49:33>>403不味い本買ってんじゃねぇか?
0405デフォルトの名無しさん
2009/03/17(火) 03:12:490406デフォルトの名無しさん
2009/03/17(火) 03:32:140407デフォルトの名無しさん
2009/03/17(火) 04:00:400408デフォルトの名無しさん
2009/03/17(火) 06:25:560409デフォルトの名無しさん
2009/03/17(火) 06:27:570410デフォルトの名無しさん
2009/03/17(火) 06:30:290411403
2009/03/17(火) 10:03:10あー、C++であったかどうかは分かんない。
でもVC++とかだと何シリーズか見かけた気がする。
0412デフォルトの名無しさん
2009/03/17(火) 16:30:390413デフォルトの名無しさん
2009/03/17(火) 18:27:14template<typename T>
class test {
public:
test();
void _inc(T n);
void _dec(T n);
private:
T m_n;
};
//////////////////////////////// a.cpp
#include "a.h"
template<typename T>
test<T>::test() : m_n(0) { }
template<typename T>
void test<T>::_inc(T n){ return m_n++; }
template<typename T>
void test<T>::_dec(T n){ return m_n--; }
test<int> aaa;
0414デフォルトの名無しさん
2009/03/17(火) 18:28:32extern test<int> aaa;
#include <stdio.h>
#include "a.h"
void main(void){
aaa._dec(1);
}
externで宣言してるのにリンク時に未解決になります。
どこに誤りがあるのでしょうか?
0415デフォルトの名無しさん
2009/03/17(火) 18:32:13そういうもんだと思っておけばいい
詳しく知りたければ export キーワードあたりで自分で調べな
0416デフォルトの名無しさん
2009/03/17(火) 18:40:22ありがとうございます
無事解決しました
0417デフォルトの名無しさん
2009/03/17(火) 18:50:20なにもつけなくても実装が別ファイルにあるなら、それはそれで問題ないのじゃね?
0418デフォルトの名無しさん
2009/03/17(火) 18:55:14宣言が必要なのよ。
0419デフォルトの名無しさん
2009/03/17(火) 19:09:020420デフォルトの名無しさん
2009/03/17(火) 19:15:110421デフォルトの名無しさん
2009/03/17(火) 19:30:180422デフォルトの名無しさん
2009/03/17(火) 19:32:53ありそうで困る
0423デフォルトの名無しさん
2009/03/17(火) 19:33:38実装部分は、コンパイルできなくない?リンク時に、改めてコンパイルし直すのか?
exportって、どう言う仕組みで実現してるの?
0424デフォルトの名無しさん
2009/03/17(火) 19:35:550425デフォルトの名無しさん
2009/03/17(火) 19:36:16> リンク時に、改めてコンパイルし直すのか?
そういうこと。
それやってというお願いするキーワードがexport。
まあg++とかVC++とかの有名どこが無視しているから、事実上死に設定だけど。
0426デフォルトの名無しさん
2009/03/17(火) 23:54:312010年になると言うことかw
0427デフォルトの名無しさん
2009/03/17(火) 23:56:03explicit instantiationを知らないなら
テンプレート関数の明示的インスタンス生成 - akihiko’s tech note
http://d.hatena.ne.jp/aki-yam/20081129/1227982516
ここが分かりやすいよ。必読。
0428デフォルトの名無しさん
2009/03/18(水) 00:53:11C++0xa
0429デフォルトの名無しさん
2009/03/18(水) 07:15:29GCC 3 で
0430デフォルトの名無しさん
2009/03/18(水) 07:53:28前定義識別名 __func__
0432デフォルトの名無しさん
2009/03/18(水) 17:00:28構造体の配列に文字を格納したところ、デバッグでみると
その場所+4つ先に格納されているのですがどういったことなのでしょうか。
以下は新規にプロジェクトを作成し、構造体とそれに代入しただけのソースの一部です。
struct TEST{
char testes[10];
};
struct TEST ttt;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
ttt.testes[0]='A';
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}
上記の例だと[0]にAが入るはずなのですが、ブレークポイントを
置いて、デバッグでみると[4]にAが入っているように見えます。
実際は[0]にAが入っているので、動作については問題なかったです。
0433デフォルトの名無しさん
2009/03/18(水) 17:44:58リビルドしてみてないとか言わないよな。
0434デフォルトの名無しさん
2009/03/18(水) 18:07:27C++とC++/.CLIは名前が似てるだけで別言語。
0435デフォルトの名無しさん
2009/03/18(水) 18:16:53でも質問の内容自体はVisual C++固有のことだから、
もし誘導するとしたら、Visual C++かVisual Studioスレがふさわしいと思う。
0436デフォルトの名無しさん
2009/03/18(水) 18:32:57ありがとう。
でも、コンパイル"後"定数に成るみたいで微妙に目的と合致しませんでした。
0437デフォルトの名無しさん
2009/03/19(木) 20:04:24式の構文エラー(関数 main )と出ます。
#include<stdio.h>
int main(void)
{
int english;
printf("点数を入力してください\n");
scanf("%d",&english);
printf("英語 %d点\n",english);
if(english=>80)
{
printf("良くできました!");
}
return 0;
}
if文を用いる場合は必ずelseでそれ以外の時の処理を書かなければならないのでしょうか?
0438デフォルトの名無しさん
2009/03/19(木) 20:07:100439デフォルトの名無しさん
2009/03/19(木) 23:37:58他にも==を=と間違えたりべき乗に^を使っちゃったり。
BASICを習得してるといろいろ困るよねオマンコ
0440デフォルトの名無しさん
2009/03/20(金) 00:15:49数学では
>=は
大なりイコール
って発音するじゃん。それで覚えれば大丈夫。
0441デフォルトの名無しさん
2009/03/20(金) 00:19:51powとかすぐ出てこねーよw
0442デフォルトの名無しさん
2009/03/20(金) 00:22:170443デフォルトの名無しさん
2009/03/20(金) 00:27:05プログラムしばらくやってるやつは、悩むところじゃないだろ。
プログアム初心者は、悩む以前に分からない部分調べるか、誰かに聞くだろ。
0444デフォルトの名無しさん
2009/03/20(金) 01:56:47そして>437にループ
0445デフォルトの名無しさん
2009/03/20(金) 09:19:460446デフォルトの名無しさん
2009/03/20(金) 17:37:43数学に、そんな記号ない。縦に並べたのなら知ってる
0447デフォルトの名無しさん
2009/03/20(金) 17:41:56数学では
≧は
大なりイコール
って発音するじゃん。それで覚えれば大丈夫。
0448デフォルトの名無しさん
2009/03/20(金) 17:50:53似ているようで違う表記をするために間違えるのだから、
それは意味ないのじゃね?
0449デフォルトの名無しさん
2009/03/20(金) 17:58:500450デフォルトの名無しさん
2009/03/20(金) 18:03:35まず間違えないな
0451デフォルトの名無しさん
2009/03/20(金) 18:10:040452デフォルトの名無しさん
2009/03/20(金) 18:22:15==と書くべきところを=にして悩む
少しリハビリすると大丈夫だけど
0453デフォルトの名無しさん
2009/03/20(金) 18:44:24だから「大なりイコールって考えればわかりやすいでしょ」といわれても
頭の中でもそんな風に考えたことないし・・って感じ
0454デフォルトの名無しさん
2009/03/20(金) 19:09:25そりゃ問題だな。
0455デフォルトの名無しさん
2009/03/20(金) 19:21:110456デフォルトの名無しさん
2009/03/20(金) 19:23:400457デフォルトの名無しさん
2009/03/20(金) 19:26:300458デフォルトの名無しさん
2009/03/20(金) 19:26:530459デフォルトの名無しさん
2009/03/20(金) 19:48:21< lt
>= ge
<= le
== eq
!= ne
0460デフォルトの名無しさん
2009/03/20(金) 20:52:55見よ、これがゆとり教育の被害者である
0461デフォルトの名無しさん
2009/03/20(金) 21:22:320462デフォルトの名無しさん
2009/03/20(金) 21:54:230463デフォルトの名無しさん
2009/03/20(金) 22:05:20未満<−>???
0464デフォルトの名無しさん
2009/03/20(金) 22:06:270465デフォルトの名無しさん
2009/03/20(金) 22:06:440466デフォルトの名無しさん
2009/03/20(金) 22:06:540467デフォルトの名無しさん
2009/03/20(金) 22:07:320468デフォルトの名無しさん
2009/03/20(金) 22:10:47●→]
0469デフォルトの名無しさん
2009/03/20(金) 23:01:44反対の意味で使ってるなら間違い
0470デフォルトの名無しさん
2009/03/20(金) 23:44:360471デフォルトの名無しさん
2009/03/20(金) 23:47:100472デフォルトの名無しさん
2009/03/21(土) 04:16:010473デフォルトの名無しさん
2009/03/21(土) 13:23:590474デフォルトの名無しさん
2009/03/21(土) 21:28:220475デフォルトの名無しさん
2009/03/21(土) 22:24:420476デフォルトの名無しさん
2009/03/22(日) 00:02:16FORTRANはすっこんでろ
0477デフォルトの名無しさん
2009/03/22(日) 00:07:150478デフォルトの名無しさん
2009/03/22(日) 02:07:37具体的にC言語ファイルをそのまま.cppにしてエラーが起こる例ってどんなのあります?
例えばmain関数内でmain関数を使うとエラーになるようですが。(でも常用外だから普通は問題にならない)
(1) C++ではエラーが出る
(2) Cで稀に使われるが、C++で別の動きをする (想定外動作)
無理して作れば色々出てきそうですが・・・・
0479デフォルトの名無しさん
2009/03/22(日) 02:19:01main(c){}
0480デフォルトの名無しさん
2009/03/22(日) 02:23:36void*をキャストする必要があるかどうかだろ。
char *p = malloc(...);
が通るかどうか。
0481デフォルトの名無しさん
2009/03/22(日) 02:25:31C++が作られていくときに、新たなキーワードの導入は常に強い反対があったと聞く。
0482デフォルトの名無しさん
2009/03/22(日) 02:32:450483デフォルトの名無しさん
2009/03/22(日) 02:33:38C99のことだと思うけど可変長配列とかC++に無い
あとintの省略もできないな
0484デフォルトの名無しさん
2009/03/22(日) 02:33:56oldとnewの両方を一時変数名にするとか。
0485デフォルトの名無しさん
2009/03/22(日) 02:38:49extern のついてない const なグローバル変数を定義して
ほかのソースからextern宣言して見てるとき
0486デフォルトの名無しさん
2009/03/22(日) 16:49:25無理に予約語を増やさないようにするあまり、同じ予約語で少しずつ違った意味に使うの多くない?
(例 static, template)
0487デフォルトの名無しさん
2009/03/22(日) 18:35:340488デフォルトの名無しさん
2009/03/22(日) 19:30:32C++ の規格の付録 C にまとめられてるよ
0489デフォルトの名無しさん
2009/03/23(月) 09:24:500490デフォルトの名無しさん
2009/03/23(月) 12:37:17struct foo {int bar;} foo; // 例えばこれがエラーになる
0491デフォルトの名無しさん
2009/03/24(火) 08:18:48char hoge[4] = "ABCD";
がC言語だとhoge[0]='A',hoge[1]='B',hoge[2]='C',hoge[3]='D'でC++だとエラーになるんだっけ?
char hoge[5] = "ABCD";
の場合はCでもC++でも同じhoge[0]='A',hoge[1]='B',hoge[2]='C',hoge[3]='D',hoge[4]='\0'だよね。
0492デフォルトの名無しさん
2009/03/24(火) 18:04:390493デフォルトの名無しさん
2009/03/24(火) 18:05:16超お勧め。っていうか、一度読んでみると歯が全部抜け落ちる。
0494デフォルトの名無しさん
2009/03/24(火) 18:07:30早速見てくる
0495デフォルトの名無しさん
2009/03/24(火) 18:09:170496デフォルトの名無しさん
2009/03/24(火) 18:12:19Effective C++とかExceptional C++の最新の要約が詰まってる。
わからない場所=自分の理解が足りていない場所
という今後の学習指針にもなる。
読むと腸内がすっきりする。
0497デフォルトの名無しさん
2009/03/24(火) 18:21:11とても参考になります
やはり値段が高いほうが内容も詰まってるんでしょうね
0498デフォルトの名無しさん
2009/03/24(火) 18:39:57amazonで感想を見てみたんですけど・・・・
中級者以上を対象としているみたいな感じなのがありました
本当にこれで大丈夫でしょうか・・?
0499デフォルトの名無しさん
2009/03/24(火) 19:03:58==
0500デフォルトの名無しさん
2009/03/24(火) 19:07:13基本構文だとか継承だとかテンプレートの使い方だとか
そういう基礎的なのは習得してる人向けっていう程度
だが、そんなに難しくはないよ
コード付でかなり親切な説明がされてるし
0501デフォルトの名無しさん
2009/03/24(火) 19:08:34入門書の次に読まなければならないレベルの本だよ。
この本を読まずに「中級者」を名乗ること自体がおこがましいよ。
この本を読んだことのない人は
個人的なプログラムしか組む資格がないといってしまっていいくらいに
基本的な事柄について書かれた本だよ。
0502デフォルトの名無しさん
2009/03/24(火) 20:29:39でも初心者レベルではないと思う。
「中級者になりたい初心者なら必読」という意味では初心者向けだな。
入門者の場合は意味不明だと思うが、初心者なら説明が丁寧でたとえがすばらしく分かりやすいからオススメ。
0503デフォルトの名無しさん
2009/03/24(火) 20:32:17EffectiveC++に(より洗練された形で)書かれていたと言っていた。
要は、EffectiveC++を最初から読んでいれば半年間無駄にしなかったのにね、と。
0504デフォルトの名無しさん
2009/03/24(火) 20:39:530505デフォルトの名無しさん
2009/03/24(火) 20:40:06読まなくても別に中級者になれるけどな
0506503
2009/03/24(火) 21:59:39>Cのファイルアクセス程度までしか勉強していないようなヤツでもわかるものかしら
C++の入門者だから無理じゃないかな?
クラスって何よ?継承って何だよ?テンプレートとは???
っていう感じになっちゃってまともに読み進められないと思う。
>>505
確かにそう言うことになるな。
別に全員が読んでるわけじゃないだろうし。
0507デフォルトの名無しさん
2009/03/24(火) 22:45:56読んで理解できなければ、理解できるようになってからまた読めばいい。
よって常にお薦め。
いつまでも理解できないならそいつはC++に向いてない。
0508デフォルトの名無しさん
2009/03/24(火) 23:00:50この本自体は中級者向けじゃないよ。
この本に書かれている知識を習得していない人は
中級者じゃなくて単なるカスプログラマだから。
何度も書くけど、入門書を読んだあとに読むべき本だよ。
0509デフォルトの名無しさん
2009/03/24(火) 23:09:560510デフォルトの名無しさん
2009/03/24(火) 23:22:000511デフォルトの名無しさん
2009/03/24(火) 23:28:42日常生活なら滅多に使わない侮蔑を含む日本語が飛び交う場所だからな。
むしろこのスレはまだマシな方じゃね?
0513デフォルトの名無しさん
2009/03/25(水) 00:43:42少なくとも初心者向けのC++解説本は読んでることが前提。
ちゅか、Effective C++を読めば、C++のプログラムに
Cのテクニックはあまり(ほとんど?)役に立たないことがわかる。
Cの知識は無用ともいえる。
0514デフォルトの名無しさん
2009/03/25(水) 00:45:12Cで培った危険を予知する感覚というか知識は必要じゃね?
まあC++のソースを書いていてprintfなんて書こうものならもうそいつのソースは信用できないな。
0515デフォルトの名無しさん
2009/03/25(水) 00:46:23なんてことを言う奴は信用しないことにしている。
0516デフォルトの名無しさん
2009/03/25(水) 01:00:110517デフォルトの名無しさん
2009/03/25(水) 01:09:59サッターは「安全装置のない車を運転するほうが楽なのといっしょだ」みたいな主旨のことを書いてた。
0518デフォルトの名無しさん
2009/03/25(水) 01:27:360519デフォルトの名無しさん
2009/03/25(水) 01:35:46C++内の printf は早々に駆除されてたと思う。
初めて見たとき もうちょっとマトモナやり方があるだろう?と感じた。
0520デフォルトの名無しさん
2009/03/25(水) 01:40:010521デフォルトの名無しさん
2009/03/25(水) 01:43:16たとえばClassとかSTLとかは使わにゃ損々なんだが
iostream系のようにCにもある機能は
別に置き換えなきゃならんわけじゃないし
0522デフォルトの名無しさん
2009/03/25(水) 01:46:49極論まであるし遅いしだな
時と場合に応じて使い分ければ良い
0523デフォルトの名無しさん
2009/03/25(水) 02:54:020524デフォルトの名無しさん
2009/03/25(水) 08:12:59返り値への代入を繰り返すってなに?
0525デフォルトの名無しさん
2009/03/25(水) 09:20:24((std::cout << hoge) << moge)
代入じゃねえな。
他は >>519 に同意。
特にシフト演算子のオーバーライドとか、やっちゃ駄目な部類。
0526デフォルトの名無しさん
2009/03/25(水) 12:39:57(stringや複素数はあった)。だからC++の基本機能や、言語概念の説明といった役割が大きかった。
その後、多重継承が追加されて、書式付き入力ストリームと出力ストリームを結合させるなど、
仮想基底クラスの用法を示している。そういう歴史的経緯が判らないと、
微妙に感じるかも知れないけど、自分定義の型拡張やコンパイル時のチェックも効くし、
長く使ってると愛着も湧いたりする。better Cとして使ってる人には不評みたいね。
カレー南蛮そばが来ないので、長文してしまった。
0527デフォルトの名無しさん
2009/03/25(水) 13:36:580528デフォルトの名無しさん
2009/03/25(水) 13:47:060529デフォルトの名無しさん
2009/03/25(水) 14:28:010530デフォルトの名無しさん
2009/03/25(水) 14:53:12std::cout(hoge, fuga, std::endl); とか書けたのにな。
だが、D言語では
Stdout(hoge)(fuga).newline;
0531デフォルトの名無しさん
2009/03/25(水) 15:15:070532デフォルトの名無しさん
2009/03/25(水) 15:58:48じゃあもう要らないですね。obsolete にしましょ。
0533デフォルトの名無しさん
2009/03/25(水) 17:48:520534デフォルトの名無しさん
2009/03/25(水) 18:12:00作ってしまった過去の資産()があるから削っちゃだめだろ iostream
0535デフォルトの名無しさん
2009/03/25(水) 18:32:280536デフォルトの名無しさん
2009/03/25(水) 20:09:120537デフォルトの名無しさん
2009/03/25(水) 20:18:28使われてるのを見たことない。
0538デフォルトの名無しさん
2009/03/25(水) 20:45:35「printf系の脆弱性は、本書執筆時点でも尚、深刻なセキュリティ問題である。」
(中略)
「vararg以外の方法で可変引数をサポートする型安全なライブラリを利用しよう。
例えば、[Boost]のformatライブラリがある。」
Boost C++ Libraries 第2版 p.69
「もしもプログラマが間違った書式指定をしてしまったら(中略)、
printf関数は(中略)、もう何がおきるかわからないトワイライトゾーンへ突入してしまいます」
などなど。
0539デフォルトの名無しさん
2009/03/25(水) 20:46:25俺もDさわってみて、何でC++には可変長引数が配列で取れないのか非常に不思議になった。
すごい便利なんだよな。D1をバックポートしてほしいぞ。
0540デフォルトの名無しさん
2009/03/25(水) 20:49:09別の言語を使ったほうがいい。
目的ごとにぴったりあう言語というものは違うのだから。
0541デフォルトの名無しさん
2009/03/25(水) 20:50:45間違ったプログラムであの世へ行くのはprintfに限らない
間違わなければいいだけ
0542デフォルトの名無しさん
2009/03/25(水) 20:51:43君にはデスマーチとかアジャイルプラクティスとかを読む権利をあげますw
0543デフォルトの名無しさん
2009/03/25(水) 20:54:24C++は厄介ごとはコンパイラにまかすという方針なんだから。
プログラマがすべてを制御できる自身があるなら
Cの方がよっぽど単純で軽快だ。
C++を選択することが最初から間違っている。
0544デフォルトの名無しさん
2009/03/25(水) 21:03:05自分はメイヤーズ先生やサッター先生の言うことに従うわ。
この板にそれ以上の能力の人間が来ているとはとても思えないから。
0545デフォルトの名無しさん
2009/03/25(水) 21:04:01クラスが内部で規定してる構造体に型オーバーロードしたメソッド書いて、クラスの返り値としてその構造体をprintfに食わせたら、
オーバーロードが働かなくて構造体そのものを食いやがった事がある。アドレスぽいものが表示されんの。
表示系だから良かったけどいやなバグだった。
コンパイラはVC9EE。
0546デフォルトの名無しさん
2009/03/25(水) 21:09:15http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9000.txt
0547デフォルトの名無しさん
2009/03/25(水) 22:16:490548デフォルトの名無しさん
2009/03/25(水) 22:24:330549デフォルトの名無しさん
2009/03/26(木) 06:38:13可変長テンプレートマンセー君レベルが当時の最先端だったって事か
0550デフォルトの名無しさん
2009/03/26(木) 13:37:06>>>541みたいな人はC++使う価値ないんだって。
間違いを犯す莫迦にこそ価値がないのでは?
>C++は厄介ごとはコンパイラにまかすという方針なんだから。
いいえ。
コンパイラが余計なことをしないか、常に心配しながら
コードを書き連ねることを
プログラマに強いる方針です。
0551デフォルトの名無しさん
2009/03/26(木) 14:36:00プログラムの知的能力に関わらず、タイプミス等の軽微なミスは起こりうるものだと思うけど。
0552551
2009/03/26(木) 14:37:290553デフォルトの名無しさん
2009/03/26(木) 15:52:50コンピュータを完全にコントロールできる人間は高級言語に頼る必要はない。
高級言語は人間のミスを吸収するために余計なコードを山ほど作るからね。
C++はCよりも遅いしコードも大きいし規則も山ほどある。
その規則の多くはコードを早くしたり小さくしたりするためのものじゃない。
単に間違いをコンパイラが見つけやすくするため。
間違いを犯さないプログラマには無用のものばかり。
0554デフォルトの名無しさん
2009/03/26(木) 16:59:10>>単に間違いをコンパイラが見つけやすくするため。
そうか?
コンパイラにとって正しいけど、プログラマの意図通りにならないことは
C++の方が多いのでは?
0555デフォルトの名無しさん
2009/03/26(木) 17:06:14それは速度とコーディング効率で、プログラマの能力と方針にあわせて、
どちら側を重視する事も出来る。充分に熟練していれば、他の言語よりも高い
バランスで、両立する事も可能。それは全ての言語の、全てのメリットを上回る
意味では無いけどね。現実には機能を散漫に付けすぎて、高いバランスどころの
騒ぎじゃないけど、目標としてはそんなところ。
>>554
どうも設計者が平均的プログラマの能力等を、考慮に入れなかったのでは無いかと予想。
自分で設計しといて、ベテランしか使えねーとか言ってるしねぇ。
0556デフォルトの名無しさん
2009/03/26(木) 17:21:38という仮定が間違ってるんだよ。
なぜなら、間違いを犯す莫迦しかいないから。
間違いを犯さないプログラマなんて一人も存在しないから。
0557デフォルトの名無しさん
2009/03/26(木) 17:28:430558デフォルトの名無しさん
2009/03/26(木) 18:26:47ましてや昼間に書き込んでるネラーなんてなあ?w
0559デフォルトの名無しさん
2009/03/26(木) 18:58:04全員一律に同じレベルの莫迦だということにしないと
自分を保てないというのなら
そういうことにしてもよい。
0560デフォルトの名無しさん
2009/03/26(木) 19:06:06ちなみに、99点も0点もどちらも「間違いを犯す」ことに違いないよ。
100点満点だけが「間違いを犯さない」といえる。
さぁ、ベン図を描いて確認だ!w
0561デフォルトの名無しさん
2009/03/26(木) 19:09:56「間違いを犯すか否か」の話なんだが。
まぁいいか。論理的精密さを求めるような話でもない。
所詮は小さなプライドにしがみついた煽りあいだ。
0562デフォルトの名無しさん
2009/03/26(木) 19:10:19将来メンテすることもないような使い捨てのものしか書かないならそれでいいじゃん
0563デフォルトの名無しさん
2009/03/26(木) 19:13:370564デフォルトの名無しさん
2009/03/26(木) 19:32:38言い換えれば、自分は間違いを犯さないと考えているプログラマは自分のプログラムからバグを見出せない。
0565デフォルトの名無しさん
2009/03/26(木) 19:42:270566デフォルトの名無しさん
2009/03/26(木) 19:53:58ここはム版ですよ?w
0567デフォルトの名無しさん
2009/03/26(木) 20:05:29一週間ぐらい我慢しろよカス
0568デフォルトの名無しさん
2009/03/26(木) 20:21:31すりかえてなんかいねぇよ。
程度問題だろっつってんだよ。
>>556 の「間違いを犯す莫迦」の前に「ひとつでも」てのが付くなら、
そんな頭のおかしい「仮定」なんざ誰がしてるってんだ。
0569デフォルトの名無しさん
2009/03/26(木) 21:47:010570デフォルトの名無しさん
2009/03/26(木) 22:00:27では、次の話題どうぞ。
0571デフォルトの名無しさん
2009/03/27(金) 22:40:22printfを使ってもC++コンパイラは全く警告を出さないからprintfを使うことはC++的に全く問題ないということだよ。
0572デフォルトの名無しさん
2009/03/27(金) 22:44:15その考え方はおかしい
0573デフォルトの名無しさん
2009/03/27(金) 22:57:20実際、Stroustrupはいろんなことについて「これに警告を出さないコンパイラが多いのはがっかりだ」とか言ってるな。
D&Eに書いてある。具体的な事例はあんまり覚えてないが。
0574デフォルトの名無しさん
2009/03/27(金) 23:10:50そうすると、割り込むみたいなことは許されないんだよね?
例えばfor文のループ中にキーを押したらそのときのtimeを取れるみたいなのは無理?
for( )
・・・・・・・・・
if(getchar
見たいなのじゃなくて、for文でゲームみたいなの動かしたいんだけど、
その途中でどんな途中でもtimeが取れるみたいなことは出来ないですか?
0575デフォルトの名無しさん
2009/03/27(金) 23:18:42_beginthreadex
0576デフォルトの名無しさん
2009/03/27(金) 23:23:460577574
2009/03/27(金) 23:29:120578デフォルトの名無しさん
2009/03/30(月) 08:28:32画像ファイルと一致する画像を発見すると、その座標を変数に格納するというものです。
これと同じ機能をC言語で実装するにはどのような関数を使えば良いのでしょうか?
0579デフォルトの名無しさん
2009/03/30(月) 08:45:58Win32API に画面をキャプチャするのがあるから
それで画面を取り込んで指定画像と比較すればいいんじゃないかな
0580デフォルトの名無しさん
2009/03/30(月) 15:35:03今C++のtemplateで新しく設計・作成したクラスがあるんだが
main.cpp
temp.h
temp.cpp
のようにソースを分けたいと思ってる
でも、templateだから.objにしてしまうとビルドエラーが発生
何とか分けたいのだが、良い方法ないでしょうか?
0581デフォルトの名無しさん
2009/03/30(月) 16:49:25exportっていう仕様があるにはあるけど、各社ともに実装できなくて放置状態だ。いや、一個だけあったかもしれんが。。。
VC6でやってた記憶があるけど、もう忘れちゃったなぁ。
VC9使ってるが、ヘッダにベタ書きしてる。
0582デフォルトの名無しさん
2009/03/30(月) 17:09:53さっぱりワケが解ってないらしい。
(なんだ「計算」だの「定数」だのって)
0583デフォルトの名無しさん
2009/03/30(月) 17:16:430584581
2009/03/30(月) 17:33:07多分>>580が望んでるのはジェネリックスのほうだと思う。
0585デフォルトの名無しさん
2009/03/30(月) 17:37:340586デフォルトの名無しさん
2009/03/30(月) 17:38:490587デフォルトの名無しさん
2009/03/30(月) 18:05:35こういうのがあったが。
ttp://okwave.jp/qa270432.html
これで解決かな??
0588デフォルトの名無しさん
2009/03/30(月) 19:13:56…分ける意味ねぇな、とか思わないのが不思議。
0589デフォルトの名無しさん
2009/03/30(月) 19:39:23俺もヘッダにべた書きしてた事あるんだが
ヘッダに書くなんてありえないとか言われて、それ以来分けてる
template classを使ったのは速度を犠牲にしてでも、汎用性+αの目的の為
>>587
ありがとう。これは知らなかったからまた新しく知識が増えた
只、ヘッダ以外をインクルード…まあヘッダにベタ書きしたと思えばいいかな…
暫くはこれを使ってみます
レスくれた方々本当に有難うございました
0590デフォルトの名無しさん
2009/03/30(月) 19:46:47「ありえねぇよな、STL」と言い返せ。
0591デフォルトの名無しさん
2009/03/30(月) 20:02:36coutより使いやすい
0592デフォルトの名無しさん
2009/03/30(月) 20:24:38みたいなテンプレート特化がしぽぽファイルに書き込まれていると
これはテンプラータ関数ではなく一般の関数と同じ扱いだから
定義を頭ファイルに書き込めないのであって(淫乱は別として)
多重定義アラーがでるよって思うな。あっさらーむ。
0593デフォルトの名無しさん
2009/03/30(月) 20:30:49解決策はどうしたらいいのってことになるので、つまりそこはグーグルだよ。おにいさん。
以下の「-inl.hファイル」という項が参考になる。
http://www.textdrop.net/google-styleguide-ja/cppguide.xml
要するに、もう一個、てんぷらクラス/関数専用のサブのヘッダファイルを用意して
そこにてんぷらの実装コードだけを分離しつつ、
ヘッダファイルでそのサブヘッダファイルをインクルードしたらどうなの?って話。
これなら本来実装を書き込むしびびんファイルをいんこるどするよりも気持ち的に安全。
0594デフォルトの名無しさん
2009/03/30(月) 21:18:29酔っ払いすぎ。
0595デフォルトの名無しさん
2009/03/30(月) 21:24:22特に理解出来ないのが#include "TList.cpp"とかやってるサンプルが出てきてからなのだが、
この会話はレベルが高い話なのか低い話なのか?
(このレベルってのはハードウェアに近いかどうかって意味じゃなくてね。)
>>580が悩んでるのはExplicit instantiationで解決する類の話じゃなくて?
0596デフォルトの名無しさん
2009/03/30(月) 21:28:390597デフォルトの名無しさん
2009/03/30(月) 21:29:06このスレのちょっと前の方に出てきているわけです。
http://d.hatena.ne.jp/aki-yam/20081129/1227982516
しかしこれはソースの分離というより、
あらかじめ分離してコンパイルしたオブジェクトファイルを用意しておく
という感じでありますね。いいです。すごく。おおきい。
0598デフォルトの名無しさん
2009/03/30(月) 22:31:51オヤジギャグかますなよ
0599デフォルトの名無しさん
2009/03/30(月) 22:51:340600デフォルトの名無しさん
2009/03/31(火) 20:04:07グローバル変数にstaticを付けると、
他のファイルからexternで参照できなくなるの?
0601デフォルトの名無しさん
2009/03/31(火) 20:13:140602デフォルトの名無しさん
2009/03/31(火) 20:29:10そうだよ。
0603600
2009/03/31(火) 20:58:08とっっくにググってあるよ。
ググった結果、>>600のように解釈したんだ。
何の実りもないレスすんなカス。
>>602
納得できた。
ありがとう。
0604デフォルトの名無しさん
2009/03/31(火) 21:05:120605デフォルトの名無しさん
2009/03/31(火) 21:14:07動いたかどうかじゃなくて正式な仕様として聞きたかったとか?
だいたい2chで実りを求める方がおかしいよーな。
まあどうでも良いけど、これが火種になってスレが汚れないことを願う。
0606デフォルトの名無しさん
2009/03/31(火) 21:18:57おまえが汚れだ。
0607デフォルトの名無しさん
2009/03/31(火) 21:28:202chに一生をかけてる人が「2chで実りを求める方がおかしい」発言にキレた構図。
0608デフォルトの名無しさん
2009/03/31(火) 21:34:15バーカ
0609デフォルトの名無しさん
2009/03/31(火) 21:36:20って言われてるのか。かわいそうだがお似合いなお方w
0610デフォルトの名無しさん
2009/03/31(火) 22:49:49,! ヽ ,:' ゙;.
! ゙, | }
゙; i_i ,/
,r' `ヽ、
| ,.、 ,r.、 ,i" _, ._ ゙; うーん・・・・
| ,! ヽ,:' ゙;. !. ・ ・ ,!
| ! ,! } ヽ、 x _,r'' 僕には何も言えない
|二゙; i二二二(⌒ノ"''`''''''''''''"´`ヽ.
| ,r' `ヽ、 ´ヾ、 l l
,i" _, _ ゙; ! i___|
!. ・ ・,! | t,ノ
|ゝ_ x _::' !、、、、、、、、、、!
|,/"`''''''''''''''"´';, | | |
(,;! !) | | |
|゙''::r--、::--;r' |____|_____|
|―゙'ー-‐゙ー-゙'―┐ (,,,__(,,,____)
0611デフォルトの名無しさん
2009/03/31(火) 23:14:210612デフォルトの名無しさん
2009/03/31(火) 23:16:48もともと低かったろ。
0613デフォルトの名無しさん
2009/04/01(水) 07:46:43検索先が信じられずに2ちゃんのレスのほうを信じるのもどうかと思うし
0614デフォルトの名無しさん
2009/04/01(水) 08:14:01検索に関する会話はご遠慮下さい。
0615デフォルトの名無しさん
2009/04/01(水) 09:57:040616デフォルトの名無しさん
2009/04/01(水) 13:13:500617デフォルトの名無しさん
2009/04/01(水) 16:33:56例えば
char STR[256] = {0};
unsigned long Value_A = 0x01234567;
unsigned long Value_B = 0x89ABCDEF;
char Str_A[] = "sample1";
char Str_B[] = "SAMPLE2";
というデータがあったとして、配列STRに以下のようにデータを格納するコードを教えて下さい。
< binary > < text >
0x01234567 0x89ABCDEF sample1|SAMPLE2
ちなみに、バイナリデータはテキストにはせず、BigEndianで格納したいです。
あとテキストには'|'文字を入れて区切りたいです。
よろしくお願いします。
0618デフォルトの名無しさん
2009/04/01(水) 17:24:58#include <stdio.h>
#define swap(ul) ((ul)<<24)|(((ul)&0xFF00)<<8)|(((ul)&0xFF0000)>>8)|((ul)>>24)
void main()
{
unsigned char STR[256] = {0};
unsigned long Value_A = 0x01234567;
unsigned long Value_B = 0x89ABCDEF;
char Str_A[] = "sample1";
char Str_B[] = "SAMPLE2";
unsigned long ul;
int i;
ul = swap(Value_A);
memcpy(STR, &ul, 4);
ul = swap(Value_B);
memcpy(STR + 4, &ul, 4);
strcpy(STR + 8, Str_A);
strcat(STR + 8, "|");
strcat(STR + 8, Str_B);
for (i = 0; i < 8 || STR[i]; i++) {
printf("%d:%02X[%c] ", i, STR[i], isprint(STR[i]) ? STR[i] : '.');
}
}
0:01[.] 1:23[#] 2:45[E] 3:67[g] 4:89[.] 5:AB[.] 6:CD[.] 7:EF[.] 8:73[s] 9:61[a]
10:6D[m] 11:70[p] 12:6C[l] 13:65[e] 14:31[1] 15:7C[|] 16:53[S] 17:41[A] 18:4D[M]
19:50[P] 20:4C[L] 21:45[E] 22:32[2]
0619デフォルトの名無しさん
2009/04/01(水) 17:39:06int i = 0; while(d < e && i < ln){*d++ = *s++; ++i}
return d;
}
char *p = STR, *end = STR + sizeof(STR);
if(p=push_STR(p,end,&Value_A,sizeof(Value_A)) >= e) abort();
if(p=push_STR(p,end,&Value_B,sizeof(Value_B)) >= e) abort();
if(p=push_STR(p,end,&Str_A,sizeof(Str_A)) >= e) abort();
if(p=push_STR(p,end,&Str_B,sizeof(Str_B)) >= e) abort();
0620デフォルトの名無しさん
2009/04/01(水) 17:50:34よろしくおねがいします。
C言語の入門ページの動的配列などの部分を読んで
mallocやreallocでメモリの再確保などができる事はわかりました。
しかし、結果的にははじめに変数に入力をうけてその結果にあわせて
配列の量を変更する事はできません。
例えば文字列の入力を受け付けるプログラムでたとえば書籍の
タイトルを受け取る処理なのでせいぜいこのくらいだろうと見積もって
配列の大きさをとっていたとしてユーザーが予定以上の
非常に長いタイトルの書籍を入力したりしても残りの部分は切り捨てられるように
なってしまうと思います。これを回避する方法は無いでしょうか?
0621デフォルトの名無しさん
2009/04/01(水) 17:57:18もし上限がなかったらどうなるかを考えてみよう
0622デフォルトの名無しさん
2009/04/01(水) 18:02:15メモリが許す限りどんどん大きくできるぞ。しごいね!
0623デフォルトの名無しさん
2009/04/01(水) 18:02:340624デフォルトの名無しさん
2009/04/01(水) 18:04:420625デフォルトの名無しさん
2009/04/01(水) 18:05:29パイプ通しての洪水テキストや
例えばカナ漢字変換が驚くほど丈夫で数メガバイトの変換済文字列をイッキに送り込んでくるような状況
には対処しきれんよな
0626デフォルトの名無しさん
2009/04/01(水) 18:15:49前もって入力を受け付けるときに文字数宣言が有る事を書いておきたいと思います。
0627デフォルトの名無しさん
2009/04/01(水) 18:24:430628デフォルトの名無しさん
2009/04/01(水) 19:36:410629デフォルトの名無しさん
2009/04/01(水) 19:39:550630デフォルトの名無しさん
2009/04/01(水) 19:51:28本当に理由が解明できなくてマジで困ってます…。
for (i=0; i < (Num_Points-1); i++)
{
distance_x = (gsd[i+1].x-cur_xpos) * (gsd[i+1].x-cur_xpos);
distance_y = (gsd[i+1].y-cur_ypos) * (gsd[i+1].y-cur_ypos);
distance = sqrt(distance_x + distance_y);
}
for (i=0; i < (Num_Points-1); i++)
{
a0 = atan2(cur_ypos-gsd[i].y, cur_xpos-gsd[i].x)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
a1 = atan2(gsd[i+1].y-cur_ypos, gsd[i+1].x-cur_xpos)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
}
コンパイルエラーは出ないのですが、実行した際に途中で止まってしまいます。
何回か試したところ、上のループか下のループどちらか一方しか書いてない時は動きます。
0631デフォルトの名無しさん
2009/04/01(水) 19:58:340632デフォルトの名無しさん
2009/04/01(水) 20:15:360633デフォルトの名無しさん
2009/04/01(水) 20:15:52どちらのループも単体でしかコードに存在しない時は動くので、
printfで結果表示した場合、ちゃんと計算結果が出ます。
しかし、両方ともコードに書くと、なぜか止まってしまうんです。
0634デフォルトの名無しさん
2009/04/01(水) 20:46:09for文の中でiを表示したらどこまで進むの?
0635デフォルトの名無しさん
2009/04/01(水) 20:53:290636デフォルトの名無しさん
2009/04/01(水) 21:08:33どちらかのループ単体のみの実行なら、Num_Points-2まで進んでいます。
なので、配列の範囲外から数を呼び出してるということはないみたいです。
0637デフォルトの名無しさん
2009/04/01(水) 21:15:24エイプリル・フールは午前中までだってのにな
0638デフォルトの名無しさん
2009/04/01(水) 22:09:540639デフォルトの名無しさん
2009/04/01(水) 22:51:04distance, a0, a1 がクラスのインスタンスで、
= がオーバーロードされてるかもよ。
0640デフォルトの名無しさん
2009/04/01(水) 23:58:38部分的ソースだけ見せられて判るとは思えない。
0641デフォルトの名無しさん
2009/04/02(木) 00:04:08上のループで1からNum_Points-2まで進んで
下のループでも1からNum_Points-2まで進んだってこと?
それなら処理終わってるよね?
せっかく解決しようと聞いているんだから省略しないできっちり説明してほしいな。
0642デフォルトの名無しさん
2009/04/02(木) 00:40:04上のループ、もしくは下のループどちらかしか書いてなければ正常に動きます。
だから、printfでiがどこまで進んでいるかも確認して、Num_Points-2まで進んでました。
このループを両方コードに書いてプログラム実行すると止まって、
printfで表示できてたものも表示されなくなってしまいます。
0643デフォルトの名無しさん
2009/04/02(木) 00:48:48printfを具体的にどこにどのように入れてるのか知らないが、つまりループを両方書くと
実行時に最初のループに入ってすらいないということか?
もし可能であれば、実際にその問題が生じるような最小限のコード全部を書いてほしい。
つまり、俺らがそのままコピペして自分でコンパイルしてみると、同じ問題に遭遇できるようなコードってことね。
それが出来れば問題解決のための労力は少なくて済む。
まあ実際にはかなり長いコードになっちゃうのかもしれないけど。
あと、君が使ってるコンパイラに特有のトラブルだったりすると、助言できないかもしれない。
0644デフォルトの名無しさん
2009/04/02(木) 00:54:16これ↓実行したら何が表示されるの?
Num_Points=1
fprintf(stderr, "start(1) Num_Points=%d\n", Num_Points);
for (i=0; i < (Num_Points-1); i++)
{
fprintf(stderr, "(1)[i=%d][Num_Points=%d]\n", i, Num_Points);
distance_x = (gsd[i+1].x-cur_xpos) * (gsd[i+1].x-cur_xpos);
distance_y = (gsd[i+1].y-cur_ypos) * (gsd[i+1].y-cur_ypos);
distance = sqrt(distance_x + distance_y);
}
fprintf(stderr, "end(1) Num_Points=%d\n", Num_Points);
fprintf(stderr, "start(2) Num_Points=%d\n", Num_Points);
for (i=0; i < (Num_Points-1); i++)
{
fprintf(stderr, "(2)[i=%d][Num_Points=%d]\n", i, Num_Points);
a0 = atan2(cur_ypos-gsd[i].y, cur_xpos-gsd[i].x)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
a1 = atan2(gsd[i+1].y-cur_ypos, gsd[i+1].x-cur_xpos)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
}
fprintf(stderr, "end(2) Num_Points=%d\n", Num_Points);
0645デフォルトの名無しさん
2009/04/02(木) 00:59:13printfはどこに入れても実行されないです。
このループを二つ入れると、そのvoid関数の部分のprintfは全てダメになります。
結構変数値を他の部分から呼び出してて、
その部分に関しては別の人がやった部分なので最小限のコードを作るにも少々時間かかると思います。
他にも少しやらなくてはいけないことがあるので、もしそれができたら戻ってきます。
ここまで、あまり上手く説明できなくて御迷惑おかけしました。
レス下さった方々、ありがとうございます。
0646デフォルトの名無しさん
2009/04/02(木) 01:03:50とりあえず>>644をコピペすればいいだけだろ。
0647デフォルトの名無しさん
2009/04/02(木) 01:06:280648デフォルトの名無しさん
2009/04/02(木) 01:10:54どっかでメモリ、ぶっ壊してるのだろ、きっと
0650デフォルトの名無しさん
2009/04/02(木) 05:50:460651デフォルトの名無しさん
2009/04/02(木) 06:40:26int sum(int x,int y){
return x+y;
}
int max(int x,int y){
return x*200+y*300;
}
int main(void){
int x,y,i,am,pm;
char cl;
for(i=0;i<9;i++){
scanf("%s %d %d",&cl,&x,&y);
am=sum(x,y);
pm=max(x,y);
printf("%s %d %d\n",cl,am,pm);
}
return 0;
}
と書いて実行するとき、%sの読み込みにc1と入れても
出力の%sではcだけとしか表示されないんです。
誰かこの謎の答えを教えてください。
0652デフォルトの名無しさん
2009/04/02(木) 06:46:18char cl; → char cl[5000];
0653デフォルトの名無しさん
2009/04/02(木) 07:03:43ありがとうございます!!ありがとうございます!!
何でこんなことにも気づかなかったんでしょ(;'ω`)アホだ自分…
0654デフォルトの名無しさん
2009/04/02(木) 07:32:36「デバッガでは良く分からない」んじゃあない
お前がデバッガを分かってないだけ
0655デフォルトの名無しさん
2009/04/02(木) 07:38:41char cl[100];
if (scanf("%99s%d%d", cl, & x, & y) != 3) fprintf(stderr, "Illegal input.\n);
0656デフォルトの名無しさん
2009/04/02(木) 08:14:44#include<stdio.h>
#define ROW 8 /*縦*/
#define COL 8 /*横*/
int main(void){
int i,j;
int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}};
for(j=0;j<COL;j++){
for(i=ROW-1;i>=0;i--){
printf("%2c ",matrix[i][j]);}
printf("\n");}
printf("\n");
for(i=ROW-1;i>=0;i--){
for(j=COL-1;j>=0;j--){
printf("%2c ",matrix[i][j]);}
printf("\n");}
printf("\n");
for(j=COL-1;j>=0;j--){
for(i=0;i<ROW;i++){
printf("%2c ",matrix[i][j]);}
printf("\n");}
return 0;
}
0657デフォルトの名無しさん
2009/04/02(木) 08:22:20宿題スレへどうぞ
0658デフォルトの名無しさん
2009/04/02(木) 08:56:29#define ROW 8 /*縦*/
#define COL 8 /*横*/
void disp(int (*matrix)[ROW][COL], int revrow, int revcol)
{
int i,j,row,col;
for (j = 0; j < COL; j++) {
col = (revcol) ? COL - 1 - j : j;
for (i = 0; i < ROW; i++) {
row = (revrow) ? ROW - 1 - i : i;
printf("%c ", (*matrix)[row][col]);
}
printf("\n");
}
}
int main(void){
int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}};
disp(&matrix, 1, 0);
printf("\n");
disp(&matrix, 1, 1);
printf("\n");
disp(&matrix, 0, 1);
return 0;
}
0659デフォルトの名無しさん
2009/04/02(木) 09:20:59int f1(int a)
{
if(a==3){ return 1;};
if(a>1){ return 2;};
return 3;
}
int f2(int a)
{
if (a==3) { return 1;}
else if (a>1) { return 2;}
else {return 3;};
}
0660デフォルトの名無しさん
2009/04/02(木) 09:24:270661デフォルトの名無しさん
2009/04/02(木) 09:39:24動きます。
0662デフォルトの名無しさん
2009/04/02(木) 10:12:280663デフォルトの名無しさん
2009/04/02(木) 11:36:16春休みに宿題なんかないだろ。
0664デフォルトの名無しさん
2009/04/02(木) 11:36:470665デフォルトの名無しさん
2009/04/02(木) 14:33:24ヘッダファイルは、まとめたり、きれいにできませんか?
公開したいクラスは1つだけ(class A)です。実装はライブラリファイルひとつになります。
内部でたくさんのクラスを使ってるんですがこれらは外からは直接
使いません。
で、class Aのメンバにたくさんの他のクラスのオブジェクトがあったり、使ったり
しているので、 class AのヘッダファイルA.hには内部のクラスたちを定義した
たくさんの *.h がincludeされてます。
ライブラリを他人につかってもらうとき、ライブラリ1つと、ヘッダたっくさん
になっちゃうんです。ひとつのヘッダファイルにまとめる方法ないです?
0666デフォルトの名無しさん
2009/04/02(木) 14:57:10ひつの手だが、privateメンバにはダミー宣言を使う方法がある
例えば下の例(ヘッダ)で
LIBをビルドする時だけ _LIB_MAIN_ を定義する
こうすれば、LIB利用者には aaa.h は渡さなくて良い
#ifdef _LIB_MAIN_
#include "aaa.h"
aaa *a;
#else
void *a;
#endif
0667デフォルトの名無しさん
2009/04/02(木) 16:46:140668デフォルトの名無しさん
2009/04/02(木) 16:52:420669665
2009/04/02(木) 17:33:37なるほど。いただき。
ポインタじゃなきゃだめ?サイズが合えばよい?
0670デフォルトの名無しさん
2009/04/02(木) 17:46:27前方宣言だけで済む。
0671デフォルトの名無しさん
2009/04/02(木) 17:51:49できるよ。
以上。
はい次の方。
0672665
2009/04/02(木) 18:04:13そか。
全部ポインタにして、前方宣言すればすればよいのね。
ポインタじゃないとやっぱりむり?
0673デフォルトの名無しさん
2009/04/02(木) 18:10:08参照でも可能だけど、まあ同じ話だね。
普通の変数の形で持つなら、その変数の型の完全な定義が必要になる。ポインタや参照なら不要。
0674デフォルトの名無しさん
2009/04/02(木) 18:31:47まぁ要するにpimplなんだが
0675デフォルトの名無しさん
2009/04/02(木) 21:44:13すべてのスレッド内の一秒間にループした回数の和を取得することができません。
どうすればうまくできるでしょうか。
0676デフォルトの名無しさん
2009/04/02(木) 21:59:412番目はクラスにしてメソッドで各スレッド内で足したものを返す。かなぁ??
0677デフォルトの名無しさん
2009/04/02(木) 23:20:48pthread_joinで戻り値(第2引数)を合計すればいい。
0678デフォルトの名無しさん
2009/04/03(金) 05:06:12int main(void){
int a,s,i;
int box[10]={0};
scanf("%d",&s);
while(s!=0){
for(i=0;i<s;i++){
scanf("%d",&a);
if(a<=9) box[0]+=1;
else if(9<=a&&a<20) box[1]+=1;
else if(29<a&&a<40) box[3]+=1;
else if(19<a&&a<30) box[2]+=1;
else if(39<a&&a<50) box[4]+=1;
else if(49<a&&a<60) box[5]+=1;
else box[6]+=1;
}
}
printf("%d\n",box[0]);
printf("%d\n",box[1]);
printf("%d\n",box[2]);
printf("%d\n",box[3]);
printf("%d\n",box[4]);
printf("%d\n",box[5]);
printf("%d\n",box[6]);
}
return 0;
}
上のソースをユーザ定義関数を使って書きたいときはどうしたらいいのでしょう?
0679デフォルトの名無しさん
2009/04/03(金) 05:21:410680デフォルトの名無しさん
2009/04/03(金) 08:00:22int hantei(int i)
{
if (i < 0) {
return 0;
}
if (60 <= i) {
return 6;
}
return i / 10;
}
int main(void){
int a,s,i;
int box[10]={0};
scanf("%d",&s);
for(i=0;i<s;i++){
scanf("%d",&a);
box[hantei(a)]++;
}
for(i=0;i<=6;i++){
printf("%d %d\n",i,box[i]);
}
return 0;
}
0681デフォルトの名無しさん
2009/04/03(金) 21:50:25プログラマになりたくてなるんじゃないなってしまう者がプログラマ
貧弱一般人がプログラマになろうとしても人工的に淘汰されるのが目に見えている
この言葉にはすごく説得力があるような気がします
やはり、プログラマになろうとしている僕に、プログラマなんて無理なんでしょうか?
0682デフォルトの名無しさん
2009/04/03(金) 21:57:21向かない人はやりたいと思わない。
0683デフォルトの名無しさん
2009/04/03(金) 22:02:290684デフォルトの名無しさん
2009/04/03(金) 22:28:30ありがとうございます。
頑張ってみようと思います
0685デフォルトの名無しさん
2009/04/03(金) 22:41:260686デフォルトの名無しさん
2009/04/03(金) 22:42:120687デフォルトの名無しさん
2009/04/03(金) 22:44:30プログラマの三つの美徳
怠惰であれ、短気であれ、コーマン大好きであれ
海軍式の努力と根性がまかり通っている職場や
そのような空気を当たり前とみなすSE/PGによるプロジェクトは
漏れなくデスマーチになる。
0688デフォルトの名無しさん
2009/04/03(金) 23:37:252進リテラルは無い。
8進数なのにbが入ってて不正じゃないかい?
0689デフォルトの名無しさん
2009/04/04(土) 01:24:45使わないほうが無難だな。
0690デフォルトの名無しさん
2009/04/04(土) 10:38:18他の板ってこれか?
プログラミング質問すれ Part1
http://pc12.2ch.net/test/read.cgi/unix/1127388574/474
0691デフォルトの名無しさん
2009/04/04(土) 12:02:02プログラマーに限った話じゃない。
全ての職業に言えること。
0692デフォルトの名無しさん
2009/04/04(土) 13:32:320693デフォルトの名無しさん
2009/04/04(土) 13:42:21ポインタを使って、配列のそれぞれの要素に文字列を入れたんですけども、
こういう場合の配列のアドレスって一体どういう規則で並んでいるんでしょうか?
#include <stdio.h>
int main() {
char test[] = "1234";
char *words[] = {"one","two","three","four"};
printf("%p %p %p %p\n",test[0],test[1],test[2],test[3]);
printf("%x %x %x %x\n",words[0],words[1],words[2],words[3]);
}
0694デフォルトの名無しさん
2009/04/04(土) 13:45:410695デフォルトの名無しさん
2009/04/04(土) 13:51:41%xではなく、%pを使うべきじゃないだろか。
で、質問は"one", "two", "three", "four"がどう配置されているかってこと?
だとしたら答えは「コンパイラのご機嫌次第」かな。
大抵は、その順番で8バイト境界に並べられるような気がするけど。
0696デフォルトの名無しさん
2009/04/04(土) 13:58:500697デフォルトの名無しさん
2009/04/04(土) 14:06:43FFFF0004 t w o \0
FFFF0008 t h r e
FFFF000C e \0 X X
FFFF0010 f o u r
FFFF0014 \0 X X X
※ Xに何が入るか分からない
words[0] = (char*)FFFF0000
words[1] = (char*)FFFF0004
words[2] = (char*)FFFF0008
words[3] = (char*)FFFF0010
こんなイメージ
0698デフォルトの名無しさん
2009/04/04(土) 14:12:56なるほど。ありがとうございます。
>>697
ありがとうございます。
0699デフォルトの名無しさん
2009/04/04(土) 14:12:590700デフォルトの名無しさん
2009/04/04(土) 14:20:39これでエラーが出るんですが、どこが悪いんでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char str[100] ;
int num ;
gets_s(str) ;
num = atoi(str) ;
printf("%d",num*2) ;
}
0701デフォルトの名無しさん
2009/04/04(土) 14:29:28エラーの対処を人に聞く場合はエラーの詳細を書け
たぶん、get_s には2番目のパラメタとして長さが必要ではないかと思うけど
0702デフォルトの名無しさん
2009/04/04(土) 14:35:20だろうね
mainの最後にreturn 0;も忘れずに
0703デフォルトの名無しさん
2009/04/04(土) 14:37:13どんなエラーか想像がつくってもんさ
0704デフォルトの名無しさん
2009/04/04(土) 14:57:29ありがとうございます。
コンパイル通りました。
0705デフォルトの名無しさん
2009/04/04(土) 15:41:42C/C++はコンパイル通っただけじゃまっっっっったく安心できない言語だから気をつけな。
むしろコンパイル通らない内が楽だよ。(コンパイラがミスを見つけてくれるから)
コンパイル通ってからのデバッグが大変なんだよねぇ。
0706デフォルトの名無しさん
2009/04/04(土) 16:38:040707デフォルトの名無しさん
2009/04/04(土) 16:50:400708デフォルトの名無しさん
2009/04/04(土) 16:51:37何を今更。
そんな欠陥があっても、便利なとこがあることに変わりはないから使うというだけのこと。
0709デフォルトの名無しさん
2009/04/04(土) 17:20:12もっと恐ろしいことに。
0710デフォルトの名無しさん
2009/04/04(土) 18:52:37別に言語の欠陥じゃないだろ。
プログラムを作る
→期待通りに動作していない
→何がいけないんだーー?
ってなるのはどの言語でも一緒だろ。
0711デフォルトの名無しさん
2009/04/04(土) 18:55:300713デフォルトの名無しさん
2009/04/04(土) 19:12:440714デフォルトの名無しさん
2009/04/04(土) 19:23:10お願いします。
0715デフォルトの名無しさん
2009/04/04(土) 19:34:48入門者かな?これからC++始めたいって人?
入門者ならエクスメディアの『ビジュアルラーニングC++』って本が個人的なオススメだったけど、会社が倒産した。
0716デフォルトの名無しさん
2009/04/04(土) 21:51:20ありがとうございます
0717デフォルトの名無しさん
2009/04/04(土) 21:53:530719デフォルトの名無しさん
2009/04/05(日) 00:27:14作ったソフトを売ってるんだが、ソフト自体は差は無いのですか?
やめたほうがいいんじゃって言っても「ばれねぇ」の一点張り。
実際どうなの?
0720デフォルトの名無しさん
2009/04/05(日) 00:30:310721デフォルトの名無しさん
2009/04/05(日) 00:37:520722デフォルトの名無しさん
2009/04/05(日) 00:38:200723デフォルトの名無しさん
2009/04/05(日) 00:39:420724デフォルトの名無しさん
2009/04/05(日) 00:41:13ライセンスキーの情報が埋め込まれてるから
ばれる可能性はある
アカデミックとかImagineCupのは商用利用負荷だよ
Expressはできるけど
0725デフォルトの名無しさん
2009/04/05(日) 00:43:200726デフォルトの名無しさん
2009/04/05(日) 00:53:16ほんとだ、ごめん
アカデミックは大丈夫ですね
0727デフォルトの名無しさん
2009/04/05(日) 00:59:16template<typename T> class Hoge { void f() {} }
template<t> class Hoge<整数>::f { void f() {整数専用処理}; }
みたいな感じで。
0728デフォルトの名無しさん
2009/04/05(日) 01:00:390729デフォルトの名無しさん
2009/04/05(日) 01:00:49テンプレートの明示的特殊化はヘッダファイルに書いておいてもいいものなのでしょうか。
0730デフォルトの名無しさん
2009/04/05(日) 01:28:00boost::enable_ifを使うしか無いと思うよ。
letsboost::enable_if
http://www.kmonos.net/alang/boost/classes/enable_if.html
0731デフォルトの名無しさん
2009/04/05(日) 01:38:48ありがとうございました。boostの使用も考えてみます。
テンプレートの明示的特殊化を複数個所で使用する場合に、
実体を置くべき場所の解決がうまくできない問題は相変わらず……
externを使えば?とも思いましたが、BCCでもVCでも解決できませんでした。
0732730
2009/04/05(日) 01:51:31まあ正直俺だったらboost::enable_ifじゃなくて、
適当なprivateインライン関数テンプレートfoo_temp()を1つ別個に用意しておいて、
int, short, unsigned long, etc...
を全部考え得る限り特殊化し、それぞれから
foo_temp<int>, foo_temp<short>とかを呼び出すように定義しちゃうかもしれない。
0733730
2009/04/05(日) 01:54:10>>テンプレートの明示的特殊化を複数個所で使用する場合
そもそも明示的特殊化って何?
ふつーに特殊化だよね?
あと、メンバ関数テンプレートの話だよね?
実体をどこに書いてる?
特殊化してなければちゃんとコンパイル→リンクまで行くの?
0734デフォルトの名無しさん
2009/04/05(日) 02:19:10「明示的特殊化」はIBM XL C/C++ ランゲージ・リファレンスの言葉に従っています。
中身は普通の特殊化でメンバ関数です。
やりたいことはクラステンプレート内部のメンバ関数のみの特殊化です。
(クラス内部のテンプレート関数の特殊化を指す名前はあるのでしょうか?)
現在は
hoge.h
hoge.cpp
a.cpp
b.cpp
があるとして、
// hoge.h
template<typename T> class Hoge { void f() {} }
// template<> class Hoge<int>::f() { int専用処理; } // cppでの記述を消しても多重定義、NG
// template<> class Hoge<int>::f(); // VCとBCCではじかれる。externを書いても同じ。
// hoge.cpp
template<> class Hoge<int>::f { void f() {int専用処理}; }
// a.cppとb.cpp
Hoge<int> hoge;
hoge.f();
とおいて試してみています。
0735デフォルトの名無しさん
2009/04/05(日) 02:56:13学生じゃなくなってもアカデミックを使い続けて良いの?
0736デフォルトの名無しさん
2009/04/05(日) 03:40:33→./a.out→文字がうじゃうじゃうじゃうじゃうじゃうじゃうじゃうじゃorセグメンテーション・エラー云々
→( ゚д゚)
→( ゚д)
そうだね、今このときだね
0737デフォルトの名無しさん
2009/04/05(日) 03:41:41恥ずかしい・・・・・・っ、でも、
0738デフォルトの名無しさん
2009/04/05(日) 04:36:19>template<> class Hoge<int>::f { void f() {int専用処理}; }
template どうこう以前に、すでに書き方間違ってるじゃろ、それ。
あと、特化したのはクラスであってメンバ関数じゃないんだから
特化のための宣言である template<> もいらない。
0739デフォルトの名無しさん
2009/04/05(日) 04:56:41失礼しました。その部分はclass→voidですね。classだとそもそもコンパイルが通らないはず。
というわけで試してみました。
// hoge.h
template<typename T> class Hoge { void f() {} }
// なにも書かない→gcc3.4:リンカで多重定義 VC9:通るがcppでの実装は無視される BCC:cppのコンパイル時に多重定義扱い
// void Hoge<int>::f; //gcc3.4→too few template-parameter-list VC9:通るがcppでの実相は無視される BCC5.5:template<>宣言が必要
// hoge.cpp
void Hoge<int>::f { void f() {int専用処理}; }
といった感じです。
0740デフォルトの名無しさん
2009/04/05(日) 05:11:32テンプレートクラスの特化宣言をなぜ落とすw
テンプレートクラスの特化はちゃんと宣言する必要がある。
それが目的なんだから。
特化宣言がいらないのはそのクラスのメンバ関数。
なぜなら特化したのはクラスであってメンバ関数じゃないから。
仕様書を読んだほうがいいかも。
0741デフォルトの名無しさん
2009/04/05(日) 05:50:37メンバが多めのテンプレートクラスの一つの関数だけを再定義、といった場合に、
教科書通りにテンプレートクラスの特化で全メンバを再定義すればいけるというのは分かるのですが、
特化したテンプレートクラスのある特定の関数だけリンカで特殊な定義に差し替えられないかと考えたのですが、
冷静に考えるとそれをコンパイラに知らせるのはかなり酷な作業の気がしてきたので、
教科書通りに全部再定義してみます。
一足飛びに変な質問をしようとして、エスパーさせてしまってすみません。
0742デフォルトの名無しさん
2009/04/05(日) 07:10:08それを0001→0010→0100→1000→0001→…という感じでずっと1を移動させたいん
ですがifやforなど条件分岐を使わず出来るだけ軽い処理でいい方法ありませんか?
この関数が呼び出されるたびに上記のように1を移動させていくって感じです。
<<=1でシフトさせていけば軽いしいいかなと思ったんですがそれだと1000を処理したとき
0000になってしまいます。やっぱりif入れて8より大きくなったら1にとかしかない?
0743デフォルトの名無しさん
2009/04/05(日) 07:14:210744デフォルトの名無しさん
2009/04/05(日) 10:36:510745デフォルトの名無しさん
2009/04/05(日) 11:10:020746デフォルトの名無しさん
2009/04/05(日) 13:19:05m9(^Д^)
0747デフォルトの名無しさん
2009/04/05(日) 13:28:500748デフォルトの名無しさん
2009/04/05(日) 14:00:12x = (x << 1) & 16 || x = 1;
0749デフォルトの名無しさん
2009/04/05(日) 14:18:49右辺値への代入?
0750デフォルトの名無しさん
2009/04/05(日) 14:40:380751デフォルトの名無しさん
2009/04/05(日) 14:42:060752デフォルトの名無しさん
2009/04/05(日) 14:54:35void main()
{
int i, x = 1;
for (i = 0; i < 10; i++) {
printf("%d:%X ", i, x);
x = ((x & 7) << 1) | (x >> 3);
}
}
0:1 1:2 2:4 3:8 4:1 5:2 6:4 7:8 8:1 9:2
0753デフォルトの名無しさん
2009/04/05(日) 14:57:430754デフォルトの名無しさん
2009/04/05(日) 15:02:397とか中途半端だなどうせなら非環境依存にしとけよ
0755デフォルトの名無しさん
2009/04/05(日) 15:17:34躓きの「書き」を問われたら俺失点するわ。
0756デフォルトの名無しさん
2009/04/05(日) 15:25:450757デフォルトの名無しさん
2009/04/05(日) 15:29:3115だ。ごめん。
0758デフォルトの名無しさん
2009/04/05(日) 15:42:213日も経てば忘れるだろうけど
0759デフォルトの名無しさん
2009/04/05(日) 16:30:25どの辺がつまづきなんだろう・・・。
0760デフォルトの名無しさん
2009/04/05(日) 16:32:170761デフォルトの名無しさん
2009/04/05(日) 16:58:46??
0762デフォルトの名無しさん
2009/04/06(月) 13:27:16図書館にあると思いますか?(・∀・)
0763デフォルトの名無しさん
2009/04/06(月) 13:32:26ところで、誰かモリタポ別けてもらえないでしょうか(・∀・ )
◆xb8eIST5.k
0765デフォルトの名無しさん
2009/04/06(月) 14:20:47お前、厨房か?クレクレやろうは逝ってよしだ、ゴルァ
0766デフォルトの名無しさん
2009/04/06(月) 14:39:11数冊はあるんでねーの?
0767デフォルトの名無しさん
2009/04/06(月) 14:58:49住所晒したら着払いで送ってやんよ
0768デフォルトの名無しさん
2009/04/06(月) 15:28:31着払いでモリタポを送る!?(・∀・)
0769デフォルトの名無しさん
2009/04/06(月) 18:42:31そんなことより exe が使用しているdllを調べるソフトってなんだったっけ?
0770デフォルトの名無しさん
2009/04/06(月) 18:43:450771デフォルトの名無しさん
2009/04/06(月) 18:53:32ライブラリを提供したいです。C++。
ユーザにはどんなインターフェイスで公開するとよいですか?
受信スレッドでデバイスから読んで
受信バッファにデータ積んで、コールバック登録されたメソッドを
呼び出してあげる。でよいですか?
ユーザアプリ側のコールバックルーチンが別スレッドで走るのが
気持ち悪い気がするのですが。
0772デフォルトの名無しさん
2009/04/06(月) 19:09:29ライブラリを提供したいです。C++。
ユーザにはどんなインターフェイスで公開するとよいですか?
受信スレッドでプロセスから読んで
受信バッファにデータ積んで、コールバック登録されたメソッドを
呼び出してあげる。でよいですか?
ユーザアプリ側のコールバックルーチンが別スレッドで走るのが
気持ち悪い気がするのですが。
0773771
2009/04/06(月) 19:42:26Windowsのプロセス間通信なら、
共有メモリと、Windows Messageを使うと、ユーザアプリに求めるのは
メッセージポンプだけになるし、ほぼ標準的なつくりになる気がするので、
好みなんですが。
Linuxではどうですか?
0774771
2009/04/06(月) 19:45:43ユーザアプリは、selectで待つようになるんですよね。
0775デフォルトの名無しさん
2009/04/07(火) 10:59:32lexやらyaccやらbisonやら調べ始めたのですが・・・
難しい・・・
例えば呼び出し前に新たなトークンを追加したり、関数定義みたいなことが
出来るようにするサンプルを探しているのですが、見つかりません。
・自作ソフトはプラグインで拡張可能になっていて、マクロのプラグイン名
を自前で解析していますが、区切り文字の検出とか括弧の扱いとか、自力
では限界なので・・・プラグイン名を追加トークンにして、ライブラリお
任せ一発という形に出来ればと思っています。
・マクロの中で関数マクロの定義が出来るようにといいのですが、
hoge(a, b, c) = {
age; sage(a, b); uge(c);
}
hoge(1, 2, 3);
こういうのを実現しているサンプルなどありましたら教えてください。
0776デフォルトの名無しさん
2009/04/07(火) 11:43:07こっちのスレのほうが適当かな。
http://pc12.2ch.net/test/read.cgi/tech/1233143342/
0777デフォルトの名無しさん
2009/04/07(火) 12:56:10ありがとうございます。行ってきます。
0778デフォルトの名無しさん
2009/04/07(火) 13:22:03みなさんは童貞でしょうか?
0779デフォルトの名無しさん
2009/04/07(火) 13:29:350780デフォルトの名無しさん
2009/04/07(火) 13:53:49どうすればよろしいのでしょうか?
0781デフォルトの名無しさん
2009/04/07(火) 13:54:39どのフォーム?
0782デフォルトの名無しさん
2009/04/07(火) 14:02:030783デフォルトの名無しさん
2009/04/07(火) 14:03:59ヴビ厨特有の現象です。
>サブフォーム?
このオレ用語も。
…ほらね、俺に ESP 能力なんかないでしょ。
>>780
C++/CLI なら TabControl でも使っとけ。
0784デフォルトの名無しさん
2009/04/07(火) 14:17:05ありがとうございました。
0785デフォルトの名無しさん
2009/04/07(火) 19:30:35どちらでもない、あるいは両方ってあり得るの?
0786デフォルトの名無しさん
2009/04/07(火) 19:40:47「みなさんは」という集合なんだから両方は余裕であるだろ
0787デフォルトの名無しさん
2009/04/07(火) 20:29:33はい、残念。
「童貞」は個体の属性だから、>>778は集合に対する問いかけじゃない。
集合の元に対する問いかけだ。
日本語勉強してから出直しな。
0788デフォルトの名無しさん
2009/04/07(火) 20:32:21数学できるのかっこいー
ってお世辞言ってもらえるとでも思っているのかな?
・・・恥さらしてないで出直しな。
0789デフォルトの名無しさん
2009/04/07(火) 21:08:12788が恥さらしだということだけは確実に真理だ
0791デフォルトの名無しさん
2009/04/07(火) 22:01:26定番のレスしか返せないってほんとかっわいいいいwwwwww
0793デフォルトの名無しさん
2009/04/07(火) 22:26:27数学?
0794デフォルトの名無しさん
2009/04/08(水) 00:38:22「童貞」は数学用語じゃないから勝手に元と認識してはいけません
0795デフォルトの名無しさん
2009/04/08(水) 00:39:570796デフォルトの名無しさん
2009/04/08(水) 01:02:410797デフォルトの名無しさん
2009/04/08(水) 07:03:130798デフォルトの名無しさん
2009/04/08(水) 07:07:200799デフォルトの名無しさん
2009/04/08(水) 09:32:35>「童貞」は個体の属性
を不特定多数に対して問いかける間抜けさに気付けない頭の悪さを棚に上げて
>日本語勉強してから出直しな。
てのが、なんだかカッコイイですね。
0800デフォルトの名無しさん
2009/04/08(水) 11:16:420801デフォルトの名無しさん
2009/04/08(水) 13:54:40違うか同じかは知らんが (よく解るなお前)、そんなことより
その「お前」ってのは誰?
0802デフォルトの名無しさん
2009/04/08(水) 13:55:580803デフォルトの名無しさん
2009/04/08(水) 14:04:130804デフォルトの名無しさん
2009/04/08(水) 14:18:260805デフォルトの名無しさん
2009/04/08(水) 15:11:57まず、BCCの無料版をDLして、メモ帳のソースをcファイルで保存しました。
それからコマンドプロンプトを使って実行しましたが、次の文章が出てexeファイルができませんでした。
'bcc32'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして
認識されていません。
そして、ソースは以下のものです。
main()
{
}
0806デフォルトの名無しさん
2009/04/08(水) 15:15:41BCCへのパス通したか?
ttp://pocketstudio.jp/win/xp/path.html
0807デフォルトの名無しさん
2009/04/08(水) 15:16:090808デフォルトの名無しさん
2009/04/08(水) 15:21:520809デフォルトの名無しさん
2009/04/08(水) 15:26:41ここで勉強しる
0810デフォルトの名無しさん
2009/04/08(水) 15:39:14やってませんでした。ありがとうございます。やってみます。
0811デフォルトの名無しさん
2009/04/08(水) 17:57:14TCP/IPのソケット通信処理を作成していて、select関数を使用するつもりです。
select関数の第一引数には「集合にある記述子の中の最大値に1を足したもの」
を設定するということですが、具体的に何を設定すればよいか分かりません。
以下の場合、第一引数"nSocket"には何を設定すればよいのか教えて下さい。
FD_ZERO(&rd);
FD_SET(acceptSocket1, &rd);
FD_SET(acceptSocket2, &rd);
select(nSocket, &rd, NULL, NULL, 10);
よろしくお願いします。
0812デフォルトの名無しさん
2009/04/08(水) 18:03:41socket()の戻り値はint型だから比較したり+1したりできるでしょ?
0813デフォルトの名無しさん
2009/04/08(水) 18:08:20そういう意味ですか。
ありがとうございました。
0814デフォルトの名無しさん
2009/04/08(水) 18:16:27nfds 引数は Windows Socket では未使用 (無視される)
Windowsのソケットはいろいろ癖がある
0815デフォルトの名無しさん
2009/04/08(水) 23:17:45親クラスに定義されているコンストラクタをそのまま使う方法というのは、
再定義してデフォルト初期化子に渡す以外ないのでしょうか。
0816デフォルトの名無しさん
2009/04/08(水) 23:32:54class B : A {}
B(1, 2);
みたいにしたいってこと?再定義しかないね。
0817デフォルトの名無しさん
2009/04/08(水) 23:41:25了解しました
テンプレートで
class A { int m_val; public: A(int a, int b){ m_val = a+b; } }
template<class X> class B : public A { ... }
のようにして、定型の追加機能を持たせるテンプレートを作ろうとしたのですが、
どうしてもそこで引っかかってしまいまして。
0818デフォルトの名無しさん
2009/04/09(木) 02:04:450819デフォルトの名無しさん
2009/04/09(木) 08:46:120820デフォルトの名無しさん
2009/04/09(木) 09:09:020821デフォルトの名無しさん
2009/04/09(木) 09:50:050822817
2009/04/09(木) 22:47:55スマートに行かん……
0823デフォルトの名無しさん
2009/04/10(金) 21:42:23呼ばれ続けるようにするにはどうすればいいですか?
0824デフォルトの名無しさん
2009/04/10(金) 21:44:41そう質問するということは、今はGLUTを使っていないのだろう。何使っているの?
0825デフォルトの名無しさん
2009/04/10(金) 21:49:420826823
2009/04/10(金) 22:10:44http://irrlicht.sourceforge.net/
↑Irrlicht Engine
3DエンジンのIrrlicht使ってます。
http://www.impulse-based.de/
↑物理エンジンIBDS
この物理エンジンのCollisionModelというサンプルをIrrlichtに移植しようとしています
初期化の処理は同じように作ったつもりですが、
Simulation::getCurrent ()->timeStep ()
をメインループに入れて呼び出すと
なぜか速度が一定になりません・・・。
(IBDS::TimeManager::getCurrent ()->getTime()
すると1秒間に1秒進んでいないのがわかる)
元のと同じようにglutIdleFuncのような処理を
しないと思わないと重い質問しました。
int main( int argc, char **argv )
{
・・・
MiniGL::setClientIdleFunc(50, timeStep); //glutIdleFuncに相当する処理
}
void timeStep ()
{
for (int i=0; i < 8; i++)
Simulation::getCurrent ()->timeStep ();
}
http://iroiro.zapto.org/cmn/jb2/data2/jb4015.zip
0827デフォルトの名無しさん
2009/04/10(金) 23:32:14本来意図してたものと違う型のポインタを渡していた場合の例外ってどう処理すればいいんでしょうか?
調べたのですが、良くわからないので現状……catch(...)……として、全部の例外を捕捉して処理してるんですが
何かいい方法ってあるでしょうか?
【例】
main()
{
TYPE_ONE * A; // TYPE_ONEクラスのポインタ
TYPE_TWO * B; // TYPE_TWOクラスのポインタ
DialogBoxParam(hInst, (LPCTSTR)IDD_DIALOG, hWnd, (DLGPROC)DialogProc, (LPARAM)&A);
}
LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static TYPE_TWO * B=NULL;
switch(message)
{
case WM_INITDIALOG:
// 本来TYPE_TWOクラスのポインタを渡すべきなのにTYPE_ONEクラスのポインタを渡している
B=(TYPE_TWO *)lParam;
// TYPE_ONEクラスにはないメンバ変数を使用したので例外が発生
B->TextOut();
}
}
0828デフォルトの名無しさん
2009/04/10(金) 23:36:44そのコードを実行して上がってきた例外をキャッチするようにすればいいんじゃないの?
0829デフォルトの名無しさん
2009/04/11(土) 00:57:400830デフォルトの名無しさん
2009/04/11(土) 17:09:45コンストラクタで例外発生するようなことはしたくないが
設定値によっては例外が出てしまうようなオブジェクトを生成したい場合
コンストラクタは普通にすっからかん状態で生成しといて
その後パラメタをセットしたほうがいいですか?
class 複雑{
public:
複雑(param1, param2, param3,...){ ...えらー!...}
オブジェクトのユーザが使う処理1();
オブジェクトのユーザが使う処理2();
};
↓
class 複雑{
public:
複雑(){}
組み立て(param1, param2, param3...){ setParam1(param1);...setParam2(param2)...}
ユーザが使う処理1();
private:
setParam1(param1){}
setParam2(param2){}
setParam3(param3){}
};
コンストラクタ読んだだけで組み立てずにユーザが使う処理呼ばれるかもしれないのは
使い方が悪いからダメってことで考慮しなくていい問題?
0831デフォルトの名無しさん
2009/04/11(土) 17:25:390832デフォルトの名無しさん
2009/04/11(土) 17:37:19http://ml.tietew.jp/cppll/cppll/article/13093
これ見ててですね、
使う人が気にせずnewして誰にもcatchされない例外を出したくないなと思ったのが理由です。
0833デフォルトの名無しさん
2009/04/11(土) 18:05:42そんなこといったって、>>830では解決にならないじゃん。
設定値によってはまずいことが起こってしまうなら、例外でもそれ以外の手段でも、とにかく
「それはダメだよ」ってのを何らかの手段でユーザに伝えなきゃダメだし、
それをユーザに無視されたらどうしようもないのは同じこと。
0834デフォルトの名無しさん
2009/04/11(土) 18:20:16なんか変なこと聞いてしまったようでごめんなさい
0835デフォルトの名無しさん
2009/04/11(土) 18:44:29次のように、ダイアログプロシージャをクラスの静的メンバで持つ感じでしょうか?
【例】
class TYPE_X
{
public:
bool Input(HINSTANCE hInst, HWND hWnd, TYPE_TWO * InputObj)
{
if(DialogBoxParam(hInst, (LPCTSTR)IDD_DIALOG, hWnd, (DLGPROC)DialogProc, (LPARAM)InputObj) != IDOK) return false;
}
private:
static LRESULT CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);
}
0836デフォルトの名無しさん
2009/04/11(土) 22:16:460837デフォルトの名無しさん
2009/04/12(日) 13:03:00-1 から 1 までの実数値が分かっている状態で
たとえば 0.2222 の実数値から角度を求めたいのですが
どのような計算をすればいいでしょうか?
0838デフォルトの名無しさん
2009/04/12(日) 13:04:270839デフォルトの名無しさん
2009/04/12(日) 13:08:17ttp://www.cppll.jp/cppreference/stdmath_details.html#asin
ttp://www.cppll.jp/cppreference/stdmath_details.html#acos
これとかでいいじゃない。
0840デフォルトの名無しさん
2009/04/12(日) 13:08:433.141592x2 の時か360°
なんですかね?
ラジアン角度は習ってないので
0841デフォルトの名無しさん
2009/04/12(日) 13:13:53円周率πが無理数だとかそういう事は知ってるよね?
なら
角度をラジアンに変換する | いちばんやさしいゲームの作り方
ttp://www.game-create.com/archives/614
こことかどうよ?
でも計算方法だけでなく、この機会にradianくらいは勉強してみた方が良いんでは?
高校で微積分習ったっしょ?
0842841
2009/04/12(日) 13:15:25> 3.141592....の時が180°
> 3.141592x2 の時か360°
で、上の2つは正解。
要は一周分を360と見なすのが度数法、2πと見なすのが弧度法(radian)
0843デフォルトの名無しさん
2009/04/12(日) 13:16:00リニアに対応
0844デフォルトの名無しさん
2009/04/12(日) 13:21:100845デフォルトの名無しさん
2009/04/12(日) 13:22:25どうせ閑散としてるからいいじゃん。
このスレのレベルにお似合いの程度の質問だし。
0846デフォルトの名無しさん
2009/04/12(日) 13:35:36初耳です
高校までは出たんですが習ってないですね・・・
板違いはすいませんでした
実数値から 角度を戻り値として返す関数を作っていたもので
一度作ったのですが、ソースを紛失してしまい
もう一度作ろうとして数学のところでつまづきました
0847デフォルトの名無しさん
2009/04/12(日) 13:37:320848デフォルトの名無しさん
2009/04/12(日) 13:40:44VC++さん曰く、
「warning C4346: 'std::vector<t1<t>>::iterator' : 依存名は型ではありません。」
らしいのですが、よく分かりません。
template < typename t >
struct t1{};
template < typename t >
struct t2
{
typedef vector< int >::iterator iterator; //OK
typedef vector< t1< t > >::iterator iterator; //ERROR
};
0849デフォルトの名無しさん
2009/04/12(日) 13:47:57typedef typename vector< t1< t > >::iterator iterator;
かな?
0850デフォルトの名無しさん
2009/04/12(日) 13:50:070851デフォルトの名無しさん
2009/04/12(日) 13:50:10> 依存名は型ではありません。
「いや型なんだよ!」
って言ってあげればいいんじゃない?
正解は>>849も言う通り
typedef typename vector< t1< t > >::iterator iterator;
です。
0852デフォルトの名無しさん
2009/04/12(日) 13:54:13このサイト著作権侵害じゃね?
Scott Meyersから許可が出てるのか?
0853デフォルトの名無しさん
2009/04/12(日) 13:56:07出典も明確にしてるし、全く問題なし。
0854デフォルトの名無しさん
2009/04/12(日) 13:59:33引用分と地の文の境目が明らかでないし、
地の文と引用文が主従の関係をなしていないから、
これは引用の要件を満たしていないと思う。
0855デフォルトの名無しさん
2009/04/12(日) 13:59:36>全く問題なし
引用はその文脈からして許容されると考えられる最低限の量の場合だけ許されるんじゃない?
0856デフォルトの名無しさん
2009/04/12(日) 14:01:45とばした授業とかありませんでした?
0857デフォルトの名無しさん
2009/04/12(日) 14:04:25ありませんでした。
高校数学は、3年の夏休みまでに終わらせて、
あとはずっと受験対策でした。
0859デフォルトの名無しさん
2009/04/12(日) 14:08:58理系?文系?
数学3Cやった?
三角関数の微積分を習うなら度数法では実質的にはありえない。
0860デフォルトの名無しさん
2009/04/12(日) 14:18:06頭の中で先にラジアンで出てきて、とっさに度数に変換できなかったことがあるw
0861デフォルトの名無しさん
2009/04/12(日) 14:24:370862デフォルトの名無しさん
2009/04/12(日) 14:37:38三角定規を見ると30度とか60度とかいわないと違和感を感じる不思議
0863デフォルトの名無しさん
2009/04/12(日) 14:44:300864デフォルトの名無しさん
2009/04/12(日) 15:03:00こんなことやられると本を書いてるやつはたまらんな。
0865=852=854
2009/04/12(日) 15:22:31な、ひどいだろ。
まあ名著だからこそ起こる現象だろうが、
こういうヤツはソースコードとか余裕で無断使用してそうで
信用できないやつだな。
0866デフォルトの名無しさん
2009/04/12(日) 16:09:48じゃぁおまえやってみろよカスが
0867デフォルトの名無しさん
2009/04/12(日) 16:21:42たとえば文章が下手だとかっていうのに「じゃおまえが書いてみろよ」って言うのなら
わかるけど「丸ぱくりだろ」ってのに「じゃあおまえがやってみろよ」って言い返すのって
意味がわからん。
0869デフォルトの名無しさん
2009/04/12(日) 16:34:470870デフォルトの名無しさん
2009/04/12(日) 16:38:03だからカスなんだよ
きえろ
0871デフォルトの名無しさん
2009/04/12(日) 16:41:060873デフォルトの名無しさん
2009/04/12(日) 16:48:16なんでそんなに怒ってるの
まさかとは思うが>>850のリンク先の作者かい
0874デフォルトの名無しさん
2009/04/12(日) 16:50:270875デフォルトの名無しさん
2009/04/12(日) 16:53:45あー、>>866>>870は本人か。
そりゃまあファビョり出すわな。
>>850のリンク先は
Effective C++のところ以外の記事をちょっと見てみたら
普通に面白そうな記事だった。
単にEffective C++の丸パクが悪いだけで他のは良いサイトだと思う。
0876デフォルトの名無しさん
2009/04/12(日) 16:59:21よってたかっていじめたら
>>866=>>870
が泣いちゃうぞ。
0877デフォルトの名無しさん
2009/04/12(日) 17:21:320878デフォルトの名無しさん
2009/04/12(日) 17:23:080879デフォルトの名無しさん
2009/04/12(日) 17:35:161/(2*2)でも0
0880デフォルトの名無しさん
2009/04/12(日) 17:53:01/と*の優先順位を考えると、
1/2*2
は
(1/2)*2と解釈される。
そして(1/2)はint/intだから整数値に切り捨てられるので0
よって(1/2)*2は0*2となり0
0881デフォルトの名無しさん
2009/04/12(日) 18:04:320882デフォルトの名無しさん
2009/04/12(日) 18:08:17整数で演算すると少数が切り捨てられるってこと。
0883880
2009/04/12(日) 18:10:42え?俺は結構丁寧に説明したつもりなんだが。
その調子なら
例えば
BohYoh.com−C/C++ FAQ 整数値の平均を実数で求めようとしてもうまくいかないのはどうしてですか。
http://www.bohyoh.com/CandCPP/FAQ/FAQ00097.html
この辺とかも読んでおいた方がいい。
0884デフォルトの名無しさん
2009/04/12(日) 18:10:55///)
/,.=゙''"/
/ i f ,.r='"-‐'つ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\ しゃぶってくれ!!
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0885880
2009/04/12(日) 18:12:20あとまあ強いて言葉足らずだとすれば
>/と*の優先順位を考えると、
を
>/と*の優先順位を考えると、
>これらは同じ優先順位であり
>また左方結合な演算子なので
に読み替えてみてくれ。
0886デフォルトの名無しさん
2009/04/12(日) 20:07:41むしろあり難いアドバイスといった感じ。
ブログの内容がC言語の基本を全く理解していない状態で
「2週間アニメばかりみまくってます」
「3Dの勉強始めました」
「3Dの勉強やめました」
のような感じであれば辛口コメントも付いておかしくない。
----さんが書かれている通り、自分が公の場に情報を発信しているからには、
何らかの刺激を受けるはず。それに耐えられないなら発信すべきではありません。
と出たんだけど ブログって公の場になるん?
こんなブログにアクセスし、辛口コメントする方に問題があると思うんだが
0887デフォルトの名無しさん
2009/04/12(日) 20:58:35学校の課題研究で、自分を含める6人で段幕ゲーム(シューティング)を作ることに決まりました。
友達はJAVAが多少できる(HelloWorld程度とか?)のでJAVAがいいらしいですが、自分はCは基本くらいならできるのでCでいきたいと思ってます。
実際、手間や難易度からしてどちらでやるべきでしょうか?
0888デフォルトの名無しさん
2009/04/12(日) 20:58:43出たってどこで出たの?
0889デフォルトの名無しさん
2009/04/12(日) 21:04:19Javaが簡単。
0890デフォルトの名無しさん
2009/04/12(日) 21:05:27Javaみたいな糞言語使うな
脳が腐るぞ
0891デフォルトの名無しさん
2009/04/12(日) 21:08:02サンプルも豊富だし
0892デフォルトの名無しさん
2009/04/12(日) 21:09:090893デフォルトの名無しさん
2009/04/12(日) 21:18:45ありがとうございます
豊富とのことですので、C言語にします
0894デフォルトの名無しさん
2009/04/12(日) 21:21:210895デフォルトの名無しさん
2009/04/12(日) 21:23:3710分あればだれでも出来そうだな
0896デフォルトの名無しさん
2009/04/12(日) 21:26:57一年くらい?
Hello Worldからはじめたら、どっちにしろ遠い道のりだな。
0897デフォルトの名無しさん
2009/04/12(日) 21:28:06Javaなんかに足突っ込んだら近所のオバチャンレベルになってしまう
0898デフォルトの名無しさん
2009/04/12(日) 21:32:140899デフォルトの名無しさん
2009/04/12(日) 21:35:15Javaだと高速化が厳しいけどプラットフォームが多様
いっそのことFlashで作れw
0900デフォルトの名無しさん
2009/04/12(日) 21:35:440901デフォルトの名無しさん
2009/04/12(日) 21:37:06C言語のレベルは配列程度なら完璧にマスターしてるくらいです
0902デフォルトの名無しさん
2009/04/12(日) 21:37:550903sage
2009/04/12(日) 21:39:380904デフォルトの名無しさん
2009/04/12(日) 21:49:05オブジェクトを動かせそう。
0905デフォルトの名無しさん
2009/04/12(日) 21:58:53実に教科書も半分を過ぎたところなんだよね。
そして、その項目には恐るべきCの宣言構文の解析が含まれている。
前にこのスレ(じゃなかったっけ?)で話題になった
int *(*i)()[3];
こんな宣言を理解できるようになってようやく配列を理解したといえる
ということを意味しているのだった…あなおそろしや(アナ・コッポラは恐ろしくかわいいの意)。
0906デフォルトの名無しさん
2009/04/12(日) 22:18:07>int *(*i)()[3];
>こんな宣言を理解できるようになってようやく配列を理解したといえる
えーと。。。
iは
int型へのポインタを3個格納する配列を返す関数を指すポインタ
かな?
0907デフォルトの名無しさん
2009/04/12(日) 22:22:340908デフォルトの名無しさん
2009/04/12(日) 22:24:290909デフォルトの名無しさん
2009/04/12(日) 22:29:27int **func(void)
{
static int *a[3];
static int b[3] = {1, 2, 3};
int i;
for (i = 0; i < 3; i++)
a[i] = &b[i];
return a;
}
int main(void)
{
int **(*i)(void) = func;
int **a = i();
int j;
for (j = 0; j < 3; j++)
printf("%d\n", *a[j]);
return 0;
}
0910デフォルトの名無しさん
2009/04/12(日) 22:32:49配列を直接引数に渡したり、戻り値にできないのは
もともと配列名が定数だからだっけ?
といよりも、できないから定数になってるのかな。
0911906
2009/04/12(日) 22:42:47となるとより正確には
iは
int型へのポインタを3個格納する配列へのポインタを返す関数を指すポインタ
かな。
こんなコードが出てきたら、理解するよか先に
作ったヤツを探して問い詰める時間に充てたい。
0912デフォルトの名無しさん
2009/04/12(日) 22:48:01いやだからコンパイル通らないって
やってみろ
0913デフォルトの名無しさん
2009/04/12(日) 23:06:53こんなお馬鹿な書き方をしなければならない
こんなプログラムをスラスラ何の苦もなく書ける奴がいたら
頭がどうかしてる
int *(*func(void))[3]
{
static int *a[3];
static int b[3] = {1, 2, 3};
int i;
for (i = 0; i < 3; i++)
a[i] = &b[i];
return &a;
}
int main(void)
{
int *(*(*i)(void))[3] = func;
int *(*a)[3] = i();
int j;
for (j = 0; j < 3; j++)
printf("%d\n", (**a)[j]);
return 0;
}
0914デフォルトの名無しさん
2009/04/12(日) 23:07:30…というような場合には、関数の引数は
ポインタ渡しを使うより参照渡しで統一した方がいいんでしょうか?
0915デフォルトの名無しさん
2009/04/12(日) 23:22:20その理由はポインタか参照かの選択要素にならんだろうな
0916デフォルトの名無しさん
2009/04/13(月) 00:03:11値渡しなら全然違うけど
Javaはプリミティブ型を除けば、全部参照(ポインタ)渡し
0917デフォルトの名無しさん
2009/04/13(月) 01:29:47参照は参照先を変更できないし(キャストしたらしらないけど)、
必ず初期化されるから、できることなら参照使ったほうが安全。
もちろん、ポインタにはポインタの利点があるけど。
0918デフォルトの名無しさん
2009/04/13(月) 01:47:52まあ実際にやるとしたらtypedef使うわな。
>>910
アセンブリ言語で考えると配列を引数で戻すという実装が有り得ない
(結局、呼出元が戻り値を格納する配列を用意し、そこへのポインタを引数で渡すなどといった形になってしまう)
というのが根本的な理由だと思う。構造体の戻り値もANSIの前はできなかったみたいだし。
所詮、高級アセンブラなんだろうよ。
0919デフォルトの名無しさん
2009/04/13(月) 03:29:20>int *(*func(void))[3]
これは初見だな
参考になるthx
0920デフォルトの名無しさん
2009/04/13(月) 03:31:420921デフォルトの名無しさん
2009/04/13(月) 08:29:30無理やり配列を返すように書いてみたけど、やはりコンパイルエラー
char func()[6]
関数は配列を返せません。
関数から、配列へのポインタを返すことはできますが、配列を返すことはできません。
void func(char buf[6])
こう書いたところでbufはchar*扱いだしな
でもそれはCの仕様であり、アセンブラとは関係ないと思うぞな
スタックに引数や戻り値の領域を確保しさえすれば
配列だろうが構造体だろうが渡し放題
0922デフォルトの名無しさん
2009/04/13(月) 09:14:39struct tag {
char str[6];
};
struct tag func(struct tag aa) // 引数は値渡し
{
static struct tag ab;
printf("func aa:%s\n", aa.str);
aa = *(struct tag*)"world"; // aaはローカル変数
ab = *(struct tag*)"world";
return ab;
}
int main()
{
struct tag aa;
struct tag ab;
aa = *(struct tag*)"hello";
ab = func(aa);
printf("main aa:%s\n", aa.str);
printf("main ab:%s\n", ab.str);
return 0;
}
配列で渡せなくても構造体で包めば渡せる
func aa:hello
main aa:hello
main ab:world
0923デフォルトの名無しさん
2009/04/13(月) 10:12:35そのポインタを渡すってのはだめ?
んでもってアクセッサでガリガリに固めちゃう。
0924デフォルトの名無しさん
2009/04/13(月) 10:34:13staticにする必要はないな
0925デフォルトの名無しさん
2009/04/13(月) 15:41:390926デフォルトの名無しさん
2009/04/13(月) 17:20:14Intのポインタを返す3個の関数ポインタだと思ったのだが違うのか。orz
0927デフォルトの名無しさん
2009/04/13(月) 19:59:49解析:
intへのポインタ (*f[3])();
intへのポインタを戻り値とする引数なしの関数 (*f[3])
intへのポインタを戻り値とする引数なしの関数へのポインタ f[3]
intへのポインタを戻り値とする引数なしの関数へのポインタの配列3個 f
0928デフォルトの名無しさん
2009/04/13(月) 20:01:400929デフォルトの名無しさん
2009/04/13(月) 20:14:24宣言・定義構文解析って入門レベルの基礎だろ。
つまり、int a,*b; すらも理解できてないってことだ。
これが理解できとけば、int *(*i)()[3]; も理解できる。
0930デフォルトの名無しさん
2009/04/13(月) 20:20:08int *(*f[3])();
0931デフォルトの名無しさん
2009/04/13(月) 20:32:32int[3] a;
int(*)[4] func(int, int);
はだめなの?
0932デフォルトの名無しさん
2009/04/13(月) 21:25:58K&Rにも「酷評される」って書いてある。
なんにせよ、K&Rには
とてもわかりやすい解析の仕方が載せてあるので
入門レベルの話であることには違いない。
0933デフォルトの名無しさん
2009/04/13(月) 21:35:42と書けちゃったら
int a = 1, &b=a, *c = &a, d( int ), (*e)( int ) = d, f[1] = { a };
みたいな宣言ができなくなっちゃうじゃないか。ははは。
0934デフォルトの名無しさん
2009/04/13(月) 21:48:09int[3] a;
int a[3];
両方書けるけど、前者のがいいみたい
0935デフォルトの名無しさん
2009/04/13(月) 22:10:22僕的には
>int a = 1, &b=a, *c = &a, d( int ), (*e)( int ) = d, f[1] = { a };
は近視なの。清く正しく美しく全てにintつけるの、うふふ
0936デフォルトの名無しさん
2009/04/13(月) 22:42:59SpeechSDKにも付属していますが日本語のがほしいです・・
0937デフォルトの名無しさん
2009/04/13(月) 23:09:350939taguti
2009/04/14(火) 16:03:57(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。
・公式:底辺x高さ÷2を使って計算してください。
お願いします!!
0940デフォルトの名無しさん
2009/04/14(火) 16:05:35規制されてろ
http://pc12.2ch.net/test/read.cgi/tech/1237091698/493
http://pc12.2ch.net/test/read.cgi/tech/1232055225/770
http://pc12.2ch.net/test/read.cgi/tech/1217575832/499
http://pc12.2ch.net/test/read.cgi/tech/1235927586/774
http://pc12.2ch.net/test/read.cgi/tech/1212498448/876
http://pc12.2ch.net/test/read.cgi/tech/1212409946/66
http://pc12.2ch.net/test/read.cgi/tech/1217575832/499
http://pc12.2ch.net/test/read.cgi/tech/1192201659/808
http://pc12.2ch.net/test/read.cgi/tech/1205156417/821
http://pc12.2ch.net/test/read.cgi/tech/1238032584/16
http://pc12.2ch.net/test/read.cgi/tech/1224719784/934
http://pc12.2ch.net/test/read.cgi/tech/1235921779/939
http://pc12.2ch.net/test/read.cgi/tech/1205156417/822
0941デフォルトの名無しさん
2009/04/14(火) 22:47:22トンコードを改修して、エディタ内の文字列の長さを取得しようとしても0になる。
何で。
TEditViewクラスを継承したクラスから取得するので、OWL APIリファレンスの
ヘルプで調べると、そのTEditViewの基底クラスであるTStaticクラスの
GetTextLimit()メンバ関数で取得できるはずなのに。
uint n1 = this->GetTextLimit();
で0が返される。
代わりにパブリックなデータメンバのTextLimitでもだめだ。
n1 = this->TextLmit;
でも0が返される。
コンパイラ: Turbo C++ 5.01J for Win32
オペレーティングシステム: Windows XP Home Edition
0942デフォルトの名無しさん
2009/04/16(木) 20:34:41具体的には、以下の様なものです。
unsigned int dof = m_q_cur_in.data.length();
double Pgain[dof];
Pgain[0] = m_gain_p_0;
Pgain[1] = m_gain_p_1;
g++では正常に動作するのですが、
移植性の問題が発生しないかわかりません。
0943デフォルトの名無しさん
2009/04/16(木) 20:42:570944デフォルトの名無しさん
2009/04/16(木) 20:49:37最終的にはよくある形のソフト?(上に青いバーがあって右上に最小最大閉じるがあって項目にファイルだのヘルプだのがあるような奴)
を作れるようになりたいと思っているのですが次はどのような参考書を買えばよいのでしょうか?
WinAPIだの.NETだのが次のステップなのでしょうか?
0945デフォルトの名無しさん
2009/04/16(木) 20:50:58'\0' と '0'の具体的な違いって一体何なんでしょうか?
配列の最後に入っているのが前者だってことはわかるんですけども・・・・
0946デフォルトの名無しさん
2009/04/16(木) 20:53:140947デフォルトの名無しさん
2009/04/16(木) 20:56:31'0' == 32
0948デフォルトの名無しさん
2009/04/16(木) 20:58:04その「よくある形のソフト」ならVC#expressで一瞬でできるよ。
0949デフォルトの名無しさん
2009/04/16(木) 20:58:09'0' == 48
0950デフォルトの名無しさん
2009/04/16(木) 21:02:270951デフォルトの名無しさん
2009/04/16(木) 21:06:56unsigned char buf[256] = "\0000";
printf("%d %d %d\n", buf[0], buf[1], buf[2]);
0 48 0
0952デフォルトの名無しさん
2009/04/16(木) 21:09:330953デフォルトの名無しさん
2009/04/16(木) 21:10:40定数じゃ無くて、変数で配列のサイズを決めたいと言うことです。
C99で出来るようになったようですが、
C++にも適応されているか分からないのです。
0954デフォルトの名無しさん
2009/04/16(木) 21:17:18そして、できません。
constat expression のみです。
0955デフォルトの名無しさん
2009/04/16(木) 21:26:37>そして、できません。
>constat expression のみです。
g++の独自仕様なのかな…
0956デフォルトの名無しさん
2009/04/16(木) 21:35:03C99では出来るようになったとかいう話は俺も聞いた。
そしてC++ではコンパイル時定数以外で配列の個数の指定は出来ない。
やりたければnewでヒープに動的確保するしかない。
0957デフォルトの名無しさん
2009/04/16(木) 21:40:420で始まる整数リテラルは8進数だから
0は何進数でも0だろバカ
0958デフォルトの名無しさん
2009/04/16(木) 21:41:58Windowsに移植されるかもしれないので、
無難にnewを使います。
質問に答えてくれた方、有難うございました。
0959デフォルトの名無しさん
2009/04/16(木) 21:45:120960デフォルトの名無しさん
2009/04/16(木) 21:50:26vectorの事が、今頭に無かったです。
サンクス
0961デフォルトの名無しさん
2009/04/16(木) 21:56:21ランダム関数を説明している本の中に以下の一文がありました。
srand((unsigned int)time(NULL));
初期化にsrandを使うというのは分かるのですが、
普通に
srand(time(NULL));
ってやっても問題なく動きます。
ここで「unsigned int」に型キャストする意味はあるのでしょうか?
0962デフォルトの名無しさん
2009/04/16(木) 22:07:35srandの唯一の引数の型はunsigned intだが、
timeの戻り値の型time_tはunsigned intとは限らないという理由。
ようするに警告を避けるため。
0963デフォルトの名無しさん
2009/04/16(木) 22:15:42SetWindowLong(..., (LONG)(LONG_PTR)WndProc);
というキャストをしないとウォーニングが消えないとかあるしw
0964956
2009/04/16(木) 22:29:09>>960
ああ、確かに俺もstd::vectorを
薦める一言を入れるべきだったな。
boost::scoped_arrayとか面白いけど、
普通に配列の代わりとして使うなら
やっぱstd::vectorだなぁ。
0965デフォルトの名無しさん
2009/04/16(木) 22:43:14VC++のことなら/Wp64を使わなければいい。どうせ、VC++ 2005から非推奨になっていることだし。
その種のエラー・警告がほしければ実際に64ビット対象でコンパイルしてみろということらしい。
0966デフォルトの名無しさん
2009/04/16(木) 22:47:24なるほど。
分かりやすくありがとうございます。
0967デフォルトの名無しさん
2009/04/16(木) 23:07:37ttp://xn--n9q36mh1hnxuksz7wt.jp/FE19b-pm/t06.html
の「プログラム」で、/* 90度右回転 */というところがあるのですが、
なぜ、 printf("%c", in[CSZ - j - 1][i]);ということになるのかよくわからないのです。
もうちょっと上の方に、
先頭行: dat[0][0], dat[0][1], … , dat[0][4], dat[0][5]
↓ ↓ ↓ ↓
右端列: dat[0][7], dat[1][7], … , dat[4][7], dat[5][7]
と書かれているのですが、だったら
printf("%c", in[i][CSZ-j-1]); ということになりそうな気がしたんです。
0968デフォルトの名無しさん
2009/04/16(木) 23:13:007で固定だからjが変わったらだめだよね
0969デフォルトの名無しさん
2009/04/16(木) 23:25:47ああ、言われてみればそうでした・・・
だけどこの*で表したFっていう文字を右回転させると配列が横長?になるじゃないですか。
そうすると in[6][8]になりそうなのに、in[8-j-1][i(6が最大)] なのが引っかかってしまうんです。
0970デフォルトの名無しさん
2009/04/16(木) 23:37:35[a]のif文でrowとcolを替えるんでしょ
酷いプログラムだけど。。
0971デフォルトの名無しさん
2009/04/16(木) 23:44:35void invert(int, char[][]);
0972デフォルトの名無しさん
2009/04/16(木) 23:46:38一応rowとcolを入れ替えてrow == CSZ(8), col == RSZ(6)
になってるみたいですけど、
forの中では i の値が 0 から 6 までの値で動いているじゃないですか。
んでもって j が 0 から 8 までの値じゃないですか。
in[][]に入っているのは[7から0までの値][0から5までの値]ってことになるじゃないですか。
そこら辺がやっぱりよくわかんないんです。
>>971
試してみたんですけど通りませんでした。
0973デフォルトの名無しさん
2009/04/16(木) 23:49:39無理
void invert(int, char[][*]);
とか
void invert(int, char[][10]);
とかじゃないと
0974デフォルトの名無しさん
2009/04/16(木) 23:54:45>forの中では i の値が 0 から 6 までの値で動いているじゃないですか。
>んでもって j が 0 から 8 までの値じゃないですか。
>in[][]に入っているのは[7から0までの値][0から5までの値]ってことになるじゃないですか。
case 1は、それでいいんじゃないの?
0975デフォルトの名無しさん
2009/04/16(木) 23:58:10case1だと右回転ですので、
ttp://xn--n9q36mh1hnxuksz7wt.jp/FE19b-pm/pm06-1.gif
のように元のパターン in[8][6]→ 90度右回転 in[6][8]にならないとおかしいような気がするんです。
0976デフォルトの名無しさん
2009/04/17(金) 00:01:27配列の中身はそのままで、配列から読みだして表示する順番を90度回転させてるだけだよ。
0977デフォルトの名無しさん
2009/04/17(金) 00:02:25なるほど!ようやくわかりました。ありがとうございます。
0978デフォルトの名無しさん
2009/04/17(金) 09:23:34内蔵のは測定したくないのも測定します
関数単位で測定したいです
0979デフォルトの名無しさん
2009/04/17(金) 11:02:32表示のさせ方がわかりません、、、
VC++2005でマルチバイトビルドという環境です。
MS UI Gothicにはコピーライト文字がないため、今は(C)のようにせざるをえないのですが
どのようにしたら表示可能でしょうか?
0980デフォルトの名無しさん
2009/04/17(金) 11:10:28WM_SETFONT
0981デフォルトの名無しさん
2009/04/17(金) 12:08:15UNICODEにすればいいよ
0982デフォルトの名無しさん
2009/04/17(金) 12:14:54LOGFONT やCFontでそれはできるのですが、いかんせんコピーライトマークそれ自体が
取得できないのです、
0983デフォルトの名無しさん
2009/04/17(金) 12:25:370984デフォルトの名無しさん
2009/04/17(金) 12:40:00申し訳ないです。
ユニコードにできない事情がありまして、、
部分的にユニコードを使用する方法はありますでしょうか?
半角カナのウを試してみましたが、ウとでました。。
0985デフォルトの名無しさん
2009/04/17(金) 12:45:42そのラベルだけDEFAULT_CHARSET使うのやめて、DEFAULT_ANSIにしてTAHOMAとかを
使うならばもしかしていけますかね
0986デフォルトの名無しさん
2009/04/17(金) 13:22:54最初に構造体にカードの絵柄と数字を収め、その中からランダムに選んだカードを
自分の手札に加えていきます。また主な特徴として、最初から決まった領域を
確保するのではなく、カードを取る度にcallocでメモリ領域を確保していきます。
(カードを取る枚数によって確保する領域が変化するため。なお、mallocは使ってはいけないという指定があります。)
コンパイルや実行も成功し、結果も考えていた通りの物が表示されました。
しかし、きちんと結果が表示されるのは30%程度で、残り70%はセグメントエラーになります。
色々な箇所にフラグを立てて判定していった結果、どうやらcallocが悪さをしているのではないかという結論に至りました
。
そこで、メモリ領域の確保に失敗した場合はエラー表示を行い、直ちにプログラムを終了するように書き換えたのですが、
エラー表示がされることなく、相変わらずセグメントエラーが出続けています。
エラー時に共通していることは、何れも1回目のループで弾かれていることです。
このように、同じコード、同じ実行ファイルで失敗したり成功したりというのはどのようなことが考えられるでしょうか?
なお、callocで作られた領域はプログラム終了時にそれぞれfreeされています。
0987デフォルトの名無しさん
2009/04/17(金) 13:25:340988デフォルトの名無しさん
2009/04/17(金) 14:45:32ソースを見せろ
0989デフォルトの名無しさん
2009/04/17(金) 15:45:47「結果」とか「1回目のループ」とか
説明が足りないからよくわからないよ。
0990デフォルトの名無しさん
2009/04/17(金) 15:51:18ポインタ関係のバグだろ
0991デフォルトの名無しさん
2009/04/17(金) 16:10:240992デフォルトの名無しさん
2009/04/17(金) 16:58:21あるいはコンパイラが未成熟の環境とか。
まあ、どのみちこういうのは真っ先にポインタが境界を侵していることを考えるべきだが
0993デフォルトの名無しさん
2009/04/17(金) 17:10:57症状が再現する最小限のソースを
見いだして俺達に見せてくれないと
>>991の言う通りエスパーじゃないと答えられない。
0994デフォルトの名無しさん
2009/04/17(金) 17:17:35uint64_tでも手札管理に十分すぎるじゃねーか
0995デフォルトの名無しさん
2009/04/17(金) 17:46:57WM_SETTEXTなどをSendMessageWで送りつければいい。
ダイアログだからそれはないと思うけど、自前でWM_PAINTで描画しているならTextOutWなどを呼ぶ。
0996デフォルトの名無しさん
2009/04/17(金) 17:47:27デッキを二つ使ってとかいろいろ夢を見てた
0997デフォルトの名無しさん
2009/04/17(金) 19:02:25その書き方だとcallocで確保した領域じゃなく
不定領域になっちゃうよ(;^ー^)
0998デフォルトの名無しさん
2009/04/17(金) 19:06:50コンパイラはGNU C Compiler
ソースファイルは
#include <stdio.h>
int main (void)
{
printf("基本?");
return 0;
}
です。始めたばかりなのでなにがなんだか…。本の通りにやってるはずなのですが…。
0999デフォルトの名無しさん
2009/04/17(金) 19:13:07で、窓が開いて、実行、窓閉じる、の流れで。
コマンドプロンプト等を開いてから、
実行ファイル名を指定しる。
1000デフォルトの名無しさん
2009/04/17(金) 19:21:4810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。