0

まず、私は C++ でコーディングするのが初めてです。名前と番号を含む .txt ファイルがあります。例を次に示します。

クリス 5

タラ 7

サム 13

ジョーイ 15

このコードを使用して名前と番号を取得したいのですが、変数の名前と番号だけでなく、特定の配列エントリを出力するにはどうすればよいですか (名前と番号を画面に表示したい)。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
string name;
int number;
struct sEntry
{
    std::string name;
    int number;
};
sEntry entries[256];
std::ifstream fin("input.txt"); // opens the text file
int nb_entries; // Keeps track of the number of entries read.

for (nb_entries = 0; fin.good() && nb_entries < 256;  nb_entries++) // Keep going until we hit the end of the file:
{
    fin >> entries[nb_entries].name;
    fin >> entries[nb_entries].number;
    cout << "Here, "<< name <<" is name.\n";
    cout << "Here, "<< number <<" is number.\n";
}
}
4

2 に答える 2

1

sEntry のプレーンな C 配列を使用する代わりに、代わりに C++ ベクトルを使用する必要があります (動的にサイズを変更できます)。次に、ループ内に新しい sEntry インスタンスを作成し (終了条件として fin.eof() を使用できます)、operator>>() を使用して値を割り当てます。その後、push_back() を使用して sEntry インスタンスをベクターに追加します。画面への出力には sEntry.name、sEntry.number フィールドを使用する必要があります。コードに示されている名前と番号は値を受け取ることはありません。

#include <vector>
#include <string>
#include <iostream>

struct sEntry
{
    std::string name;
    int number;
};

int main() {
    string name;
    int number;
    std::vector<sEntry> entries;
    std::ifstream fin("input.txt"); // opens the text file
    // int nb_entries; // Keeps track of the number of entries read. -> not necessary, use entries.size()

    while(!fin.eof()) // Keep going until we hit the end of the file:
    {
        sEntry entry;
        fin >> entry.name;
        fin >> entry.number;
        cout << "Here, "<< entry.name <<" is name.\n";
        cout << "Here, "<< entry.number <<" is number.\n";
        entries.push_back(entry);
    }
}
于 2012-05-28T19:30:11.440 に答える
1

nameとを書いていますnumberが、それらはあなたが読んだ変数ではありません。配列エントリを読みました。

できるだけ簡単に機能させるには、cout行を次のように変更するだけです。

cout << "Here, " << entries[nb_entries].name << " is name.\n";
cout << "Here, " << entries[nb_entries].number << " is number.\n";

std::vector は必要ありません。あなたのやり方に問題はありません。

于 2012-05-29T09:04:28.120 に答える