シンプルなアルゴリズムで動作するプログラムを作ろうとしています。whileループの不思議なバグ(C++)
しかし何らかの理由で、私は奇妙なバグを得ました(以下、プログラムの簡略版です)。
#include "stdafx.h"
/* I'm using visual studio as you can see */
#include <iostream>
#include <string>
using std::cout;
using std::string;
void find(int arr[], string& name) {
int t = 8;
int i = 0;
int v = 0;
// t SHOULD become equal the smallest int of the array after this
while (arr[i]) {
if (arr[i] < t) {
t = arr[i];
}
i++;
}
/* When this statement below gets executed t gets what looks like a
random value for some reason */
cout << "\n" << arr[t];
for (int b = 0; b < 2; b++) {
if (t == arr[b]) {
v = b;
}
}
/* Again, arr[v] gets what looks like a random number */
cout << "\nThe " << name << " that costs less is n. " << arr[v] << ".";
}
int main() {
/* [0] = "Cost for steve"
[1] = "Cost for mark"
[2] = "Cost for andrew" */
int cleaning[3] = { 5, 4, 7 };
int cooking[3] = { 3, 6, 4 };
int babysitting[3] = { 7, 6, 3 };
cout << "Number 1 = Steve, Number 2 = Mark, Number 3 = Andrew.";
string name = "cleaner";
find(cleaning, name);
name = "cook";
find(cooking, name);
name = "babysitter";
find(babysitting, name);
/* This is to prevent the console application from quitting */
while (true) {
}
}
forループとwhileループに間違いがありますが、何ですか?
私のコードを読んでいて、いくつかのテキストや変数名が外国人のように見える場合は、翻訳するのを忘れている可能性があります(これは元々イタリア語で書かれています)。
お読みいただきありがとうございます。
編集:私はThe (name) that costs less is n. (arr[v]).
はまだ私に乱数を与えると言う部分は、私がコンパイルされ、プログラムを実行した、プログラムの最初の部分を固定ではなく @Tarのおかげで、出力は次のとおりです。
Number 1 = Steve, Number 2 = Mark, Number 3 = Andrew.
4
The cleaner that costs less is n. 4.
3
The cook that costs less is n. 3.
3
The babysitter that costs less is n. 7.
これは、より安価なクリーナーが2番、1番は料理人、3番はベビーシッターであると言えるはずです。
PS:すべてが修正されるとすぐに、私は最も安い価格をプリントアウトする部分を取ります。
'find'、あなたはパラメータとして' arr'を渡すが、その後、 'figo'を使用しています。私は間違いだと思っていますか? – Tas
'figo'どこに定義されていますか? – Raindrop7
「奇妙なバグ」とは何ですか? [MCVE](http://stackoverflow.com/help/mcve)を投稿してください。 –