2012-07-24 52 views
2

我正在使用文件系统库,我试图创建一个readline函数。从返回int的函数中获取char的正确方法?

int al_fgetc(ALLEGRO_FILE *f) 

介绍了在5.0.0

阅读并指定文件中返回下一个字节。在文件结尾或发生错误时返回EOF。

这是我从库中使用的函数。我想要做的是+ =生成的字符串,如果它是!= EOF这是-1。我只是不确定是否需要将其转换为正确的结果。会这样做这样做︰

bool File::readLine(std::string& buff) 
{ 
    if(eof() || !isOpen()) 
    { 
     return false; 
    } 
    buff = ""; 
    int c = 0; 
    while(c = al_fgetc(m_file) != EOF && c != '\n') 
    { 
     buff += (char)c; 
    } 
    return buff.length() > 0; 
} 

我将要从文件中读取utf-8,所以我需要确保这个工作正常。

感谢

+0

并通过+ =我假设你的意思是追加到字符串的结尾? – yhyrcanus 2012-07-24 19:13:03

+0

是的,我的意思是。 – jmasterx 2012-07-24 19:13:53

+1

请不要在C++中使用C风格转换,而应使用'static_cast (c)'运算符。 – 2012-07-24 19:19:05

回答

4

是的,这将工作,除非你需要一个额外的括号,因为!=运营商具有更高的优先级比=操作:

while((c = al_fgetc(m_file)) != EOF && c != '\n') 
    ... 

的唯一原因,fgetc回报int,而不是char是有有257个可能的返回值:所有256个可能的字节,或EOF,这表示文件中没有剩余数据。它将始终返回0-255或EOF,因此,一旦您测试了EOF,将返回值设置为charunsigned char是安全的。

1

呀,为什么他们返回int是因为在一个char可能被用于EOF信号没有“自由”价值的唯一原因。因此,检查它不是EOF,然后将它重新转换为char,这正是他们希望你做的。

1

尝试使用feof(m_file)来检查您是否已经点击了文件的结尾,而不是检查fgetc返回的字符。这应该从eof检查中分离出你的读取循环,所以不需要投射。

相关问题