2013-08-23 36 views
-1

我有一個用C++編寫的應用程序,它從外部txt文件獲取一些參數。此文件每行一個變量,他們是不同類型的,如:從文件中讀取不同類型的變量(每行1個)

0.8
C:\文檔\ TextFile.txt的

我想是這樣的(不完全像我現在沒有代碼)

FILE* f; 
char line[300]; 
f = fopen("parameters.txt", "r"); 

    scanf(line, val1); 
    scanf(line, val2); 
    scanf(line, val3); 
    fclose(f); 

但它不起作用,也嘗試與fgets和fgetc與一些c絞刑,並沒有工作。任何幫助或想法?變量總是相同的數字,並在每個地方有相同的類型(所以我認爲我不需要任何時間或循環)。非常感謝你在這個令我瘋狂的新手問題上的幫助。

編輯: 其實,這是確切的代碼我在這裏

sscanf(line, "%99[^\n]", tp); 
sscanf(line, "%99[^\n]", mcl); 
sscanf(line, "%99[^\n]", pmt); 
sscanf(line, "%99[^\n]", amx); 

它沒有工作,它編譯但程序崩潰,所以我把它改爲scanf函數,它沒」另一種解決辦法看到噸墜毀,但變量是空的。

+1

「scanf」的第一個參數應該是一個格式字符串。 – Barmar

+2

Pleae顯示您的實際代碼。您發佈的代碼離正確的地方很遠,很難評論。你錯過了格式化字符串,你調用'scanf'而不是'fscanf'(所以它不是從文件中讀取),而且你還沒有顯示'valN'的聲明。 – Barmar

+1

問題被標記爲C++,但您的代碼是使用C標準庫的I/O? –

回答

0

由於您使用的是C++(不僅僅是C),我建議您使用標準的iostreams庫而不是C stdio。特別是,std :: ifstream擅長從文件中讀取格式化數據。

#include <fstream> 
#include <string> 

// ... 

std::ifstream f("parameters.txt"); 

int val1; 
f >> val1; 

double val2; 
f >> val2; 

std::string val3; 
std::getline(f, val3); 

// etc 

根據您的應用程序,您可能還需要錯誤檢查。有關iostream的詳細信息,請參閱http://www.cplusplus.com/reference/iolibrary/

+0

它似乎可以工作,但它不會在任何變量上寫入任何內容(在執行時看到) – user2660557

+0

是當前工作目錄下的parameters.txt嗎?用ifstream的構造函數打開文件後,檢查f.fail()的結果。如果它返回true,則由於某種原因文件無法打開(可能是因爲找不到它)。 –

0

scanf用於讀取來自stdin的輸入,它與FILE無關。

如果你想逐行閱讀文本文件,我不會推薦FILE。它更復雜,更適合二進制閱讀。我會用ifstream代替,下面是一個非常簡單的例子:

#include <iostream> 
#include <fstream> 

using namespace std; 

int main(void) { 
    ifstream stream("parameters.txt"); 
    string line; 

    /* While there is still a line. */ 
    while(getline(stream, line)) { 
     // variable 'line' is now filled with everyone on the current line, 
     // do with it whatever you want. 
    } 

    stream.close(); 
} 
+0

我試過了,但沒有從文件中得到任何東西。我嘗試打印該行,看看它是什麼,它是空的。另外,如果我嘗試用變量填充變量,那什麼也沒有。 – user2660557

+0

你確定文件被打開了嗎?你有正確的道路嗎?請注意,'line'是一個'std :: string'類,不是'char *',所以它的用法稍有不同。 – Lochemage

+0

謝謝,它的工作,這是一個相關的問題(std :: string - char *) – user2660557

相關問題