c.从.txt文件读取整数到堆栈
发布时间:2020-12-16 09:40:01 所属栏目:百科 来源:网络整理
导读:这太愚蠢了.我一直被困在一个小时内试图读取一个由单个空格分隔的.txt文件. while循环只能由于某种原因执行一次! #include iostream#include string#include fstream#include stackusing namespace std;int main(int argc,char* argv[]){ string line; stri
这太愚蠢了.我一直被困在一个小时内试图读取一个由单个空格分隔的.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风格的字符串),将它放入一个字符串对象,然后使用c_str()将其转换回ifstream构造函数的C字符串是有点傻.只需直接使用argv [1],因为你没有做任何其他事情.此外,最好首先检查argc并确保传入文件名.最后,您应检查文件是否已成功打开而不是假设 – 至少使用断言明确表示您的假设(myfile.is_open());.哦,你根本不使用线变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |