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


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

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



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

445 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 23:52:34 ]
>>443
例えば80486以降のインテル系CPUはSTOSB STOSW STOSDという三つの命令があり、
それぞれバイト、ワード、ダブルバイト単位でレジスタから転送を行う。
他のCPUでもサイズに応じた専用のインストラクションを持っていることはよくある。
そのどれを使うかとかいったヒントになる可能性があると思う。

446 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 23:53:00 ]
clear?


447 名前:445 mailto:sage [2007/12/17(月) 23:53:15 ]
ダブルバイトってなんだよ。ダブルワードの間違いな。

448 名前:デフォルトの名無しさん [2007/12/17(月) 23:56:16 ]
>>445
なるほど。ありがとうございます。
しかしその程度なら、要求されたサイズの下位数ビットを見れば判断できる気もするが・・・。

449 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 00:05:43 ]
>>443

callocは一応「配列を確保する関数」だからじゃない?

最適化に関しては↓がヒントになるかも。
www.bohyoh.com/CandCPP/FAQ/FAQ00096.html


450 名前:デフォルトの名無しさん [2007/12/18(火) 00:09:54 ]
>>449
最適化については何も解説していないような・・・


451 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 01:03:49 ]
>>420
ファンダメンタルかよ

452 名前:デフォルトの名無しさん [2007/12/18(火) 02:16:52 ]
signed型へ<<や>>演算したときの結果の符号ビットや符号拡張有無って
規格で決まっていますか?


453 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 02:32:06 ]
>>452 いいえ。



454 名前:デフォルトの名無しさん [2007/12/18(火) 09:57:37 ]
C++ 初心者です。C++ でこんなコードを見かけたのですが、 struct S { S( int x ) : x_( x ) {} int x() { return x_; } int x_; }; 2 行目の意味がわかりません。とくに x_( x ) {} の部分が頭の中でパーズできないんですが、これは何を定義しているの?

455 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 09:59:38 ]
: x_( x ) だな
x_をxで初期化している

コンストラクタ初期化子とかでぐぐると幸せになるかも

456 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 10:37:10 ]
この書き方で「2行目の意味が」ってのも凄いな
ナチュラルな喧嘩の売り方するなぁと感心したw

457 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 10:42:22 ]
コンストラクタの初期化子で配列の初期化ってできる?

458 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:07:46 ]
>>457
組み込み配列についてはできません。 std::vector ならできます。

459 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:26:54 ]
>>458
ありがとう
じゃあコンストラクタ内で普通に代入するか


もう一つ質問
固定長配列にvectorを使う意味ってある?
あるとしたら何?

460 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:34:14 ]
>>459
サイズの管理も一緒にしてくれる。
未来永劫何があってもサイズが変わらない場合を除けば、この利点は小さくない。

461 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:35:23 ]
>>459
多くの実装では assert() などでデバッグ用の範囲チェックが入っている。
begin(), end() があるので標準アルゴリズムが使いやすい。
要素の比較に基づく比較演算子が定義されている。
安全で軽い swap() が使える。

462 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:02:09 ]
C言語でvoid型の関数を任意の場所で終了させるにはどうすればいいのでしょうか?
何か値を返せる関数ならreturnすればいいと思うのですが
voidなのでreturnをすると怒られてしまいました

463 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:04:39 ]
return;



464 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:05:52 ]
>>462
void func(){
return;
}

465 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:09:42 ]
>>462
void func()
{
...;
goto end;
...;
end:
}
or
void func()
{
...;
if (0) {
...;
}
}

466 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:15:41 ]
>>460-461
サンクス

467 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:16:11 ]
ああ、なるほど
値さえ返さなきゃ怒られないんですね
0を返しておりました

468 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:20:25 ]
>>460
static const int foo[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
みたいな固定長配列なら、sizeof(foo) / sizeof(* foo)でsize()相当だと思うが、それでもメリットだと?

469 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:23:26 ]
STLのコンテナとして使える

470 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:26:16 ]
boost::array

471 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:50:19 ]
じゃあそれポートして使いまする

472 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:51:25 ]
固定長配列テンプレートはいいよね
余分な領域取らないし

473 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:59:15 ]
boost::checked_deleteってそんなに役に立つか?



474 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:03:58 ]
初心者でも何か作れる物はないだろうか?

475 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:05:18 ]
>>474
アドレス帳
ノベルゲーム
etc

476 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:07:47 ]
>>475
ノベルゲームを作れるお勧めのwindows上で動く
アプリとかありませんかね。


477 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:20:59 ]
C言語でいいじゃん
printfとscanfで作れるぞ

