2017-04-21 5 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. ファイルを1行ずつ読みます。
  2. 各行をトークン化します。
  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のような名前を持っている)文字列であってもよい+ =演算子へのアクセス権を持っていますハンディ。

これを完了したら、この構造体配列をscoreメンバーでソートし、配列を順番に出力したいと思うでしょう。

関連する問題