2012-03-10 69 views
0

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

請修改您的問題以獲得更具描述性的標題並刪除無關的代碼部分。發佈之前,您應該運行您發佈的確切代碼,並確保問題發生在其中。 – 2012-03-10 07:28:11

+2

你的標題看起來太含糊。 – 2012-03-10 07:29:03

+3

「代碼中有一些不必要的東西,它們不影響任何東西,只是忽略它們。」你如何刪除不相關的部分,並提供給我們一個[簡短,自包含,正確(可編譯),例子](http://sscce.org/)?這會讓StackOverflow社區更容易幫助你。另請參見http://tinyurl.com/so-hints – Johnsyweb 2012-03-10 07:37:14

回答

1
int count; 

main()從未初始化,使其包含不確定的值。
第一初始化:

int count = 0; 

編輯:
對於那些遲到了或爲那些誰別忙downvoted沒有打擾到實際讀取的代碼:

有兩個count變量是在這裏使用。一個在main()的範圍內,另一個在do-while循環內。循環內的count已初始化,但main()中的count不是,這是在do-while的條件下使用的那個。

這是一個small snippet這說明我在說什麼,如果有人仍然有麻煩理解這一點。

+0

count也是他的局部變量....他已經初始化它... – 2012-03-10 07:33:35

+2

@ShashankKadne:除非我的眼睛背叛了我,'do-while'中使用的'count'是在範圍內聲明的'count' 'main()'並且永遠不會被初始化。 – 2012-03-10 07:35:07

+0

我可以在他的內部看到int count = 0,而 – 2012-03-10 07:37:28

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()做得太多了。嘗試將代碼分解爲更多更小的組件。這將使您更容易測試並讓其他人閱讀。

相關問題