我的程序需要解析csv文件并识别缺少的数字组合。订单无关紧要。
程序编译并运行,但打印出已在文件中的一行中打印的数字。
输入(mega2.csv):
123
134
142
注意234
不在列表中。
预期输出
该程序应该输出234
,因为它是唯一未使用的组合。相反,没有输出。
代码:
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
int main()
{
ifstream inFile;
string value;
string fileName;
int count;
int amount, playCount;
int a,b,c,d,e,f,g,h,i,j,k,l;
srand(time(0));
char ch;
do{
cout << "Enter number of plays (or -number to quit): ";
cin >> amount;
cout << endl;
playCount = 1;
while( playCount <= amount ){
do{
inFile.open("mega2.csv");
//create random numbers a,b,c,d,e,f= mega num < 10
a = rand() % 5;
if(a == 0){a = 1;}
do{
b = rand() % 5;
if(b == 0){b = 1;}
}while(b == a);
do{
c = rand() % 5;
if(c == 0){c = 1;}
}while(c == a || c == b);
//Load numbers into g,h,i,j,k,l
do{
inFile >> g;
inFile.get(ch);
inFile >> h;
inFile.get(ch);
inFile >> i;
inFile.get(ch);
int count = 0;
cout << g << "," << h << "," << i << endl;
//A
if( a == g || a == h || a == i ){
count++;
}
//B
if( b == g || b == h || b == i ){
count++;
}
//C
if( c == g || c == h || c == i ){
count++;
}
}// close second half do loop
while(inFile && count < 3);
inFile.close();
inFile.clear();
} // close whole do loop
while(count >= 3);
cout << endl;
cout << endl;
cout << endl;
cout << a << "," << b << "," << c << endl;
cout << endl;
playCount++;
} // End playCount while loop
}// End main do loop
while(amount >= 0); // quit program with negative number
system("pause");
return 0;
}
答案 0 :(得分:1)
int count;
main()
中的永远不会被初始化,因此它包含Indeterminate值 首先初始化它:
int count = 0;
修改强>
对于那些迟到的人或那些匆忙投票而没有费心去实际阅读代码的人:
此处使用了两个count
个变量。一个在main()
范围内,另一个在do-while
循环内。循环中的count
已初始化,但count
中的main()
不是do-while
,而{{1}}条件是{{1}}。
这是一个 small snippet ,它展示了我在说什么,如果有人仍然有理解这一点的麻烦。
答案 1 :(得分:0)
使用rand()
检测缺失组合的算法看起来非常可疑。但我想这是一种练习,所以我会让你自己解决这个问题。
您需要使用代码解决的一些问题会导致您看到的混乱行为。
只初始化了一个变量。他们应该全部进行初始化,如下所示:
string fileName = "mega2.csv";
您有两个名为count
的变量。您应该重命名它们(以及其他名称不当的变量)。他们在计算什么?
您不检查文件是否已成功打开,如果不是,则执行相应操作:
if (!inFile)
{
std::cerr << "Could not open file [" << fileName << "]. Exiting." << std::endl;
break;
}
您不检查变量是否已成功从文件中读入,如果不成功则执行相应操作。鉴于您尝试从文件中读取三个以逗号分隔的值,但输入文件中不包含任何逗号,这可能是个问题!
您不验证用户输入。
cout << "Enter number of plays (or -number to quit): ";
if (!(cin >> amount))
{
std::cerr << "Invalid input" << std::endl;
break;
}
您有未使用的变量。删除这些。
此外,您的main()
做得太多了。尝试将代码分解为更小,更小的组件。这将使您更容易测试和其他人阅读。