2014-10-29 87 views
0

我是用C++新(和文件輸入輸出),我學會了如何使用fprint打印從.txt東西在一個格式化的風格,但如何搜索某個值並將該值保存在局部變量中?下面是代碼保存:讀一個.txt文件保存在CPP和保存價值的局部變量

void savestate(state a){ //state is a struct with data I need such as position etc 
    FILE * save; 
    int data[]= { a.level, a.goalX, a.goalX, a.monX, a.monY }; 
    save = fopen("game.txt", "wb"); // << might have to use suggestion C 
    fwrite(data, sizeof(int), sizeof(data), save); // is this actually the correct way to do it? 
    fclose(save); 
} 

爲負載,我堅持這一點:

void loadstate(){ 
    FILE* save; 
    save = fopen("game.txt", "rb"); 
    if(save== NULL) perror("no savegame data"); 
    else{ 
     // don't even know what function I should use 
    } 

順便說一句,我以後激活保存功能,game.txt中不以相當可讀的格式。我可以在我的記事本中打開,但是它顯示了一些像「ÌÌÌÌÌÌÌÌÌÌøøÁ_ÌÌÌÌ̃ƒ」這種沒有意義的東西。任何想法? :d寫作的

+1

不要將'.txt'文件寫成二進制文件。您正在編寫位,而不是上面的代碼中的ASCII。 'fwrite'的參數是'buffer,size,count,stream' - 'sizeof(data)'不是'data'中元素個數的個數。 – Yakk 2014-10-29 15:19:21

+0

@Yakk對不起,我不是很懂,我在cplusplus教程中遵循了一個例子。我怎麼知道我是否將.txt寫成二進制文件和ASCII碼?我會嘗試改變的sizeof只是5然後 – Rei 2014-10-29 15:24:29

+0

在C++中使用標準的類和函數[I/O庫(http://en.cppreference.com/w/cpp/io)!如果你堅持使用'FILE *',使用'fprintf()'函數將文本寫入文件。 – 2014-10-29 15:27:22

回答

1

使用文本文件,而不是二進制文件。 saveData函數 將創建data.txt文件,然後函數loadData從該文件讀取數據。我想要更多的解釋在下面留言。

#include <stdio.h> 
#include <stdlib.h> 

void saveData() { 
    FILE* f = fopen("data.txt", "w"); 
    if(f == NULL) { 
     printf("cant save data"); 
     return; 
    } 
    //write some data (as integer) to file 
    fprintf(f, "%d %d %d\n", 12, 45, 33); 
    fprintf(f, "%d %d %d\n", 1, 2, 3); 
    fprintf(f, "%d %d %d\n", 9, 8, 7); 

    fclose(f); 
} 

void loadData() { 
    int data1, data2, data3; 
    FILE* f = fopen("data.txt", "r"); 
    if(f == NULL) { 
     printf("cant open file"); 
     return; 
    } 
    //load data from file, fscanf return the number of read data 
    //so if we reach the end of file (EOF) it return 0 and we end 
    while(fscanf(f, "%d %d %d", &data1, &data2, &data3) == 3) { 
     printf("data1 = %d data2 = %d data3 = %d\n", data1, data2, data3); 
    } 

    fclose(f); 

} 

int main() { 
    saveData(); 
    loadData(); 
    return 0; 
} 
-1

示例文件:從文件中讀取

#include<fstream> 
#include<iostream> 
#include<string> 
using namespace std; 
int main(){ 
int i = 78; 
string word = "AWord"; 
ofstream fout("AFile", ios_base::out | ios_base::binary | ios_base::trunc); 
fout << i; 
fout << endl; 
fout << word; 
fout.close(); 

return 0 
} 

例如:爲此

#include<fstream> 
#include<iostream> 
#include<string> 
using namespace std; 
int main(){ 
int ix; 
string wordx; 
ifstream fin("AFile", ios_base::in | ios_base::binary); 
fin >> ix; 
while(fin.get() != '\n'){ 
    fin.get(); 
} 
fin >> wordx; 
fin.close(); 

return 0 
} 
+0

如果您仔細閱讀該問題,就會發現OP不希望在文件中包含二進制數據。 – 2014-10-29 15:44:10