c ++从.txt文件读取整数到堆栈

时间:2012-01-23 03:49:07

标签: c++ ifstream

这太愚蠢了。我一直被困在一个小时内试图读取一个由单个空格分隔的.txt文件。 while循环只会因某种原因被执行一次!

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

using namespace std;

int main(int argc, char* argv[])
{
    string line;
    string str(argv[1]);
    ifstream myfile((str).c_str());
    int num;
    stack<int> x;

    while (myfile >> num);
    {
        x.push(num);
    }

    return(0);
}

1 个答案:

答案 0 :(得分:7)

嗯,更仔细地看一下这条线:

while (myfile >> num);

最终,你会注意到分号。编译器认为这意味着你想要一个什么都不做的循环(这里的分号表示一个空的语句)。因此,循环读取所有数字,但不对它们做任何事情。

下一节被单独解释为在其自己的范围内的一个语句(用大括号表示),在循环之后执行:

{
    x.push(num);
}

所有这一切都是将读取的最后一个数字推入堆栈,导致您认为循环只执行一次。

删除;,你就可以了!一旦被这个咬了,你永远不会忘记; - )

在一个不相关的说明中,取argv[1](一个C风格的字符串),将它放入string对象,然后使用c_str()将其转换回来有点愚蠢ifstream构造函数的C字符串。只需直接使用argv[1],因为您没有使用它做任何其他事情。此外,最好首先检查argc并确保传入文件名。最后,您应该检查文件是否已成功打开而不是假设 - 至少做出您的假设使用assert(myfile.is_open());显式显示。哦,你根本不使用line变量。