478 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:25:14 ]
おまえらって何が目的でC言語使ってんの?

479 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:29:21 ]
>>473
なんで役に立たないと思うの?
あと、 boost スレに行ったほうがいいかもね。

480 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:45:48 ]
>>478
プログラミングするのが楽しいから

481 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:18:50 ]
まともに仕事で使おうとすると、
boostなんてフリーのライブラリは、
使用許可がおりない件について

誰が責任もてるの、って怒られるぜよ

482 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:34:04 ]
boostからポートした自作ライブラリを使うんだよ

483 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:36:43 ]
それを言い出すと、gccや下手すればLinuxそのものも使えなくなる罠。



484 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:41:40 ]
>>483
プロジェクトの種類や客の流儀とかなんとかで、
そのとおりな制約がつく仕事も実際、けっこうある。

・・・いや、あった。もう地獄から永久に開放されて
こんな時間に2chしてる俺にはどうでもいい話

485 名前:デフォルトの名無しさん [2007/12/18(火) 15:46:46 ]
参照のつかいかたがよくわからないので教えてください。POCO::Loggerというライブラリをつかっています。
hasがLoggerのポインタを返して、getが参照を返します。createで作ります。
POCO::Logger* buff = POCO::Logger::has("hoge");
if (buff == NULL) {
  // 無いから作る
  POCO::Logger& logger = POCO::Logger::create("hoge");
  logger.information("@@@@@");
} else {
  // あるから使う
  POCO:Logger& logger = POCO::Logger:get("hoge");
  logger.information("@@@@@");
}
// @ほんとはここでlogger.information("@@@@@")にして、↑の@@@@@出力部分は消して共通化したい
というコードは動くんですが、最終行で出力する処理を入れて
共通化したいんですけど、参照ってポインタみたいにいれないでおくとかができないと思っています。
このような実装はみなさんどのようにされていますか?

486 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:51:11 ]
>>481
フリーとは言っても誰が作ってると思う?
使用許可を出さない奴本人に
『おまえが判断できる程のレベルかよ?』
って言い返す。

487 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:52:29 ]
>>479
不完全型のチェックにしか使えないよね。
全く役に立たないとは思わないけど、あえて使う意味はあるのかと。

488 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 16:13:45 ]
>>485
POCO::Logger & logger = buff == NULL ? POCO::Logger::create() : POCO::Logger::get();
logger.information();

489 名前:デフォルトの名無しさん [2007/12/18(火) 16:22:40 ]
>>488
ぉぉすばらしい。ありがとうございます。そのような発想はありませんでした。
ちょっとトリッキーな気がするのですが、C++で参照を使うときは常識ですか?

490 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 16:45:28 ]
C++と言わず参照と言わず、割と使うけど。
Cでもこんなのとか。
FILE * fp = fileName == NULL ? stdin : fopen(fileName, "r");

491 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:52:49 ]
>>490 の
FILE * fp = fileName == NULL ? stdin : fopen(fileName, "r");
って どのように分解(解釈)されるの?

492 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:57:10 ]
>>491
fileNameがNULLだったらstdin、そうでなければfileNameをfopen()した結果をfpに代入。

493 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:05:23 ]
>>492
有難うございます。日本語ではそうなるのですか。
すみません、この1行をC言語に1行ごと(ステップ)に分解して書いたらどうなるのですか?



494 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:11:18 ]
FILE *fp ;
if( fileName == NULL )
{
fp = stdin ;
}
else
{
fp = fopen(fileName,"r");
}

495 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:12:19 ]
まあ、参照は初期化必須だから、>>488を分割して書く事は出来ないがな。

496 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:12:26 ]
FILE * fp =
fileName == NULL
? stdin
: fopen(fileName, "r");

497 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:13:39 ]
boost::optionalをパクればいい

498 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:23:44 ]
>>494
有難うございました
そうなるのですか、なんか>>490だと読みにくいですね

>>495
となると、参照のときは読みにくい構文使うしかないということですね

499 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:56:32 ]
>>498
俺が三項演算子を使うときは、条件部を必ず(単項式であっても)括弧で括ってる。
>>490の例の場合は、
FILE * fp = (fileName == NULL) ? stdin : fopen(fileName, "r");
まぁ、この辺は各々のスタイルの問題。

読みにくさについては内容の複雑さによりけりで、たとえば
int n = (hoge) ? 10 : 20;
程度の内容をif-else文で書くと、俺の感覚だと「無駄に物々しい」感じがして、逆にわかりにくいかな。

