簡體   English   中英

使用C ++讀取.txt文件

[英]Reading a .txt file with C++

我正在編寫一個小腳本,該腳本要求我讀取僅由數字組成的.txt文件。 我對C ++不太熟悉,因此我的教授為我們提供了以下功能,該功能應允許我們讀取.txt文件:

(很抱歉將整個函數放在這里,但是由於我缺乏知識,所以我無法寫一個簡單的示例。)

int * ReadDataSample(const char * filename,int * NoSamples, int * NoApcs){
    ifstream SamplesFile;
int Counter = 0;
float data = 0;

int  * p = NULL;
char * s = NULL;
SamplesFile.open(filename,ios::in);

if(SamplesFile.is_open())
{
    while(!SamplesFile.eof())
    {

        SamplesFile >> data;
        Counter++;
    }
    SamplesFile.clear();
    SamplesFile.seekg (0, ios::beg);
    // read line
    s = new (nothrow) char[Counter];
    if(s == 0) { cout <<"Error: opening file for reading - could not allocate memory..." << endl; exit(EXIT_FAILURE); }
    (*NoSamples) = 0;
    // count number of samples in s 
    while (SamplesFile.getline(s, Counter))
    {
            ++(*NoSamples);
    }

    (*NoApcs) = Counter/(*NoSamples);

    SamplesFile.clear();
    SamplesFile.seekg (0, ios::beg);
    delete [] s;
}else{ cout << " Error opening file... exiting"<< endl; exit(EXIT_FAILURE);}


// allocate memory...
if(Counter != 0)
{   
    p = new (nothrow) int [Counter];
    if(p == 0) { cout <<"Error: opening file for reading - could not allocate memory..." << endl; exit(EXIT_FAILURE); }

    for(int i = 0; i < Counter && SamplesFile.eof()!=true; i++)
    {
        SamplesFile >> data;

        p[i] = (int)data;
    }
    return p;
}else{
    return NULL;
}
}

我嘗試通過首先啟動一個指向int的指針來調用此函數:

int NoLines = 480, NoColumns = 640;
int * p;
p = ReadDataSample("file.txt",& NoLines, & NoColumns);

但是,當我運行代碼時,我沒有收到任何錯誤,但是在控制台中得到了輸出浮點異常。 現在,我主要的唯一一件事就是帶有消息的提示。

如果有人能指出正確的方向,我將不勝感激。

編輯:

由於每個人似乎都同意現在提供給我的代碼並不是最好的選擇,因此我決定使用從網絡上收集的信息來創建一個新的代碼。 我所擁有的是:

void grabI(Qstruct & q){

cout << "in grabI" << endl;
int counter = 0;
int i = 0;


ifstream myfile;
myfile.open("data.txt",ios::in);

if(myfile.is_open()){
    while(!myfile.eof()){
        myfile >> i;
        counter++;
    }
counter--;

myfile.close();

myfile.open("data.txt",ios::in);    

for(i=0;i<counter;i++){
    myfile >> q.I[i];   
}


}
else{
    cout << "Unable to read file." << endl;
}   

myfile.close(); 
}

它按預期工作。 我有什么需要糾正的,還是可以這樣離開?

您不能使用.eof()那很糟糕,通常是從說C#開始,我會說嘗試while(sampleFile.good())並從那里去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM