• 締切済み

プログラミングおかしいところ探してください

#include<iostream> using namespace std; int main() { int i = 0; char a[128]; cout << "やあ" << endl; cin >> a; while (i<= strlen(a)){ if (a[i] == 'ワ'&&a[i + 1] == 'ン'){ cout << "ニャア"; i = i + 2; } else if (a[i] == 'わ'&&a[i + 1] == 'ん'){ cout << "にゃあ"; i = i + 2; } else{ cout << a[i]; i++; } } return 0; } キーボードから入力された文字に「ワン」「わん」があれば「ニャア」「にゃあ」と言い換えるプログラムを組もうとしたのですが、デバックするとエラーが出ます。 'Project2.exe' (Win32): 'C:\Users\kazuaki\Documents\Visual Studio 2013\Projects\Project2\Debug\Project2.exe' が読み込まれました。シンボルが読み込まれました。 'Project2.exe' (Win32): 'C:\Windows\System32\ntdll.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 'Project2.exe' (Win32): 'C:\Windows\System32\kernel32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 'Project2.exe' (Win32): 'C:\Windows\System32\KernelBase.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 'Project2.exe' (Win32): 'C:\Windows\System32\msvcp120d.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 'Project2.exe' (Win32): 'C:\Windows\System32\msvcr120d.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。 プログラム '[5180] Project2.exe' はコード 0 (0x0) で終了しました。 何がまずいのでしょうか。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

source.cpp(9): warning C4018: '<=' : signed と unsigned の数値を比較しようとしました。 ってことで、一応ビルドは通りましたね。 signedの変数iとunsignedのstrlen()の戻り値での比較ってことですかね。 # strlen()の戻り値はsize_tでしたが。 >if (a[i] == 'ワ'&&a[i + 1] == 'ン'){ とかはintへの暗黙の型変換でもされたかと。 まぁ、期待通りに動作しないことに変わりはありませんが。 #1にて書かれているので細かいことは書きませんけど。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

本当にこのプログラムなんだとしたら, そもそもコンパイルできないのでは.

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

charは1バイトまでしか文字が入りません。 よって、char1つで漢字やカナを表わすことはできません よって a[i] == 'ワ'&&a[i + 1] == 'ン' はほぼ確実に成り立ちません。 あと > PDB ファイルを開けないか、ファイルが見つかりません。 これは、デバッグ時に、元のソースコードの情報を読み出そうとしてが見つからない、ということですが 通常、配布されていたりOSの付属していたりするDLL等は、デバッグ情報を削除してあり、読めないのが通常です。 よって、このメッセージは無視していいです

