• 締切済み
  • 困ってます

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

#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) で終了しました。 何がまずいのでしょうか。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数3105
  • ありがとう数0

みんなの回答

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

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • うるう年かどうかを計算するプログラミング

    西暦何年かを入力し、その年がうるう年かそうでないかを 計算するプログラムを作っています。 #include <iostream> using namespace std; int main() { int toshi; cout <<"西暦を入力してください"; cin>>toshi; if (toshi%4==0) {if (toshi%100==0) {if (toshi%400==0) {cout<<toshi<<"年はうるう年です。";} else {cout<<toshi<<"年は非うるう年です。";} else {cout<<toshi<<"年は非うるう年です。";} else {cout<<toshi<<"年は非うるう年です。";}}} return EXIT_SUCCESS; } これを入力したのですが エラーが2つでてしまいます。 どこがちがうのでしょうか?

  • プログラミング(JAVA)について

    2つほど質問があります。どなたか回答していただける方がいたらお願いします。 1、以下のじゃんけんゲームのプログラムを作成したのですがfor文を用いてコードを短くするにはどうすればいいですか?      class jyanken { public static void main(String[] args) { int x = 0, y = 0; if (args[0].equals("グー")) { x = 0; } else if (args[0].equals("チョキ")) { x = 1; } else if (args[0].equals("パー")) { x = 2; } else { System.out.println("エラー"); } y = (int)(Math.random() * 10.0) % 3; if (x == 0) { if (y == 0) { System.out.println("あいこ"); } else if (y == 1) { System.out.println("勝ち"); } else if (y == 2) { System.out.println("負け"); } } else if (x == 1) { if (y == 1) { System.out.println("あいこ"); } else if (y == 2) { System.out.println("勝ち"); } else if (y == 0) { System.out.println("負け"); } } else if (x == 2) { if (y == 2) { System.out.println("あいこ"); } else if (y == 0) { System.out.println("勝ち"); } else if (y == 1) { System.out.println("負け"); } } } } 2、もう1パターンでじゃんけんプログラムを作成しようと考えているのですが。上手くできないので参考のファイルを掲示してもらえると嬉しいです。 機能としては、for文とif文を使用して。プログラムの起動と同時に、コンピュータがグー、チョキ、パーをランダムに出す(プレーヤに見せない) 次に人がグー、チョキ、パー何を出すかをキーボードで入力して最後にプログラムが出したものとコンピュータがランダムに出したものと比較し、勝負を表示する。といった感じです。

  • visual c++ 2008 にてhello worldとうちこむとすぐに消えます・・

    #include<stdio.h> void main() { printf("Hello,World!"); } とうちこんでコンパイルすると エラーなし警告なしでいけるのですが, 一瞬表示されたような気がするんですがすぐに消えるんです。 しばらく表示させるためにはどうしたらよいでしょうか。 ちなみに開くと 'hallo.exe': 'D:\ゲーム作り\プログラム\hallo\Debug\hallo.exe' を読み込みました。シンボルが読み込まれました。 'hallo.exe': 'C:\Windows\System32\ntdll.dll' を読み込みました 'hallo.exe': 'C:\Windows\System32\kernel32.dll' を読み込みました 'hallo.exe': 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll' を読み込みました 'hallo.exe': 'C:\Windows\System32\apphelp.dll' を読み込みました スレッド 'Win32 スレッド' (0x1740) はコード 0 (0x0) で終了しました。 プログラム '[5812] hallo.exe: ネイティブ' はコード 0 (0x0) で終了しました。 とまあこんなかんじです。 どうにかならないでしょうか?

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

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

