C++比较的std ::如果我不使用代码:: Blocks的编译,但cygwin的

问题描述:

我编码应该读出文件的一类,我有以下问题字符串将不起作用:C++比较的std ::如果我不使用代码:: Blocks的编译,但cygwin的

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

但是,如果我使用g ++在cygwin中编译,程序跳转到第二个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); 
} 
... 
} 

如果键入G ++ -v在Cygwin中,我得到以下几点: Blablabla 线程型号名称:POSIX GCC-4.5.3版本(GCC)

代码::块使用此版本: 线程模型:Win32的 gcc版本4.4.1(TDM-2的mingw32)

+0

您还没有检查'getline'成功。 – 2012-07-14 16:53:13

+0

在输出诊断中,输出'line'的值,以便您可以看到它的内容。它不会以'\ n''结尾,是吗?顺便说一句,您应该在C++程序中#include 而不是''。而你的缩排是可怕的。 – 2012-07-14 16:55:40

+0

感谢您的帮助...我已经替换了标题...不知道为什么我的缩进是可怕的;) – user1525814 2012-07-14 18:15:05

你要打开的文件很可能在DOS文本格式,所以它的线与\r\n结束,而不仅仅是\n

Cygwin FAQ有一个条目约this issue。我将你的代码复制到一个简单的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 
+0

谢谢你的帮助!它会工作没有在大多数unix环境下的建议修复,虽然(意味着它只有cygwin的依赖?)? – user1525814 2012-07-14 18:13:14

+0

@ user1525814:是的。该修复仅适用于Cygwin。 – jxh 2012-07-14 19:04:03