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)
你要打开的文件很可能在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
谢谢你的帮助!它会工作没有在大多数unix环境下的建议修复,虽然(意味着它只有cygwin的依赖?)? – user1525814 2012-07-14 18:13:14
@ user1525814:是的。该修复仅适用于Cygwin。 – jxh 2012-07-14 19:04:03
您还没有检查'getline'成功。 – 2012-07-14 16:53:13
在输出诊断中,输出'line'的值,以便您可以看到它的内容。它不会以'\ n''结尾,是吗?顺便说一句,您应该在C++程序中#include而不是''。而你的缩排是可怕的。 –
2012-07-14 16:55:40
感谢您的帮助...我已经替换了标题...不知道为什么我的缩进是可怕的;) – user1525814 2012-07-14 18:15:05