1

我正在编写一个应该读取 OFF 文件的类,但我遇到了以下问题:

如果我在 Code::Blocks 环境中编译它,一切正常。如果要加载的文件的第一行不是“OFF”,它将跳转到第二个 if 语句并退出程序...

但是,如果我在 cygwin 中使用 g++ 进行编译,则无论文件中实际写入什么,程序都会跳转到第二个 if 语句。有什么建议么?

#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

polyeder offManager::readOFF(std::string filename)
{
    //Open File
    std::ifstream file(filename.c_str());

// If file couldn't be opened
if( !file.is_open() )
{
    std::cerr << "ERROR: Konnte Datei \""
    << filename << "\" nicht oeffnen!"
    << std::endl;
    exit (2);
}


// Test if the file really is an OFF File
std::string line;
std::string off ("OFF");
getline( file, line );
if ( line.compare(off) != 0 )
{
    std::cerr << "ERROR: Datei \""
    << filename << "\" ist nicht im OFF Format!"
    << std::endl;
    file.close();
    exit (2);
}
...
}

如果我在 cygwin 中输入 g++ -v 我会得到以下信息: Blablabla Thread-Modell: posix gcc-Version 4.5.3 (GCC)

Code::Blocks 使用这个版本: 线程模型:win32 gcc version 4.4.1 (TDM-2 mingw32)

4

1 回答 1

0

您打开的文件可能是 DOS 文本格式,所以它的行以 结尾\r\n,而不仅仅是\n.

Cygwin FAQ 有一个关于这个问题的条目。我将您的代码复制到一个简单的main驱动程序中,并以两种方式编译它。一、常规方式:

$ g++ s.cc
$ ./a.exe test
ERROR: Datei "test" ist nicht im OFF Format!

然后,使用建议的修复(以文本翻译模式打开,以二进制模式写入):

$ g++ s.cc /usr/lib/automode.o 
$ ./a.exe test
于 2012-07-14T17:09:53.720 回答