2013-02-10 77 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(); 
}