2009-10-25 129 views
2

我想从文件中读取: 该文件是多行的,基本上我需要遍历每个“单词”。字是非空间的东西。使用ifstream读取文件

样品输入文件将是:

示例文件:

测试2D
字3.5
输入
{

试验13.5 12.3
另一{
测试145.4
}
}

所以,我想是这样的:

ifstream inFile(fajl.c_str(), ifstream::in); 

if(!inFile) 
{ 
    cout << "Cannot open " << fajl << endl; 
    exit(0); 
} 

string curr_str; 
char curr_ch; 
int curr_int; 
float curr_float; 

cout << "HERE\n"; 
inFile >> curr_str; 

cout << "Read " << curr_str << endl; 

问题是,当它读取新行它只是挂起。我在测试13.5 之前阅读了所有内容,但一旦达到那条线,它就不会做任何事情。 任何人都可以告诉我我做错了什么? 有关如何做到这一点的更好建议?

我基本上需要通过文件,并在当时去一个“单词”(非白色字符)。 我

感谢

回答

3

您打开一个文件“INFILE”但是从“给std :: cin”什么特别的原因正在读?

/* 
* Open the file. 
*/ 
std::ifstream inFile(fajl.c_str()); // use input file stream don't. 
             // Then you don't need explicitly specify 
             // that input flag in second parameter 
if (!inFile) // Test for error. 
{ 
    std::cerr << "Error opening file:\n"; 
    exit(1); 
} 

std::string word; 
while(inFile >> word) // while reading a word succeeds. Note >> operator with string 
{      // Will read 1 space separated word. 
    std::cout << "Word(" << word << ")\n"; 
} 
+0

错字:) 我的意思是说INFILE >>问题本身不是编程 – grobartn 2009-10-25 00:50:30

1

不知道iostream库的“精神”如何,但你可以使用未格式化的输入。例如:

char tempCharacter; 
std::string currentWord; 
while (file.get(tempCharacter)) 
{ 
    if (tempCharacter == '\t' || tempCharacter == '\n' || tempCharacter == '\r' || tempCharacter == ' ') 
    { 
     std::cout << "Current Word: " << currentWord << std::endl; 
     currentWord.clear(); 
     continue; 
    } 
    currentWord.push_back(tempCharacter); 
} 

这是否行得通?

+1

因为'的IStream :: GET'不接单'的char *'为参数和检查'!文件,将无法正常工作。在执行读取之前,eof()不总是有效。此外,您正在将宽字符文字与“char”类型的窄对象进行比较(这些类型不兼容)。我会编辑它为你修复它。 – 0x499602D2 2013-11-07 02:30:24

+0

@ 0x499602D2:谢谢修复:) – 2013-11-07 04:56:41