如何测试一行是否为空?

How to test if a line is empty?

我实际上是想了解 getline() 函数是如何工作的!但是我在测试一行是否为空时遇到了困难!

这是我的代码:

ifstream fichier("upload.txt",ios::binary);
string ligne;
while(getline(fichier,ligne))
{
    cout<<ligne<<endl;
    if(ligne=="")
         cout<<"line below is empty"<<endl;         
}

但是,if 条件似乎不起作用:((

您的问题是打开二进制文件。除此之外,你应该做一些事情:

  1. 检查文件是否正常打开
  2. 与 empty() 比较
  3. 检查字符串是否只包含 space ,然后它被认为是空的。
  4. 关闭文件

    ifstream fichier("upload.txt", std::ifstream::in ); //File opened for reading.
    string ligne;
    //Always Check if file is properly opened.
    if (fichier.is_open() ) 
    {
       while(getline(fichier,ligne))
       {
          cout<<ligne<<endl;
           if(ligne.empty() || str.find_first_not_of(' ') == std::string::npos)
            cout<<"line below is empty"<<endl;         
       }
       fichier.close();
    
    }
    else 
    {
     // show message:
      std::cout << "Error opening file";
    }
    

在 Windows 上,换行符通常是 CRLF (0x0D 0x0A)。 std::getline() 将读取直到遇到 LF 并将其从返回的 std::string 中丢弃。如果 std::ifstream 以文本模式(默认模式)打开,平台换行符将标准化为 LF 并且前导 CR 也将被丢弃。但是,如果以二进制模式打开,CR 将不会被丢弃。所以你必须检查一下:

ifstream fichier("upload.txt", ios::binary);
string ligne;
while (getline(fichier, ligne)) {
    if (ligne.empty() || ligne == "\r") {
        cout << "line is empty" << endl;
    } else {
        cout << ligne << endl;
    }
}

否则,不要对文本文件使用二进制模式:

ifstream fichier("upload.txt");
string ligne;
while (getline(fichier, ligne)) {
    if (ligne.empty()) {
        cout << "line is empty" << endl;
    } else {
        cout << ligne << endl;
    }
}