500 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:12:34 ]
三項演算子は禁止、
って、けっこうコーディングルールにされることが多い

501 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:18:45 ]
生粋の三項演算子erな漏れには辛い職場だ

502 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:29:24 ]
>>498
こんなんでもいんじゃね?

POCO::Logger* buff = POCO::Logger::has("hoge"), *logger;
if (buff == NULL) {
  // 無いから作る
  logger = &POCO::Logger::create("hoge");
} else {
  // あるから使う
  logger = &POCO::Logger:get("hoge");
}
logger->information("@@@@@");

というかhas()が返すアドレスの実体はgetで得られるインスタンスとは別物なん?
同一ならそのまま使えるだろうけど

503 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:29:27 ]
ff



504 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:36:13 ]
例外処理のthrowのメリットは?
普通に関数にとばすのはだめなのかい

505 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 20:21:22 ]
普通に関数に飛ばすとは、どういうやり方?
throwは関数の呼び出し元の呼び出し元の呼び出し元の・・・にずーっと遡っていけるところに意味がある

506 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 20:23:41 ]
昔のCのように、abort()を呼ぶとかそういう話?

507 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 20:53:58 ]
>>504の考える例外的な事態というのは、その場でプログラムを終了するタイプ「のみ」なんじゃないかな。
確かに、すぐ終了するのであれば、例外処理の存在意義である「簡潔かつ強力に特定の段取りまで戻る」
能力は要らないからね。

>>504
でも、例外発生後もまだプログラムを続行させる場合、「関数に飛ばして」例外処理を実現しようとすると、
結構面倒というか、入り組んでしまうことがある。
f1()から呼んだf2()から呼んだf3()から呼んだf4()の中で何か「例外的な状態」になった場合、f4()内に
if (失敗したという証拠) {
  例外処理();
  return 失敗したという合図;
}
を書くだけでなく、場合によってはf2()やf3()も、その「合図」がちゃんとf1()のもとへ帰っていけるよう、
バケツリレーのような構造の実現に協力しなくちゃならなくなったりするわけだ。
その例外は、自分とは直接関係ないことなのにね。

508 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 21:01:10 ]
ただやっぱり、Joelもいってるように、例外はきちんと
ハンドリング出来ているかが、コード面を眺めたくらいでは
すぐには判らないという弱点があるね。

戻り値ベース:
fp = fopen(filename, "w");
fwrite( var, 1,len,fp );     //ププ。エラー処理忘れやがんの。

例外ベース:
fs = new FileStream( filename, WRITE );
fs.Write( var ); //ファイル無かったら例外投げるから、
                   //呼ぶ側で対処しろと言うことかな〜?

509 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 21:07:30 ]
>>420
インターフェースが結構違うのでわからないんです

参考に見た6.0の解説を上げてみると
〜〜〜
左フレームのFileメタブをクリックして、Source FileのGlSampleView.cppファイルを開く
右のフレームに現れるソースファイル上で、右クリック。表示メニューのClassWizardを選択する←この時点で分からない
ここでViewクラスのメッセージ処理をカスタマイズする。
メッセージ欄から「WM_CREATE」を選択して関数追加ボタンをクリックする。
するとOnCreate()関数がGlSampleView.cppファイルに自動的に追加される。
〜〜〜

クラスウィザードのようなものは別の方法で見つけたんですがすると4行目のWM_CREATEが無い
といったように前に進みません

510 名前:339 mailto:sage [2007/12/18(火) 22:32:05 ]
1>index.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::Init(void)" (??0Init@ios_base@std@@QAE@XZ) が
関数 "void __cdecl std::`dynamic initializer for '_Ios_init''(void)" (??__E_Ios_init@std@@YAXXZ) で参照されました。
1>index.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ) が
関数 "void __cdecl std::`dynamic atexit destructor for '_Ios_init''(void)" (??__F_Ios_init@std@@YAXXZ) で参照されました。
1>D:\ta\c\works\online\Debug\dos.exe : fatal error LNK1120: 外部参照 2 が未解決です。


===index.cpp====
#include <iostream>

int main() {
std::cout << "Kitty on your lap";
return 0;
}
===============

/O2 /D "_MBCS" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt

/OUT:"D:\ta\c\works\online\Debug\dos.exe" /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\dos.exe.intermediate.manifest"
/SUBSYSTEM:CONSOLE /ERRORREPORT:PROMPT kernel32.lib


リンクがうまくいってないってことかな?
ちゃんとライブラリフォルダをC:\Program Files\Microsoft Platform SDK\Libに設定しているのだが・・。