関連するQ&A

  • プログラミング

    以下のC++で書かれた以下のプログラムのコンパイルができません。理由を教えてください。 #include <iostream> #include <vector> #include <algorithm> istream& read(istream&, std::vector<double>&); double median(std::vector<double>); int main(){ std::vector<double> a; read(std::cin, a); std::vector<double>::iterator itr; while(itr != a.end()){ std::cout << *itr; } std::cout << median(a) << std::endl; } istream& read(istream& is, std::vector<double>& v){ double b; if(is){ while(in >> b) v.push_back(b); } return is; } double median(std::vector<double> a){ int i; if(a.size() == 0) { return -1; } i = a.size() / 2; if(a.size()%2 == 1) return (a[i]); else return ((a[i] + a[i-1])/2); }

  • 助けてください、SUPER(C)というソフトについて

    先日海外のメディアファイルを変換できるフリーソフトウェア、SUPER(C)というソフトをDLしました。 海外のソフトなのですべて英語、その上何度試してもエラーばかりなのでアンインストールしました。 後でよくよく調べてみると、SUPER(C)というソフトをアンインストールすると変なファイルをPCの中に残していくということがわかりました・・・。 C:\Program Files\AviSynth 2.5\plugins\ C:\Program Files\AviSynth 2.5\plugins\colors_rgb.avsi C:\Program Files\AviSynth 2.5\plugins\DirectShowSource.dll C:\Program Files\AviSynth 2.5\plugins\TCPDeliver.dll C:\Program Files\AviSynth 2.5 C:\WINDOWS\meta4.exe C:\WINDOWS\MOTA113.exe C:\WINDOWS\x2.64.exe C:\WINDOWS\system32\avisynth.dll C:\WINDOWS\system32\AVSredirect.dll C:\WINDOWS\system32\CoreAAC.ax C:\WINDOWS\system32\devil.dll C:\WINDOWS\system32\DiracSplitter.ax C:\WINDOWS\system32\i420vfw.dll C:\WINDOWS\system32\RLOgg.ax C:\WINDOWS\system32\RLSpeexDec.ax C:\WINDOWS\system32\RLTheoraDec.ax C:\WINDOWS\system32\RLVorbisDec.ax C:\WINDOWS\system32\Smab.dll C:\WINDOWS\system32\x.264.exe C:\WINDOWS\system32\yv12vfw.dll 某掲示板の書き込みによると以上のファイルを残すとのこと。 上から数えて8個目までの物は全て削除しました。 system32に含まれるものは怖かったのでそれに含まれるファイルはまだ放置したままです。 1.これら21個のファイルは全て削除してもいいのでしょうか? 2.SUPER(C)をインストール、アンインストールすることで受ける害は上の21個のファイルを残すことだけなのでしょうか? この2つのことについてどなたか教えてください。

  • 「駆除」ではなく、「削除」できますか?

    以下の感染ファイルは「駆除」ではなく、「削除」できるのでしょうか? ●C:\web.exe Backdoor.Win32.Dumador.fg ●C:WINDOWS\dvpd.dll Backdoor.Win32.Dumador.eo ●C:WINDOWS\msxmidi.exe Backdoor.Win32.Dumador.fg ●C:WINDOWS\system32\winldra.exe Backdoor.Win32.Dumador.fg どなたかお解かりの方、教えてください。

  • TrojanDownloader.Stubby

    特に不具合は感じていなかったのですが、 ESETでスキャンすると C:\WINDOWS\SYSTEM32\in7bMs.dll > CAB > bi.dll - Win32/TrojanDownloader.Stubby.A トロイ C:\WINDOWS\SYSTEM32\in7bMs.dll > CAB > preInsBI.exe - Win32/TrojanDownloader.Stubby.C トロイ というのが二つ検出されました。 自動削除されなかったのですが、これらはin7bMs.dll ごと削除してしまって良いものでしょうか。御教示頂ければ幸いです。

  • 「猫でもわかるC++ プログラミング」の内容で

    猫でもわかるC++ プログラミングで学習している入門者です。 非常にわかりやすく初心者に親切な入門書です。 そこで質問です。 - 184 - int main() { char i; for (i = '!'; i <= '~'; i++){ cout << setw(3) << dec << (int)i << "(0x" << hex << (int)i << ") -- " << (char)i << " "; if ((i - '!'+1) % 4 == 0) cout << endl; } cout << endl; return 0; } とありますが、if ((i - '!'+1) % 4 == 0)は4列表示のためとはわかりましたが、その意味(特に (i - '!'+1) のところがわかりません。 初心者ですので、的外れな質問かもしれませんね。 ご存知の方は、初心者に分かるようにご教授願います。

  • C#からCで作成したDLLにステップインできません

    C#からCで作成したDLLにステップインできません。 対策としては以下を行いましたが、ステップインできませんでした。他の対策を知っていたら教えてください! 環境:C#, CともにVS2008, Windows XP professional ・プロジェクトのプロパティのデバッグタブで、「アンマネージのデバッグを~」にチェックを入れる。 ・完全なソースを必要とするのチェックをはずす。 ・C#のexeと同一DIRにdllと、pdbファイルを配置する。 ・全てデバッグでコンパイルする。

  • 2つのcppファイルから

    1つのexeファイルを作る必要性が出てきました。 (現在質問中の質問に関連しています。) 例えば file.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } void main(void) { for(int i=0;i<9;Output(i++)); } をコンパイルリンクすれば済むことを file1.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } file2.cpp: void main(void) { for(int i=0;i<9;Output(i++)); } という風に分かれているファイルをコンパイルリンクしなければならないのです。 cpp -e file.exe -c file1.cpp -c file2.cpp ではエラーになります。 どうすれば良いのでしょうか?

  • 猫でもわかるプログラミング161章

    http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm にDLLを使ったメッセージフックについて説明があるのですが、どうもその通りにやってもうまくいきません。 まず、 1.dll作成する際にlibが生成されない。 2.ヘッダファイルに #define EXPORT extern "C" __declspec(dllexport) を付け加え、 EXPORT LRESULT CALLBACK .... という風にEXPORTをつけてビルドすると、libファイルが生成されるものの、それをメインプログラムのプロジェクトに追加しても リンク中... hookmain.obj : error LNK2001: 外部シンボル ""int __cdecl ResetHook(void)" (?ResetHook@@YAHXZ)" は未解決です hookmain.obj : error LNK2001: 外部シンボル ""int __cdecl SetHook(void)" (?SetHook@@YAHXZ)" は未解決です Debug/hook.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー というエラーが起きます。 このエラーが何を意味しているかもわからず、dllについても勉強中なのでどこを直せばいいかがみえてきません。どなたかわかる方がいらしたらよろしくお願いします VC++ 6.0 WinXP

  • C++の二次方程式のプログラム

    #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c; cin >> a >> b >> c; if(a==0) { cout << (-c/b) << '\n'; } else if((b*b-4*a*c)<0) { cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; } else { cout << (-b/2/a) << sqrt(4*a*c+b*b)/2/a << '\n'; } return 0; } 最後のelseの下のcoutが本当に分からないんで教えてくださいお願いします。一応この条件(a=0の時、aが0以上の時、aが0以下の時)で出題されてるんですが…

  • プログラミング(じゃんけんゲーム)

    C言語をしています。 そこでわからない所がありのですが、解説お願いします。 作りたいのは、乱数を使ったジャンケン5回戦で、 一番最後に、何勝何敗何引き分けかを表示させ、 2人のうちどちらが勝ったかです。 最後の何勝何敗何引き分けかを どう書いたらいいかがわかりません。 関数のひきわたしみたいな感じでするというのはわかります。 できたところまでのプログラムが、以下のようなコードです。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a,c,i; printf("じゃんけんをしましょう。 (グー=1 チョキ=2 パー=3)\n"); for(i=i; i<=5; i++) { srand(time(NULL)); c = rand()%3+1; scanf("%d",&a); if(a==1 && c==1) printf("私もグー=1なので、あいこです。\n"); else if(a==1 && c==2) printf("私はチョキ=2なので、あなたの勝ちです。\n"); else if(a==1 && c==3) printf("私はパー=3なので、あなたの負けです。\n"); else if(a==2 && c==1) printf("私はグー=1なので、あなたの負けです。\n"); else if(a==2 && c==2) printf("私もチョキ=2なので、あいこです。\n"); else if(a==2 && c==3) printf("私はパー=3なので、あなたの勝ちです。\n"); else if(a==3 && c==1) printf("私はグー=1なので、あなたの勝ちです。\n"); else if(a==3 && c==2) printf("私はチョキ=2なので、あなたの負けです。\n"); else if(a==3 && c==3) printf("私もパー=3なので、あいこです。\n"); else printf("正しい手を入れてください。\n"); } return 0; }