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

你正在写出nameand 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 回答