我是C ++的新手我有这个代码,应该在Task1中打印文本文件,但它什么也没显示,它没有输出。并且文本文件包含“1 2 3 4”作为示例
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void main()
{
string line ;
std::fstream myfile("D:\\Task1.txt", std::ios_base::in);
getline( myfile, line );
//cout<<line.length();
while( getline( myfile, line ) )
{
for (int i=0; i < line.length(); i++)
{
cout<<line[i];
//if (line[i] ...) // look at each character and process it accordingly
}
}
getchar();
}
我该如何解决这个问题?
答案 0 :(得分:1)
您的代码存在一个简单问题:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void main()
{
string line ;
std::fstream myfile("D:\\Task1.txt", std::ios_base::in);
getline( myfile, line ); // That's the problematic line!
//cout<<line.length();
while( getline( myfile, line ) ) // first line lost here
...
你读取文件的第一个(可能只有一行)并简单地丢弃它,因为你之后立即进入了while循环。
修复:删除while循环之前的行getline( myfile, line );
。
您还应检查文件是否确实存在(文件名中可能有拼写错误!):
std::fstream myfile("D:\\Task1.txt", std::ios_base::in);
if ( !myfile )
{
std::cerr << "File does not exist!\n";
return 1;
}
如果您不打算将fstream用于输出,只需替换
即可std::fstream myfile("D:\\Task1.txt", std::ios_base::in);
通过
std::ifstream myfile("D:\\Task1.txt");
答案 1 :(得分:0)
最好使用ifstream进行阅读。 始终检查ifstream,无论open是否成功。
std::ifstream myfile("D:\\Task1.txt");
if( !myfile.is_open() ) {
cerr << "error open file\n";
// return or break
}
如果您想读取数字,请阅读数字
for( int number; myfile >> number; ) {
cout << number << endl;
}
答案 2 :(得分:0)
您通过阅读忽略第一行而不输出它。
string line ;
ifstream myfile("D:\\Task1.txt");
while(getline(myfile, line))
{
cout << line << endl;
}
额外:
答案 3 :(得分:-1)
如果要打印输出,则需要冲洗cout。改变这一行:
cout<<line[i] << std::endl;
您将在列中打印字符
答案 4 :(得分:-1)
文本文件中有多少行?
在开始打印输出之前,请调用getline
两次。如果你只有一行你会得到空字符串;)
此外,我不认为你的状况是正确的。 Getline无论如何都不会返回任何有用的东西(它会返回istream)。如果它接近文件末尾,它只会上升错误标志。
你应该这样做:
while (! myfile.eof() )
{
// do some reading & printing
}
另外,请记住通过myfile.close()关闭文件。
希望它有所帮助。