0

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

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

您希望创建多少个借项条目?:2
1. 借项条目名称:example1
1. 借项金额:123
2. 借项条目名称:example2
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.借方分录名称:example1
1.借方金额:123
6.借方分录名称:example2
6.借方金额:123
6.借方分录名称:example3
6.借方金额: 123
6.借记分录名称:example4
6.借记金额:123
6.借记分录名称:example5
6.借记金额:123


继续下一行代码

该程序在将数字列为 1 后,突然跳到 6 并一直停留在那里,直到问完所有 5 组问题。如您所知,我现在使用“数字”变量来简单地告诉用户“数字”条目已被询问,正如用户自己指定的那样。尝试在您的编译器中运行此代码,看看是否出现相同的结果。顺便说一句,我用的是Visual C++ 20120 Express Edition,这和这个问题有什么关系吗?

非常感谢。

4

6 回答 6

1

显然这个错误在这部分代码中:

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

number用于显示借记条目编号

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

于 2012-02-09T09:20:51.380 回答
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 回答
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 回答
0

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

    number++;

for 循环

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

完全没有必要,在编码时,总是从你能想象到的最简单的解决方案开始,随着你的进行变得更加复杂。

于 2012-02-09T11:07:00.007 回答