2017-04-21 46 views
0

你好我一直在試圖做一個程序,其中編譯器從一個txt文件得分和輸出他們的升序,但它不工作任何想法是什麼錯?我怎樣才能把它變成一個數組?C++從外部txt文件排行榜輸出不工作

這是我infile.txt,我有工作:

1 John Doe  23567 
2 Larry Bird  21889 
3 Michael Jordan 21889 
4 James Bond  13890 
5 Gary Smith  10987 
6 GJ    9889 
7 Vivien vien  8990 
8 Samantha Carl 6778 
9 Gary Lewes  5667 
10 Sybil Saban  4677 

程序:

#include <iostream> 
#include <fstream> 
#include <string> 
using std::ifstream; 
using namespace std; 


int main() 
{ 
    ifstream file_("infile.txt"); 
    int highscore; 
    std::string name; 
    int id; 
    if (file_.is_open()) 
    { 
    while(file_>>id >> name >> highscore) 
    { 

     std::cout<<id << " " <<name << " " <<highscore<<""; 
    } 
    file_.close(); 

    } 


system ("pause"); 
return 0; 

} 

回答

0

當您使用

file_>> id >> name >> highscore 

只有第一個名字被讀出,沒有任何數據被讀入highscore,數據流進入錯誤狀態,並且循環馬上斷開。

您需要使用:

std::string firstName; 
std::string lastNmae; 

file_ >> id >> firstName >> lastName >> highscore 

更新

6 GJ    9889 

文件中的存在使得人們難以對文件的簡單的閱讀。你必須使用完全不同的策略。

  1. 逐行讀取文件。
  2. Tokenize每行。
  3. 從第一個標記中提取ID。
  4. 從最後一個標記中提取高分。
  5. 結合中間標記形成名稱。

下面是我想到的是:

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <string> 
#include <vector> 

using std::ifstream; 
using namespace std; 

int main() 
{ 
    ifstream file_("infile.txt"); 

    int highscore; 
    std::string name; 
    int id; 
    if (file_.is_open()) 
    { 
     std::string line; 
     while (getline(file_, line)) 
     { 
     std::string token; 
     std::istringstream str(line); 
     std::vector<std::string> tokens; 
     while (str >> token) 
     { 
      tokens.push_back(token); 
     } 

     size_t numTokens = tokens.size(); 
     if (numTokens < 2) 
     { 
      // Problem 
     } 
     else 
     { 
      id = std::stoi(tokens[0]); 
      highscore = std::stoi(tokens.back()); 

      name = tokens[1]; 
      for (size_t i = 2; i < numTokens-1; ++i) 
      { 
       name += " "; 
       name += tokens[i]; 
      } 

      std::cout << id << " " << name << " " << highscore << std::endl; 
     } 
     } 
    } 
} 
+0

但我希望我的文本文件中的所有內容不僅僅是開始。 – Rob

+0

這仍然無法修復它.. – Rob

+0

我試着用你的策略,但我只是得到它退出代碼0錯誤。 – Rob

0

收集所有的結構,這些數據點,並分析你輸入到這些結構的數組。

當解析輸入,你需要注意的: 1)如何>>實際工作 2)指定的輸入文件具有名稱爲1和2個字 3)字符串可以訪問+ =運算符可以是便利。

完成此操作後,您將需要按照其得分成員對結構數組排序,然後按順序輸出數組。