2014-10-29 77 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