共感・感謝の気持ちを伝えよう!

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

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • visual studio 2015 exe 生成

    visual studio 2015のC++でWin32アプリケーションを作りました。 デバッグしようとしたところ、ビルドエラーが発生して、 「プログラム 'c:&#165;users&#165;documents&#165;visual studio 2015&#165;Projecst&#165;Win32project1&#165;Win32project1.exe'を開始できません。 指定されたファイルが見つかりません」と表示されます。 ソリューションのビルドは正常に出来ます。 そこでprojectのファイルを開いて見たのですが、確かにexeファイルが生成されていませんでした。 特に設定はいじってないです。 どうすればexeファイルが生成されるのでしょうか?

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

    以下の感染ファイルは「駆除」ではなく、「削除」できるのでしょうか? ●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 どなたかお解かりの方、教えてください。

  • あるプログラミングでdoubleの箱が

    こんにちは、 とあるプログラミングでdoubleの箱が突然2つでてきて混乱しています。 //読み込んだ実数値は10で割りきれるか #include <cmath> #include <iostream> Using namespace std; Int main() { Double x; Cout <<"実数値: "; cin >> x; If (double m = fmod(x, 10)) { Cout<<"その値は10で割りきれません。\n"; Cout<<"剰余は"<< m << d"です。"\n"; } else{ Cout"その値は10で割りきれます" \n"; } } とあり、なぜ突然double mがでてきたのでしょうか? すみません m(__)m

  • ''C++の条件分岐分からないんですが

    #include<iostream> using namespace std; int main(){ int a; cout << "数値を入力してください\n"; cin >> a; if( a > 30) cout <<"31以上ですね\n"; } else if(a<10){ cout <<"10未満ですね\n"; } else { cout <<"30以下で10以上ですね\n"; } return 0; } これが例文なんですが、 変数aの値がbより小さい場合には、『aはbより小さいです』と表示させ、大きい場合には"a=a+b"を計算させる 文字変数mの中身が'a'ならば、『aが格納されています』と表示させて、'a'でないならば『'a'でない文字が格納されています』と表示させたあと、変数bとcを使った『b=b+c』を計算する。 変数aが、変数bより小さい場合には、『aはbより小さいです』と表示し、変数bより大きい場合には、『aはbより大きいです』と表示し、変数bと等しい場合には、『aとbは等しいです』と表示する #include<iostream> using namespace std; int main(){ int a; if(a < b) { __cout("aはbより小さいです\n"); } else { __c = a + b; }return 0; } #include<iostream> using namespace std; int main(){ int a; if(m == 'a') __cout("aが格納されています\n"); } else { __cout("\'a\'でない文字が格納されています\n"); } return 0; } #include<iostream> using namespace std; int main(){ int a; if(a < b) { __cout("aはbより小さいです\n"); } else if(a == b) { __cout("aとbは等しいです\n"); } else { __cout("aはbより大きいです\n"); } return 0; } これ合ってますか?あとプログラミング環境すらないので実行結果教えてもらっていいですか?

  • EXEにDLLファイルを同梱したいです。

    http://kidd0320.hatenablog.com/entry/2014/06/06/142355 EXEにDLLファイルを同梱するため、こちらのサイトを参考にしたのですが、ソフトを別のパソコンに入れたところ”MSVCP120D.dllがないため、プログラムを開始できません。” と表示されてしまいます。 開発環境はC++でOPENCVを使っています。 開発ソフトはMicrosoft Visual Studio Express 2013 for Windows Desktopを使っています。 構成はReleaseでプラットフォームはwin32です。 どうすればよいでしょうか。 どなたかご教授いただけないでしょうか。

  • プログラミング(Java)について

    学校の課題で考えても、分からなかったので質問させてください。 下のプログラムを以下のように変更したいのです。 (1)正解の数から±20以下まで接近した時は「小さすぎます、でもあと少しです!!」または「大きすぎます、でもあと少しです!!」というメッセージを表示する。 (2)正解が出るまでに何回数字を入力したか数えて、正解が出た後で「正解が出るまで○○回かかりました」というメッセージを表示する。 (3)さらにその回数が5回以下だったら「すばらしい!」、その回数が10回以上だったら「間が鈍いですね」、5回と10回の間だったら「普通です」というメッセージを表示する。 import java.util.Scanner; public class kazuate{ public static void main(String args[]){ Scanner kbd = new Scanner(System.in); int x; boolean flag = true; int seikai = (int)(Math.random() * 1000); System.out.println("数当てゲームを始めます"); System.out.println("0~999の数字を入力してください"); while(flag){ x = kbd.nextInt(); if (x >= 0 && x < seikai){ System.out.println("小さすぎます、もう1回!"); }else if(x > seikai && x <= 999){ System.out.println("大きすぎます、もう1回!"); }else if(x == seikai){ System.out.println("正解です!"); flag = false; }else{ System.out.println("入力するのは0~999です。やり直してください"); } } } よろしくお願いします。

  • kernel32.dll の削除方法

    現在流行している「W32/Badtans」について、用心はしていたつもりですが、ためしに検索したところ、 windows\system に kernel32.dll が見つかりました。 (kernel32.exe はありません) 対処方法として、ファイルを削除すればよいという情報を得ましたが、エクスプローラで表示して削除しようとしても「windowsで使用中なので削除できない」と表示されます。このファイルの削除方法を教えてください。 また、ウイルスに感染した場合レジストリ値の削除も必要とのことですが、このように dll が作成された場合も、\Kernel32=kernel32.exe というレジストリ値が追加されていると考えていいのでしょうか。(レジストリエディタを起動した経験がないので、なるべくレジストリの削除はやりたくないのですが) なお、インストールしている、UnVirus.exe(for windows by JCSA)というウイルス対策ソフトでは、ウイルスが検出されません。 以上、よろしくお願いします。

  • C++でタスクマネージャーを最小化

    C++Win32コンソールアプリケーションを作成しています。 タスクマネージャーを最小化させるプログラムを考えているのですが、上手くできません。 #include<iostream> #include<windows.h> using namespace std; int main() { for (;;) { HWND hwnd = FindWindow("TaskManagerWindow", NULL); if (hwnd != NULL) { cout << "成功" << endl; ShowWindow(hwnd,SW_MINIMIZE); } else cout << "失敗" << endl; Sleep(300); } return 0; } のようにしているのですが上手くできません。 Notepadのようなファイルは最小化できるのですが、タスクマネージャーに限ってできないのです。 どのようにすればよいでしょうか。 又、一時的に見えなくすればいいので終了や透明化等の他の方法でも構いません。 ご教授お願いします。

  • coutへの出力内容をプログラム中で取得

    C言語、C++(WinXP)で以下のようなことはできるのでしょうか。 例えば、 //A.cpp void main() { cout << 1 << endl; } というプログラムをA.exeという名前で作ったとします。そして、別のB.exeというプログラムを //B.cpp void main() { system( "A.exe" ); } として実行すると(A.exeとB.exeは同じフォルダにあるとして)、コマンドプロンプトに"1"と出力されますが、B.exe中でA.exeがcoutに出力した内容を取得してなんらかの計算をする、例えば、 //B.cpp void main() { system( "A.exe" ); int x; //xにcoutの内容"1"を取得する x *= 2; } のようなことはできるのでしょうか。また、A.exeの出力先がcoutではなくcerrの場合はどうでしょうか。 coutの場合はリダイレクトを使えば同様のことができるような気もするのですが、実際にやりたいのは、コマンドプロンプトで使う事を前提にして作ったプログラム(A.exeのような)があり、それをVC++6.0で作るダイアログベースのGUIプログラムから呼び出します。ただ、A.exeはエラーがあった場合等にcoutやcerrにメッセージを出力するので、GUIプログラム側でそれを取得してエディットボックスやメッセージボックスに出力したいのです。 このような事ができるのかどうかもわからないのですが、もし方法をご存知でしたらご教授をお願いします。

  • プログラミング

    以下の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); }