511 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 23:00:25 ]
たまに見かけるけとKitty on your lapて何なん?
調べてみたらゲームみたいだけどあれが元ネタ?

512 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 23:35:44 ]
>>510

iostreamってSDKじゃないだろ。


513 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 23:36:20 ]
猫でも分かるの人がサンプル文字列に使ってたな。
さらなる元ネタはよくわからないが。



514 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 00:07:13 ]
古いギャルゲーのタイトル

515 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:29:06 ]
問題分が
以下の手順を従い、経路選択アルゴリズムを評価せよ。

通信の発生:ランダムに送受信ノードを決定する。
通信の確定:与えられた送受信ノードの経路を決定し、その経路上のリンクの空き容量を1Mbpsだけ減少させる。
         ただし、空き容量のないリンクが存在する場合、この通信は確立しなかったものとして、何も行わない。
通信の終了:n回前に発生した通信の経路上の空き容量を1Mbpsだけ増加させる。ただし、その通信が確立していなかった場合には何も行わない。
評価:10000回の通信を発生させ、そのうちで確立できなかった通信の割合を求める。
試行の繰り返し:nの値を変えながら、上記の試行を繰り返す


プログラム自体(kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5554.txt)は拾ってこれたのですが
どこにグラフを入力していいのか分からなく困っています。
ちなみにグラフは以下に書きます
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5555.txt
左と中央がノードで右がそれをつなぐリンクの容量です。

516 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:38:58 ]
宿題スレへ

517 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 02:08:39 ]
>>508
戻り値だってコード面見てエラー処理の抜けは気づきにくい。

Joel とかが言ってるのは、エラー処理に問題のあるコードと
適切なコードとの違いが微妙すぎるって言う問題。まぁこっちの問題も
一緒といえば一緒なんだけどな。処理の順番とか。

518 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 09:00:37 ]
VC++ 2005での関数インライン化について教えてください。
通常、インライン関数は定義をヘッダに書かないとコンパイル
できませんが、/LTCGオプションでリンク時のモジュール間
インラインを指定すると以下のようなコードがビルド可能
だと思ったのですが、実際はリンクエラーとなります。
もちろんinlineキーワードを外すとビルドできます。
/LTCGを指定してもinlineキーワードを付けるとインライン
対象関数の定義は呼び出しソースファイルから可視でなくて
はいけないのでしょうか?/LTCGのリンク時モジュール間
インラインの正しい使用法を教えてください。

//aaa.hヘッダーファイル
double MySquare(double);

//aaa.cppソースファイル
inline double MySquare(double d)
{
 return d * d;
}

//bbb.cppソースファイル
#include "aaa.h"

int main()
{
 double d = MySqiare(3.14);
}

519 名前:デフォルトの名無しさん [2007/12/19(水) 09:15:43 ]
よく空間的局所性の高いコードは速いとかいいますけど、最近のx86で
あるアドレスの値を読み込むと、その先何バイト位がキャッシュに載るんですか?

520 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 09:46:40 ]
VC8(VC2005)で

template<class T>
std::list<T>::iterator MoveListItr(std::list<T> *pLst)
〜略〜

というSTLのイテレータを返すテンプレートが、イテレータの記述部分
(std::list<T>::iterator)で「型ではない」とエラーが出ます。

VC7まではこれで通ったのですが、文法に問題があるのでしょうか?
それともVCの問題なのでしょうか?

521 名前:デフォルトの名無しさん [2007/12/19(水) 09:53:01 ]
template<class T>
      typename std::list<T>::iterator MoveListItr(std::list<T> *pLst)

522 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:00:51 ]
>>520
typename std::list<T>::iterator MoveListItr(std::list<T> *pLst)
って書けばいいんじゃないかな。

いわゆる特殊化ってやつがあるせいで、classname<T>::hogeという記述だけでは、
hogeが値なのか型名なのか断定できない。
そういう場合、「これは型名ですよ」というのをコンパイラに教えるために、typenameを書く。

今回のVC7と8の違いは、「ここは関数の戻り値の型を書く場所だから、型名に決まってるよな」
とコンパイラが判断したか否か、の違いだと思うんだけど、
VC7の気が利いているのか、VC8が「VC7が無視した何らかの可能性」を見て断定を避けたのか、
どっちなのかは俺にはわからないや。

523 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:03:56 ]
単に規格に準拠するようにしただけじゃねえの?



524 名前:デフォルトの名無しさん [2007/12/19(水) 10:12:15 ]
>いわゆる特殊化ってやつがあるせいで
特殊化は無関係

