C/C++小心者スレッドPart1
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/08/05(日) 06:18:18関連スレやURLは>>2以降。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す
・FAQを読む 例えば http://www.bohyoh.com/CandCPP/FAQ/index.html
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、コンパイラ名)
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって小心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
宗教的な話題は禁止します。
0153デフォルトの名無しさん
2008/09/15(月) 17:11:17デバッガ
0154デフォルトの名無しさん
2008/09/15(月) 19:12:51for(j = 1;j < i;j++){
if(i % j == 0){
primecounter++;
}
1とそれ自身で割れるかどうかをチェックしてるのにj < iだと自身で割ることなく終了する
j <= iに変えれば自分で割ったときもチェックできる
0155トミー ◆xb8eIST5.k
2008/09/15(月) 21:51:15C言語を始めようと思い、いろいろなページを見てみたら、ほとんどにおいて
「まずコンパイラをダウンロードしましょう」と書いてあり、中でも例として
Borland C++ 5.5がよく書いてあったので、これをダウンロードしてみようと
思いました。
http://www.codegear.com/jp/downloads/free/cppbuilderで「C++ Compiler
5.5/Turbo Debugger」をクリックし、個人情報も登録しましたが、最後に出てき
たダウンロードボタンを押してみると、「サーバーが見つかりません」と出てしま
いました。
見ると、「上記のダウンロードサイトにアクセスできないときは、CodeCentral の
ダウンロードページをお試しください。CodeCentralのダウンロードページを利用
するには、CDNへのログインが必要です。」と書いてあるので、「CDNへのログイン」
の文字をクリックしてみましたが、英語のページで、Login nameやpasswordを入力
する欄が出てきました。(日本語のページもあるようです。)
わたしはCDNには会員登録していません。CDNに登録しないと、C++ Compiler 5.5/
Turbo Debuggerをダウンロードすることはできないのでしょうか。
回答お願いします。
0156デフォルトの名無しさん
2008/09/15(月) 22:02:22環境は、VC++6.0です。
class CBase
{
public:
CBase& operator=(int val) {}
};
class CDerived : public CBase {};
int main()
{
CDerived val = 1; // この行で、コンパイルエラー
return 0;
}
エラーメッセージは、
C2440: 'initializing' : 'const int'から'class CDerived'に変換すrことはできません。
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロード レゾリューションがあいまいです。
0157137
2008/09/15(月) 23:29:29ありがとうございます
肝心なところですね
カーソルが点滅したまま終了しないですが、、
何度も申し訳ございませんが、何が問題か分かる方お願いします。
0158デフォルトの名無しさん
2008/09/15(月) 23:33:54operator =はCDerivedで定義される暗黙のやつがCBaseのを隠してしまう。
だから、CDerivedで定義し直すなどしないといけない。
もっとも、CDerived val = 1で行われるのは代入ではなく初期化なので、
そういうことをやりたければ、CDerivedにint型の引数を取るコンストラクタを作る必要がある。
0159デフォルトの名無しさん
2008/09/15(月) 23:59:55回している回数じゃないかな
Sigma[i=1...499998]i = 499998*(1+499998)/2 = 124999250001
待っていればいつか終わると思うよ
0160デフォルトの名無しさん
2008/09/16(火) 00:05:22{}の位置が悪い
自分より小さい数で割るたんびにcountを0に戻してる
自分より小さい数で全部割りおわってからcountが2であるかどうか調べないと
0161156
2008/09/16(火) 00:21:21なるほど、そういうことか。
確かに、operator=を定義していなくても、オブジェクトの代入とか出来ますからね。
あれは暗黙で定義されているからってことか。一つ賢くなりました。
ありがとうございます。
0162137
2008/09/16(火) 01:03:17ありがとうございます。
デバッガで見てみると回ってはいるようなので、しばらく待ってみることにします。
>>160
基本的なアルゴリズムが間違っていたのですね、、
ありがとうございます!
0163デフォルトの名無しさん
2008/09/17(水) 14:09:120164デフォルトの名無しさん
2008/09/17(水) 14:42:160165デフォルトの名無しさん
2008/10/04(土) 23:05:01それでoperator+=で文字列の代入結合まではなんとかできたのですが、
operator+の定義がうまくできません。
CString a, b, c;
a = "abc";
b = "def";
c = a + b; //"abcdef"にならない
デバッガで確認したところ、
CString CString::operator+(CString& str)
{
CString temp(*this);
temp += str; //ここまではうまくいっている。
return temp; //ここでデストラクタが呼び出されて、正しい結果を返せない。
}
一応デストラクタはこんな感じです。
CString::~CString()
{
if(ptr) delete[] ptr;
}
tempをstatic宣言したら、結合はうまくいったのですが、プログラム終了時に例外が出るようになってしまいました。
どうすればうまくいくのかどなたか教えて下さい。
0166デフォルトの名無しさん
2008/10/04(土) 23:14:22コピーコンストラクタとoperator=作ってる?
0167デフォルトの名無しさん
2008/10/04(土) 23:16:070168165
2008/10/05(日) 08:09:11operator=は作っていたのですが、コピーコンストラクタは作っていませんでした。
(operator= を定義しておけば必要ないと思っていたもので・・・)
コピーコンストラクタを作ったところ、うまく動作するようになりました。
どうもありがとうございました。
0169デフォルトの名無しさん
2008/10/05(日) 08:46:10足し算が出来るんだよ? コンパイル通るのかよ
0170デフォルトの名無しさん
2008/10/05(日) 10:41:380171デフォルトの名無しさん
2008/10/05(日) 11:27:46temp += str; //ここまではうまくいっている。
0172デフォルトの名無しさん
2008/10/05(日) 11:38:200173デフォルトの名無しさん
2008/10/05(日) 11:40:140174デフォルトの名無しさん
2008/10/06(月) 14:08:04型の宣言って複数の関数をまたいでするって出来ないのかな?
うまく説明出来ないんで悪いんだけど
例えば
read.cpp
global.h
test.cpp
の3つがあった場合。
read.cpp内でint型を宣言するとread.cppで宣言した型を使った関数を作る(ここで代入)。
次にglobal.h内でread.cppで作った関数をextern void 何々();とする。
そして、test.cppでglobal.hをインクルードして、test.cpp内でread.cppで作った関数内で代入されたint型を読み込ませたい。
記述は間違ってないと思うんだけど、ビルドするとtest.cppで読み込んだはずの代入されたint型が読み込まれてなくて、定義されてないと出る
・・・初歩的な事で悪いんだけど、根本が違うのかな?ご教授お願いします。
0175デフォルトの名無しさん
2008/10/06(月) 14:11:48「int型を宣言」とか「int型を読み込む」とか、かなり奇怪な話になっててよくわからん。
どうせ単純なミスかなんかだろ。実際のコード晒してみるのがいいよ。
0176デフォルトの名無しさん
2008/10/06(月) 14:19:44ReadingFile.cpp
int enemy_img;
void readingfile(){
enemy_img = LoadGraph("date/img/enemy.bmp");
}
GlobalM.h
extern void readingfile(); //全ての素材
enemy_move.cpp
void enemy_move_02(){
move02.enx+=sin(PI*move02.eny/80)*5;
move02.eny+=1.5f;
DrawGraph( move02.enx , move02.eny , enemy_img , TRUE ) ;
↑ここでReadingFile内の関数で指定したのを読み込ませたい。
DeleteGraph( enemy_img ) ;
}
0177デフォルトの名無しさん
2008/10/06(月) 14:28:55extern int enemy_img;
0178デフォルトの名無しさん
2008/10/06(月) 14:35:16ありがとおおお
でもどうしてintも読み込ませないといけないんだ?
既にReadingFile.cppで読み込んでいるし、多重定義になるかと思ってた。
0179デフォルトの名無しさん
2008/10/06(月) 14:47:41他のソースに何か書いてあっても、
今コンパイルしてるソース (と、そのインクルード先) に書いてなければ、コンパイラには判らない
0180デフォルトの名無しさん
2008/10/06(月) 15:15:44コンパイラはその「あるはず」という仮定をオブジェクトファイルに埋め込む。
そしてリンカが全部のオブジェクトファイルからその変数を探して、実際のアドレスに直す。
(見つからなかった場合はリンクエラーになる)
0181デフォルトの名無しさん
2008/10/16(木) 01:38:42どなたかお答えいただけませんか?
0182デフォルトの名無しさん
2008/10/16(木) 02:10:05ttp://www.microsoft.com/japan/msdn/vstudio/Express/
これじゃだめなの?
0183デフォルトの名無しさん
2008/10/16(木) 03:47:20先週C++を始めたばかりなので色々と書き方が解りません;;
考え方は解るのですが……
二乗や平方根などなど……
0184デフォルトの名無しさん
2008/10/16(木) 04:27:08//
// 2つの円の重なりをチェックする。
//
// 引数
// x1, y1, r1 円1の中心x座標、中心y座標、半径
// x2, y2, r2 円2の中心x座標、中心y座標、半径
//
// 戻り値
// 0: 接する 正: 離れている 負: 重なる
//
int circle_check(int x1, int y1, int r1, int x2, int y2, int r2)
{
return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) - (r1+r2)*(r1+r2);
}
0185デフォルトの名無しさん
2008/10/16(木) 15:19:36srandのソースコードってどこにありますか?
0186デフォルトの名無しさん
2008/10/16(木) 16:02:430187181
2008/10/16(木) 19:24:11参考書を買って勉強しようと思っているのですが、その参考書で
『C++ Compiler 5.5/Turbo Debuggerをダウンロードして、それを使って勉強』
なものだったので、別のソフトだと操作方法がわからないんじゃないかと不安だったのです・・・。
とりあえずこれでやってみます!回答ありがとうございました。
0188デフォルトの名無しさん
2008/10/16(木) 20:24:04・CString 形式のデータで""hogehoge""というデータが入っていた場合、
前後のダブルクォーテーションを簡単に除去する方法はありませんか?
・char buff[255][3][255] のようなデータをファイルで入出力したいのですが、
何か良い方法はありませんか?
0189デフォルトの名無しさん
2008/10/16(木) 21:18:55メモリマップドファイルとstd::stringならsubstr
0190デフォルトの名無しさん
2008/10/16(木) 21:36:55特定のコード上で右クリックすると確実にフリーズするんですが
似たようなケースさらには対処法あったら教えてください。。
ググったけどほとんど情報が無く、似たような質問がされている所も未だ解答がなかったとです。。
原因は調査中です。ヘッダーファイルを適当にインクルードしまくったから無限ループ起きたか?
と思って全部コメントアウトしてみたけど無意味でした。。
他の情報としては、
普通はマウス乗せたらメンバの情報が出てきますが、そのコードではそれすら出てきません。
一応左クリックおよびファイルの編集はできます。
右クリックだけ永久砂時計が発動します。
他も何か手がかりになりそうな所あれば探したいんで
アレがひっかかってるんじゃね? とか言っていただけると助かります。
0191190
2008/10/16(木) 22:42:32ちょっと他のところで聞いてみます。
0192デフォルトの名無しさん
2008/10/16(木) 22:44:030193デフォルトの名無しさん
2008/10/16(木) 22:51:43と思ったらこんなタイミングで……なるほど。
しかしDream SparkでDLした奴なんでもう一度isoをDLできるかどうか……?
MSに報告したほうがいいんでしょうかね。
0194190
2008/10/16(木) 23:35:13別件ですがついでにこちらで質問してみたいことが。
bool b1,b2,b3,b4;があって、
if(b1 && b2 && b3 && b4)
{ 〜〜 }
のようにやることは
if(b1){
if(b2){
if(b3){
if(b4){
〜〜
}
}
}
}
のようにやる事と同じように働いてくれるんでしょうか?
それとも前者はb1〜b4をすべて求めてから論理積を計算し、
後者はfalseがあった時点で処理をやめる、という違いが生じるんでしょうか?
前々から疑問に思っていました。
0195デフォルトの名無しさん
2008/10/16(木) 23:42:58分岐予測より、論理積のコストは少ない
0196デフォルトの名無しさん
2008/10/16(木) 23:46:47短絡評価と言って、左から順に見ていきfalseが出てきたら残りは評価されない。
だから上と下のどっちの書き方でも同じ意味になる。
もちろん、実際にコンパイラがどういうコードを吐くかは別として。
0197190
2008/10/16(木) 23:51:54本当ですか、安心しました。
短絡評価、まぁ考えてみたら、してくれないとスマートじゃないですよねw
実測とかしたことない……やっぱそういう経験も役に立つんですね。
ありがとうございましたm(__)m
0198デフォルトの名無しさん
2008/10/17(金) 00:54:32亀レスだけどサンクス、調べてみるよ。
0199デフォルトの名無しさん
2008/10/17(金) 02:49:46str.trim('\"')でできそう!
0200デフォルトの名無しさん
2008/10/17(金) 09:01:45メルセンヌツイスターのソースを使えば良いジャマイカ
0201デフォルトの名無しさん
2008/10/17(金) 14:06:39商用に組み込んだとしても問題にならないのでは
0202デフォルトの名無しさん
2008/11/04(火) 18:46:54具体的にソースを挙げて教えてください。
よろしくお願いします。
0203デフォルトの名無しさん
2008/11/04(火) 18:58:54char buf[適当な長さ];
fgets(buf, sizeof(buf), stdin);
0204デフォルトの名無しさん
2008/11/04(火) 19:18:29返信ありがとうございます。
0205デフォルトの名無しさん
2008/11/05(水) 14:47:28typedef DWORD wBuffer[32];
bBuffer A;
wBuffer B;
AからBにキャストするにはどうすればよいのでしょうか?
でるぴだと B:= wBuffer(A); なんですけど
0206デフォルトの名無しさん
2008/11/05(水) 15:24:37代入したいのならmemcpy()でも使う。
それにしてもObjectPascalは、型が緩いんだろうか。
0208デフォルトの名無しさん
2008/11/07(金) 16:14:41ttp://www.thinkit.co.jp/cert/article/0711/2/5/2.htm
に載ってるところ探しても無いんですが
0209デフォルトの名無しさん
2008/11/07(金) 23:43:090210デフォルトの名無しさん
2008/11/08(土) 01:32:35ここですね
ttp://wiiyourself.gl.tter.org/
どうもです
0211デフォルトの名無しさん
2008/11/08(土) 02:14:04スレチならごめん
今、ユーグリット云々つかって最大公約数を求めるプログラム作ってて
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7968.txt
ってとこまではできたんです。2つはできるんですけど
問題は3つ以上の数を調べるときなんです。普通に文字数を増やして計算させるだけじゃできないようで、
いろいろしたんですけど詰まってしまいまして
どこをどう変更すれば、3つ以上の数の最大公約数をしらべるプログラムになるのでしょうか
0212デフォルトの名無しさん
2008/11/08(土) 02:15:220213デフォルトの名無しさん
2008/11/10(月) 19:33:43¥r¥nかよ!
ゲイツのバカヤロー!
0214デフォルトの名無しさん
2008/11/10(月) 19:58:35何をいまさら。 UNIX原理主義者は始末に終えんな。
それは、デジタルリサーチのCP/M-80(CP/M-86)との互換性を保つために
そうなっている。 文句があるなら、墓の下で眠るゲイリーキルドールに
言え。
ちなみに、OS-9の行末コードは'\r'のみだ。
0215デフォルトの名無しさん
2008/11/10(月) 20:31:530216デフォルトの名無しさん
2008/11/11(火) 07:09:03staticはどう言った変数や関数に付ければ良いのでしょう。
staticの働き事態はわかるのですが・・・
0217デフォルトの名無しさん
2008/11/11(火) 08:44:01・関数
外部に公開しない全ての関数につける。
単一ソースファイルでプログラムを作るのなら、staticをつけないのはmain()だけでいい。
・変数
自動変数で事が足りない場合。
関数外部で宣言したい場合で、外部に公開する必要がない場合。
0218デフォルトの名無しさん
2008/11/11(火) 12:09:23例:
String^ variable = "C:ファイル名";
Bitmap^b = gcnew Bitmap(variable); // エラー
0219デフォルトの名無しさん
2008/11/11(火) 13:04:540220デフォルトの名無しさん
2008/11/11(火) 15:47:57_declspec(align('16'))の仮引数は配置されません
とエラーが出てしまいました。vectorのせいだと思うのですが、このエラーは
どういったときに出るのでしょうか・・・
0221デフォルトの名無しさん
2008/11/11(火) 17:35:36usleep が無いと言われたのですが、usleep は unistd.h に入ってるはずですよね?
ちなみに Darwin の cc でコンパイルしたときはうまくいきました
/usr/include/unistd.h をみてみると
#if defined(__USE_BSD) || #defined (__USE_XOPEN_EXTENDED)
...
#endif
で囲まれてました。そこで cc に -D__USE_BSD オプションをわたしてみたものの
やっぱり定義されてないと言われます。
ubuntu の cc で usleep を使うときはなにかしらやり方があるのでしょうか?
0222デフォルトの名無しさん
2008/11/11(火) 17:49:13> POSIX.1-2001 では、この関数は過去のものと宣言されている。代わりに nanosleep(2) を使うこと。
> POSIX.1-2008 では、 usleep() の規定が削除されている。
とか書いてあるので、代わりに nanosleep を使ってみたらどうだろう
0223デフォルトの名無しさん
2008/11/11(火) 18:07:14ansi cにusleep()などない!
0224デフォルトの名無しさん
2008/11/11(火) 23:26:53まさかとは思うが、"C:\\ファイル名"とかいうオチじゃないだろうなw
0225221
2008/11/12(水) 09:58:31情報どうもです。
とりあえず
#ifndef __USE_BSD
# define __USE_BSD
# include <unistd.h>
# undef __USE_BSD
#else
# include <unistd.h>
#endif
としてその場をしのいだんですが、そのうち nanosleep を使うように書き直したいと思います
0226デフォルトの名無しさん
2008/11/14(金) 03:21:41以下のように書いたのですがリンクエラーが出ます
#include <crtdbg.h>
・
・
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// メモリリーク検出
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
・
・
・
}
エラー内容
Game�T error LNK2019: 未解決の外部シンボル __CrtSetDbgFlag が関数 _WinMain@16 で参照されました。
他にも何かインクルードする必要がありますか
開発環境はVS2003で、OSはWinXP_SP3です
0227デフォルトの名無しさん
2008/11/14(金) 08:05:07リンクエラーと自分で書いてるだろ
するべきことはインクルードではない
0228デフォルトの名無しさん
2008/11/14(金) 12:54:300229デフォルトの名無しさん
2008/11/14(金) 20:37:240230226
2008/11/14(金) 23:40:50なぜゲ製板とわかるのでしょうか
>>228
DebugかReleaseのとこですよね
Debugにしています
よくわからないので新規プロジェクトで試したらできました
これに少しづつ作ったものを貼り付けていって原因を探してみる
0231デフォルトの名無しさん
2008/11/15(土) 23:28:04例として、
「2 3 5 6」
「2 3 1 3 4 5 2」
というスペースで区切られた数があり、これらをそれぞれ別の配列に格納したいのです。
入力は
2 3 5 6(ここでエンター)
2 3 1 3 4 5 2
となります。
コードと一緒に解説してくださるとありがたいです。
0232デフォルトの名無しさん
2008/11/16(日) 00:16:280233デフォルトの名無しさん
2008/11/16(日) 00:52:12C++で、コンパイラのように構文解析をする処理などを勉強できる書籍はないでしょうか?
プログラム板に初めてくるので、このスレでいいのか判断に迷いますが、、、
よろしくお願いします。
0234デフォルトの名無しさん
2008/11/16(日) 01:03:270235デフォルトの名無しさん
2008/11/16(日) 01:12:08以下の様に書いてみましたが、インライン関数MUSTOKの行数でエラーが起こった、もしくは、assert関数がある行が
表示されてしまいます。できればこの関数MUSTOK(0==1);がある行が知りたいのですが、どうしたらよいでしょうか?
実行環境
gcc バージョン 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
ubuntu8.4
ソースコード
==
#include <cassert>
#include <iostream>
inline void MUSTOK(bool cond)
{
if(!cond)
{
std::cout<<"file=:"<<__FILE__<<"\tlie=:"<<__LINE__<<std::endl;
}
assert(cond);
}
int
main(int argc,char *argv[])
{
MUSTOK(0==1);
return 0;
}
==
実行結果
file=:assert_test.cpp lie=:7 assert_test: assert_test.cpp:9: void MUSTOK(bool): Assertion `cond' failed. Aborted
0236デフォルトの名無しさん
2008/11/16(日) 01:21:33MUSTOKをマクロで実装するしか。
0237デフォルトの名無しさん
2008/11/16(日) 01:23:50backtrace,backtrace_symbolsってのを使うとどこから呼び出されてるか表示出きるみたいだよ。
0238デフォルトの名無しさん
2008/11/16(日) 10:42:04233です。ありがとうございました。
書泉に行ったときに探してみます。
0239デフォルトの名無しさん
2008/11/16(日) 12:33:25その実行の終了を待って、hogeのmain関数が返した値を取得したいのですが、
どうすればよいでしょうか?標準のC関数だけでできますか?
0240デフォルトの名無しさん
2008/11/16(日) 12:40:350241デフォルトの名無しさん
2008/11/16(日) 12:50:22メモ帳で開くにはどうすればよいでしょうか?
ご教授お願いします。
0242デフォルトの名無しさん
2008/11/16(日) 12:58:13あとは
http://www.google.co.jp/search?q=C%8C%BE%8C%EA+system
から探しなー
0243デフォルトの名無しさん
2008/11/16(日) 13:06:03馬鹿も休み休み言ってください。
>>239
一般的に、アプリはsystem()で起動すればmain()の戻り値を回収できる。
但し、GUIアプリなどで動いているにも拘らずすぐに戻ってきてしまう場合は、
コマンドインタプリタ(command.comとかbashとか)の支援が必要になる。
コマンドインタプリタを介在させたくなければ、そこでやっと>240の言うようなAPIの出番となる。
>>241
system("notepad any.txt")でいいとして、そのテキストファイル名を可変にしたいなら
文字列を組み立てればいい。
0244デフォルトの名無しさん
2008/11/16(日) 13:36:09たとえば
「File %1 is too long.」 ⇒ 「File "C:\hogehoge.foo" is too long.」
みたいな。
変換先文字列分拡張して memmove で必死に頑張ってもいいんだけど、
ATL/WTL 使ってるのでそれらのライブラリで便利なのがあればいいなぁと
思って…
教えてエロい人><
0245デフォルトの名無しさん
2008/11/16(日) 13:39:01%1を適当に変換してから、sprintf()
0246デフォルトの名無しさん
2008/11/16(日) 13:40:180247デフォルトの名無しさん
2008/11/16(日) 13:40:470248デフォルトの名無しさん
2008/11/16(日) 13:48:57そうか、%1 じゃなくて別にいいんだもんね。
「File %s is too long. (sizeof: %s. current: %s)」
とかにして順番に sprintf の引数に積めばいいのか!
>>247
STLワカンネ・・・orz
でもせっかくなので勉強してくるYO!
即レスthx!!!
みんな優しいね。大好き。
0249デフォルトの名無しさん
2008/11/16(日) 21:02:140250デフォルトの名無しさん
2008/12/17(水) 02:15:02for(;;)
{
scanf("%c",&input);
if(input == 'S' || input == 's')
{
printf("GAME START!¥n);
}
else if(input == 'Q' || input == 'q')
{
printf("GAME QUIT¥n");
return 0;
}
else
{
printf("input failed¥nPlease input again¥n");
}
}
どこを変更すれば、2度表示されなくなるでしょうか。
よろしくお願いします。
0251デフォルトの名無しさん
2008/12/17(水) 02:35:15scanf()の後に、
if ( input != '\n' ) {
while ( (c = getchar()) != '\n' ) {
; /* 意図した空文 */
}
}
こういうの追加しておくとか。
scanf()で文字ではなく文字列受け取って、最初の要素だけ利用するとか。
fgets(,,stdin)で、上記と同じようにするとか。
ゲーム作っているみたいだから、がんばってとしか言えないけど。
0252デフォルトの名無しさん
2008/12/17(水) 07:48:35■ このスレッドは過去ログ倉庫に格納されています