在C ++中读取文本文件不显示输出

时间:2014-02-28 13:38:49

标签: c++ visual-studio-2010 text-files

我是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();
}

我该如何解决这个问题?

5 个答案:

答案 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;
}

额外:

  • 如果您使用“using namespace std”,则无需使用std命名空间。
  • 您可以将ifstream用于只读。

答案 3 :(得分:-1)

如果要打印输出,则需要冲洗cout。改变这一行:

cout<<line[i] << std::endl;

您将在列中打印字符

答案 4 :(得分:-1)

文本文件中有多少行? 在开始打印输出之前,请调用getline两次。如果你只有一行你会得到空字符串;)

此外,我不认为你的状况是正确的。 Getline无论如何都不会返回任何有用的东西(它会返回istream)。如果它接近文件末尾,它只会上升错误标志。

你应该这样做:

while (! myfile.eof() )
{
  // do some reading & printing
}

另外,请记住通过myfile.close()关闭文件。

希望它有所帮助。