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

c++ Reading in integers from a .txt file to a stack

本文关键字:整数 堆栈 读取 文件 txt c++      更新时间:2023-10-16

这太愚蠢了。我已经被困了一个小时,试图在.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);
}

嗯,仔细看这一行:

while (myfile >> num);

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

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

{
    x.push(num);
}

所做的只是将读取的最后一个数字推送到堆栈上,导致您认为循环只执行一次。

卸下;,您就可以了!一旦被这个咬了一口,你永远不会忘记;-)

另一方面,取argv[1](一个C风格的字符串),将其放入string对象中,然后使用c_str()将其转换回ifstream构造函数的C字符串,这有点傻。只需直接使用argv[1],因为您不会对它做任何其他操作。此外,最好先检查argc,并确保传入了文件名。最后,您应该检查文件是否已成功打开,而不是假设它——至少用assert(myfile.is_open());明确您的假设。哦,而且您根本不使用line变量。