0

私は、会計プログラムのいくつかの借方記入項目をユーザーに要求するコードを書き込もうとしています。ユーザーが答えとして5を指定した場合、プログラムは次のコード行に進む前に、借方記入項目の名前と金額を5回尋ねる必要があります。そこで、この問題を解決するためにforループを使用しましたが、何か奇妙なことが起こっているようです。

これは、コンパイルおよび実行時にコードを実行する形式です 。

作成する借方記入項目の数:2
1.借方記入項目名:example1
1.借方金額:123
2.借方記入項目名:example22
。借方金額:456



次のコード行に進む

会計プログラムのこの部分のためにC++で記述したコードは次のとおりです。

#include <iostream>
#include <string>
using namespace std;

int main()
{
   cout << "How many debit entries do you wish to make?: ";
   int entries;
   cin >> entries;
   string debitNames[50];
   float debitAmounts[50];
   int offset = 0;
   int number = 1;
   for (offset = 0; offset < entries; offset++)
   {
      cout << number << ". Debit Entry Name: ";
      cin >> debitNames[offset];
      cout << number << ". Debit Amount: ";
      cin >> debitAmounts[offset];
      for (number = 1; number <= entries; number++)
      {
      }
   }
   char response;
   cin >> response;
   return 0;
}



結果は非常に奇妙です。コンパイルして実行すると、次のようになります。

いくつの借方記入を行いますか?:5
1.借方記入項目名:example1
1.借方金額:123
6.借方記入項目名:example2
6.借方金額:123
6.借方記入項目名:example36.
借方金額:123
6.借方記入項目名:example4 6.借方金額
:123
6.借方記入項目名:example5
6.借方金額:123


次のコード行に進みます

。プログラムは、番号を1としてリストした後、突然6にジャンプし、5セットすべての質問が行われるまでそこに留まります。ご存知のように、私は「number」変数を使用して、ユーザー自身が指定した「number」エントリが要求されたことをユーザーに通知しています。コンパイラでこのコードを実行してみて、同じ結果が表示されるかどうかを確認してください。ちなみに、私はVisual C ++ 20120 Express Editionを使用していますが、これは問題と関係がありますか?

どうもありがとう。

4

6 に答える 6

1

内側のforループは、常にエントリ+1に番号を残します。

  for (number = 1; number <= entries; number++)
  {
  }

既存の変数を再利用するのではなく、ここで別の変数を使用するつもりでしたnumberか?

于 2012-02-09T09:17:40.693 に答える
1

ループの前に、number変数を1に設定します。

ループ内で、次のスニペットを使用するようにnumber変数を設定します。(entries + 1)

for (number = 1; number <= entries; number++)
{
}

なぜこれを単純にしないのですか?

cout << (offset + 1) << ". Debit Entry Name: ";
于 2012-02-09T09:17:54.360 に答える
1

明らかに、バグはコードのこの部分にあります:

for (number = 1; number <= entries; number++)
      {
      }

number借方記入番号の表示に使用しています

そしてそれは上記のループでインクリメントされてenteries + 1

于 2012-02-09T09:20:51.380 に答える
0

ループの最後の番号に1を追加します。これを行う最も簡単な方法は、次を使用することです。

    number++;

forループ

  for (number = 1; number <= entries; number++)   
  {   
  }

コーディングするときは、常に完全に不必要です。想像できる最も単純なソリューションから始めて、進むにつれてより複雑になります。

于 2012-02-09T11:07:00.007 に答える
0

どうして?

  number++;
  for (int number = 1; number <= entries; number++)
  {
  }

また、実際の解決策にもっと近いのは、これを個別に保持しないことです。構造体またはクラスを作成する方がはるかに論理的です。

#include <iostream>
#include <list>
#include <time.h>
#include<string>
using namespace std;

struct Debt{

  string name;
  float owe;
};


int main()
{
cout << "How many debit entries do you wish to make?: ";
int entries;
cin >> entries;
list<Debt> debts;



for (int offset = 1; offset <= entries; offset++)
{
  Debt debt;

  cout << offset << ". Debit Entry Name: ";
  cin >> debt.name;

  cout << offset << ". Debit Amount: ";
  cin >> debt.owe;

  debts.push_back(debt);

  for (int number = 1; number <= entries; number++)
  {
  }
}
int i=0;
list<Debt>::iterator it;
for ( it=debts.begin() ; it != debts.end(); it++ )
  cout << "Debt seq " << ++i << " Name " << (*it).name << " debt is " << (*it).owe << endl;


char response;
cin >> response;
return 0;
}
于 2012-02-09T09:41:54.700 に答える
0

number内側のforループでentries+1にインクリメントした変数を出力します。

于 2012-02-09T09:20:14.017 に答える