为什么我的程序没有正常工作

时间:2012-03-10 07:23:24

标签: c++

我的程序需要解析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;
}

2 个答案:

答案 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()做得太多了。尝试将代码分解为更小,更小的组件。这将使您更容易测试和其他人阅读。