2013-02-10 57 views
0

好了,所以我想打开一个文件进行阅读,并且我只想读取第一个字符,然后根据我将它发送给给定函数的那个​​字符。例如,如果它是一个数字,我把它发送到一个函数,继续阅读,看看它只是一个int或一个浮点数。 我似乎无法弄清楚如何做到这一点逐字读取fstream并将fstream传递给函数以供进一步读取?

void dummy(char dum, std::ifstream& fin){ 
    char test = dum; 
    fin>>test; 
    string simple = simple + test; 
    simple = simple + test; 
    ofstream outFile; 
    outFile.open("output.txt"); 
    outFile<<simple<<"\n"; 
    return; 
} 


int main(int argc, char *argv[]){ 
    char c; 
    //ifstream readFile; 
    /*if(argc >= 1){ 
    readFile.open(argv[1]); 
    }*/ 
    ifstream readFile; 
    readFile.open("input.txt"); 
    readFile.unsetf(ios_base::skipws); 
    readFile>>c; 
    while(!readFile.eof()) 
    { 
     switch(c){ 
     case 'a': 
      dummy(a,readFile); 
     } 
    } 
} 

它不断抛出这个错误:Microsoft C++异常:性病:: bad_alloc的内存位置(位置)。任何帮助是极大的赞赏。

+1

'string simple = simple + test;'根本没有意义。 – us2012 2013-02-10 04:54:15

+1

我想把'std :: ifstream :: eof()'放到一个寒冷而黑暗的山沟里,没有一个没有十几年行业经验的人可以找到它。 – WhozCraig 2013-02-10 05:41:51

+0

'dummy(a,readFile);' - 你是否想要传递变量'c'? – 2013-02-10 06:28:02

回答

0

错误是由这一行造成的:

string simple = simple + test; 

从未见过这一点,但我的猜测是你串连用于尚未初始化字符串。用这个代替:

void dummy(char dum, std::ifstream& fin) 
{ 
    char test = dum; 
    fin>>test; 
    string simple; 
    simple = simple + test; 
    ofstream outFile; 
    outFile.open("output.txt"); 
    outFile<<simple<<"\n"; 
    return; 
} 

编辑:从文本文件中读取字符集数使用istream::read方法:

char test = '\0'; 
fin.read(&test, 1); // read one character into buffer 
+0

谢谢你的工作,以阻止错误!现在看来鳍>>测试;不读字符。你知道如何才能读取字符 – Andy 2013-02-11 00:16:32

+0

当然,请参阅我在'istream :: read'方法上的编辑 – PeddleSpam 2013-02-11 04:57:41

+0

非常感谢!我终于学会了如何做到这一点! – Andy 2013-02-11 14:48:12

0

您可以打开txt文件,并通过给第一个字符下面的代码! 第一个字符在变量s中。

#include <fstream> 
#include <iostream> 
#include <conio.h> 
using namespace std; 

void main (void) 
{ 
char *s=NULL; 
char str1; 
ifstream file_txt("file_name.txt"); 
if (!file_txt) 
{ 
cout << "sorry I cannot find txt file! "; 
getch(); 
exit(0); 
} 
file_txt >> str1; 
s= &str1; 
file_txt.close(); 
}