525 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:13:50 ]
>>521-523
なるほど、そうだったんですか。
おかげで解決しました、ありがとうございます。

526 名前:りょう ◆RyOrlro88Q [2007/12/19(水) 10:46:02 ]
ループが止まりません><

#include<stdio.h>

#define N 20

main(){
char ch[N],a,word='^';
int num,i,j;

j=0;
printf("Input your name.(When the input is finished,type ^.)\n");

for(num=0;ch[num]!=word;num++){
printf("ch[%d]=",num);
scanf(" %s",&ch[num]);
}
printf("target:");
scanf(" %c",&a);

for(i=0;i<num;i++){
if(ch[i]==a){
j++;
}
printf("%c=%d\n",a,j);
}
}

527 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:04:06 ]
>>526
最初のループの終了条件がおかしい。

528 名前:りょう ◆RyOrlro88Q mailto:sage [2007/12/19(水) 11:09:43 ]
ループは自己解決><

次は判定に問題が…><

529 名前:りょう ◆RyOrlro88Q [2007/12/19(水) 11:30:49 ]
jが増えない><

#include<stdio.h>

#define N 20

main(){
char ch[N],a,word='^';
int num,i,j;

j=0;
printf("Input your name.(When the input is finished,type ^.)\n");

for(num=0;ch[num]!=word;num++){
printf("ch[%d]=",num);
scanf(" %s",&ch[num]);

if(ch[num]==word){
break;
}
}
printf("target:");
scanf(" %c",&a);

for(i=0;i<num;i++){
if(ch[i]==a){
j++;
}
}
printf("%c=%d\n",a,j);
}

530 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:34:56 ]
ちったあ自分で考えないと成長しないぜ

531 名前:りょう ◆RyOrlro88Q [2007/12/19(水) 11:40:58 ]
考えてるけどわからないんです><

532 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:43:39 ]
>>528
他にも色色問題が。scanf()で一文字ずつ入力なんて阿呆なことしないで、
fgets()で1行分まるっと入力してしまえばいいじゃん。
あと、'^'による終了判定も無意味。

533 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:45:26 ]
つーか、>529ではループの判定条件がバグったままじゃんw



534 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:46:26 ]
何故増えないんだと思う?
具体的な場所はともかく、どの辺が間違ってそうな気がする?

本当はデバッガを使うのが良いんだろうが、printfデバッグっていう手法だってある。
それっぽい箇所にprintfを挿入するだけで見えてくるかもよ。

535 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:47:57 ]
ブロックの前後や中で満たすべき条件を式のかたちで書き出してみてはどうか

536 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:51:01 ]
紙と鉛筆使って机上でプログラムを実行してみるのもいい。
どこで意図しない動作になっているかすぐ分かる。

537 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:53:22 ]
>>518について詳しい人いませんか?

538 名前:りょう ◆RyOrlro88Q [2007/12/19(水) 11:57:29 ]
解決できました><

ありがとうございましたm(__)m

>>532
それが指定なんですよ><

>>534
そんな方法なんて知りませんでした><

539 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:01:09 ]
ほほぉ。それじゃ、スレよごしの罰として完成したソースを貼ってもらおうか。

540 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:06:58 ]
>>118
ttp://ml.tietew.jp/cppll/cppll/thread_articles/11083#ar11086

541 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:07:22 ]
>>537
inline指定無しでも最適化でインライン展開してくれるんじゃないの?
明示的にinline指定したい積極的な理由でもあるなら兎も角、そうでないならコンパイラに任せたら?
つーか、iccだとinline指定をつけると却ってコンパイラが混乱するみたいだ。

542 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:11:03 ]
>>540
番号間違ってる。
しかし、そのリンク先のエピたんの弁によれば、
inline指定してある関数を別の翻訳単位から見つけてくるiccはおかしなことになるね。

543 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:22:09 ]
7.1.2.4を見てextern inlineにしたら通った



544 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 13:00:43 ]
// aaa.h
extern inline double MySquare(double);

// aaa.cpp
double MySquare(double d){...}

// main.cpp
#include "aaa.h"

int main() {
 double d = MySquare(3.14);
}

一応gcc3.4とvc8でいけた
external linkageなinline指定つきの関数宣言がどうたらこうたら書いてあるけど理屈はよくわかんね

545 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 13:28:11 ]
>>540
>>541
>>542
>>543
ストラップ本にはinline定義とあるので、おそらく
無理なんでしょうね。
extern inline定義にしたらVC 2005では実行できましたが、
g++ v4では無理でした。移植性考えたらやはり素直にヘッダーに
定義を書いたほうが無難ですね。






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

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

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