C++文件读取

标签 c++

我有一个文件,其中有一个数字,其中是跟在后面的名字的数量。例如:

4
bob
jim
bar
ted

我正在尝试编写一个程序来读取这些名称。

void process_file(ifstream& in, ofstream& out)
{
    string i,o;
    int tmp1,sp;
    char tmp2;
    prompt_user(i,o);
    in.open (i.c_str());

    if (in.fail())
    {
        cout << "Error opening " << i << endl;
        exit(1);
    }

    out.open(o.c_str());
    in >> tmp1;
    sp=tmp1;

    do
    {
        in.get(tmp2);
    } while (tmp2 != '\n');

    in.close();
    out.close();
    cout<< sp;
}

到目前为止,我能够读取第一行并将 int 分配给 sp

我需要 sp 来计算名字的数量。我如何得到这个来读取名称。 我剩下的唯一问题是如何在忽略第一个数字的同时获取名称。 在那之前我无法实现我的循环。

最佳答案

while (in >> tmp1)
        sp=tmp1;

这成功地从中读取了第一个 int 然后尝试继续。由于第二行不是int,提取失败,所以它停止循环。到目前为止一切顺利。

但是,流现在处于失败 状态,除非清除错误标志,否则所有后续提取都将失败。

在第一个 while 循环之后立即说 in.clear()

不过,我真的不明白您为什么要编写一个循环来提取单个整数。你可以写

if (!(in >> sp)) { /* error, no int */ }

要读取名称,请读取 string。这次循环没问题:

std::vector<std::string> names;
std::string temp;

while (in >> temp) names.push_back(temp);

您可能想在某处添加一个计数器,以确保名称的数量与您从文件中读取的数量相匹配。

关于C++文件读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15761752/

相关文章:

c++:在给定的 char* 处写入一个 char 会导致段错误

c++ - 如何在不使用真正的剪贴板的情况下进行类似剪贴板的操作?

c++ - map 插入导致 VS 2015 中的 C2664 错误,适用于 VS 2013

c++ - (C++) 循环 : User Input Without Reserving Memory

c++ - Gitlab CI Runner 预定义宏 MSBuild

c++ - 这是什么样的声明符?

c++ - 初始化后无法更改 C++ 变量

c++ - 浮点异常的原因?

c++ - 无法使用 eclipse cdt 在 C/C++ 中打开文件

c++ - 计算机如何进行浮点运算?