对于C ++中的循环 - 变量没有正确递增

时间:2012-02-09 09:15:07

标签: c++ visual-c++-2010-express

我一直在尝试编写一些代码,要求用户为会计程序提供多个借记条目。如果用户给出5作为答案,程序应该在继续下一行代码之前向他询问借记条目的名称和金额5次。所以,我用循环来解决这个问题,似乎发生了一些奇怪的事情。

这是代码在编译和执行时应该运行的格式:

您希望制作多少借记条目?:2
1.借方条目名称:例1 1.借记金额:123
2.借方条目名称:例2 2.借方金额: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.借方条目名称:例1 1.借记金额:123
6.借方条目名称:例2 6.借方金额:123
6.借方条目名称:例3 6.借方金额:123
6.借方条目名称:例4 6.借方金额:123
6.借方条目名称:例5 6.借记金额:123


继续下一行代码 <
在将数字列为1后,该程序突然跳到6并保持在那里,直到询问了所有5组问题。如你所知,我现在使用&#39;数字&#39;变量只是告诉用户&#39;数字&#39;根据用户自己的指定,已经询问了条目。尝试在编译器中运行此代码,看看是否显示相同的结果。顺便说一下,我使用的是Visual C ++ 20120 Express Edition,这有什么问题吗?

非常感谢。

6 个答案:

答案 0 :(得分:1)

你的内部for循环将始终在条目+ 1:

处留下数字
  for (number = 1; number <= entries; number++)
  {
  }

您是否要在此处使用其他变量,而不是重复使用现有的number

答案 1 :(得分:1)

好吧,在循环之前,您将number变量设置为1。

在循环内部,您使用以下代码段将number变量设置为(entries + 1)

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

为什么不简单地这样做?

cout << (offset + 1) << ". Debit Entry Name: ";

答案 2 :(得分:1)

显然,这部分代码存在错误:

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

您正在使用number来显示借记录条目编号

它在上面的循环中递增到enteries + 1

答案 3 :(得分:0)

您输出的number变量在内部for循环中递增到entries + 1 ...

答案 4 :(得分:0)

你为什么不呢?

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

另外一些更贴近现实生活的解决方案是不要单独举行。创建struct或class更合乎逻辑。

#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;
}

答案 5 :(得分:0)

你想在循环结束时将数字加1。 最简单的方法是使用:

    number++;

for循环

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

是完全不必要的,在编码时,总是从您能想象到的最简单的解决方案开始,并在您继续操作时变得更加复杂。