我没有任何编译错误,但我的代码不起作用。怎么了?
I don't have any compile errors but my code won't work. What's wrong?
我正在做一个简单的程序,我接受电话号码的前四位数字,并且必须生成其余数字的所有可能性。最后6位数字加起来必须等于33。如果第4位是奇数,那么第5位一定是偶数,如果第4位是偶数,那么第5位一定是奇数。
我已经确定它不是将数字加在一起,函数plotNumbers()中的for循环实际上并没有循环。我完全迷路了。有人有什么想法吗?
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
void plotNumbers(vector<int> number1, int digit1, int digit2, int digit3, int digit4);
bool findTrueFalse(vector<int> vec);
int _tmain(int argc, _TCHAR* argv[])
{
int digit1, digit2, digit3, digit4;
vector<int> number;
cout << "Enter the first four digits:n";
cin >> digit1;
cin >> digit2;
cin >> digit3;
cin >> digit4;
if (digit4 == 0 || digit4 == 2 || digit4 == 4 || digit4 == 6 || digit4 == 8)
{
number.push_back(1);
plotNumbers(number, digit1, digit2, digit3, digit4);
}
else if (digit4 == 1 || digit4 == 3 || digit4 == 5 || digit4 == 7 || digit4 == 9)
{
number.push_back(0);
plotNumbers(number, digit1, digit2, digit3, digit4);
}
else
{
cout << "nYou entered an illegal value. Good-bye.nn";
}
system("pause");
return 0;
}
void plotNumbers(vector<int> number1, int digit1, int digit2, int digit3, int digit4)
{
for ( ; number1[0] < 10; number1[0] += 2)
{
number1.push_back(0);
for ( ; number1[1] < 10; ++number1[1])
{
number1.push_back(0);
for ( ; number1[2] < 10; ++number1[2])
{
number1.push_back(0);
for ( ; number1[3] < 10; ++number1[3])
{
number1.push_back(0);
for ( ; number1[4] < 10; ++number1[4])
{
number1.push_back(0);
for ( ; number1[5] < 10; ++number1[5])
{
bool total33 = findTrueFalse(number1);
if (total33)
{
cout << "(" << digit1 << digit2 << digit3 << ") ";
cout << digit4 << number1[0] << number1[1] << " - ";
cout << number1[2] << number1[3] << number1[4] << number1[5] << endl;
}
}
}
}
}
}
}
}
bool findTrueFalse(vector<int> vec)
{
int total = 0;
vector<int>::iterator postIt;
for (postIt = vec.begin(); postIt != vec.end(); ++postIt)
{
total += *postIt;
}
if (total == 33)
{
return true;
}
else
{
return false;
}
}
首先,尽量使用短代码来避免bug,例如:
if (digit4 % 2 == 0)
代替
if (digit4 == 0 || digit4 == 2 || digit4 == 4 || digit4 == 6 || digit4 == 8)
第二,您只需要执行一次number1.pushback(0)
,但是您要执行好几次。你知道运行number1.pushback(0)
会发生什么吗?I guess not:
- 它在你的矢量
number1
的末尾添加了一个新的元素,值为
0
我建议使用以下代码(你来缩进):
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
void plotNumbers(vector<int> number1, int digit1, int digit2, int digit3, int digit4);
bool findTrueFalse(vector<int> vec);
int _tmain(int argc, _TCHAR* argv[])
{
int digit1, digit2, digit3, digit4;
vector<int> number;
cout << "Enter the first four digits:n";
cin >> digit1;
cin >> digit2;
cin >> digit3;
cin >> digit4;
if (digit4 % 2 == 0)
{
number.push_back(1);
for (int i=0; i<5; i++)
number.push_back(0);
plotNumbers(number, digit1, digit2, digit3, digit4);
}
else if (digit4 % 2 == 1)
{
number.push_back(0);
for (int i=0; i<5; i++)
number.push_back(0);
plotNumbers(number, digit1, digit2, digit3, digit4);
}
else
{
cout << "nYou entered an illegal value. Good-bye.nn";
}
system("pause");
return 0;
}
void plotNumbers(vector<int> number1, int digit1, int digit2, int digit3, int digit4)
{
for ( ; number1[0] < 10; number1[0] += 2)
{
number1[1] = 0;
for ( ; number1[1] < 10; ++number1[1])
{
number1[2] = 0;
for ( ; number1[2] < 10; ++number1[2])
{
number1[3] = 0;
for ( ; number1[3] < 10; ++number1[3])
{
number1[4] = 0;
for ( ; number1[4] < 10; ++number1[4])
{
number1[5] = 0;
for ( ; number1[5] < 10; ++number1[5])
{
bool total33 = findTrueFalse(number1);
if (total33)
{
cout << "(" << digit1 << digit2 << digit3 << ") ";
cout << digit4 << number1[0] << number1[1] << " - ";
cout << number1[2] << number1[3] << number1[4] << number1[5] << endl;
}
}
}
}
}
}
}
}
bool findTrueFalse(vector<int> vec)
{
int total = 0;
vector<int>::iterator postIt;
for (postIt = vec.begin(); postIt != vec.end(); ++postIt)
{
total += *postIt;
}
if (total == 33)
{
return true;
}
else
{
return false;
}
}
您如何确切地检查它们是否在循环?因为在我的程序中它们是,但我认为你不理解它们实际上是如何工作的(无意冒犯)。
考虑下面的代码片段:
int i = 0;
int j = 0;
for (; i < 10; i += 1) { //OUTER for
cout << "i == " << i << endl;
for (; i < 10; j += 1;) { //INNER for
cout << "j == " << j << endl;
}
//THIS POINT
}
这个程序将进入OUTER循环,打印出"i == 0",然后进入INNER循环打印出10行"j ==…"。现在在这一点j == 10,所以当代码对'i'进行另一个循环并检查INNER for的条件时,它看到j == 10,所以10不低于10,所以它跳过INNER for。
这正是程序中发生的事情。当你使用这样指定的控制变量退出INNER循环时,如果你想在下一轮OUTER循环中进入INNER循环,你必须记住将它的值更改为满足条件的值。
我已经改变了你的代码这样做,它看起来像它工作得很好。您所需要做的就是在代码中的INNER循环之后添加4行代码,将它们的控制变量归零。
编辑:此外,考虑Emabs的回答,因为你的矢量维护相当差。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 0-1背包代码中的错误.我的代码中有什么错误
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 无法在我的堆排序代码中找到错误.无法正确执行.C++
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 为什么我的 BaseClass:Method 代码编译(带有单冒号)?
- 我的代码运行良好,但在游戏循环中中断
- 8谜题代码.我的队列没有填充,我找不到错误的位置