2012-09-13 64 views
1

我有零知识有关使用C中的文件,我想读这个数据的fscanf读取或保存

 
050  1100    
051  5100 

100  0005 

文件并保存到数字常量是这样的:

PC cod IR  
\/ \/ \/  

050 --- 1 ---- 200
051 --- 5 ---- 100

Mem[PC] 
    \/ 

100 - 0005

问题是我不知道该怎么做。我只有从读取我的文件并将第一个数据保存到char缓冲区的书中读取的代码,或者至少这是我认为它的作用,但它不会继续处理其余数据。

#include <stdio.h>  
int main(int argc, char **argv) 
{ 
    FILE *fp;  
    char buffer[100]; 

    fp = fopen("prueba.txt", "r"); 
    fscanf(fp, "%s", buffer); 
    printf("%s", buffer);  
    fclose(fp);  

    return 0;  
} 

,这是prueba.txt内容:

 
050  1100    
051  5100 

100  0005 

有人可以帮我吗?

回答

-1

你现在正在做的是只读一个单词,你正在使用fscanf读取,%s读取它看到的第一个字符串。

如果你想读的所有单词的文件,则必须遍历他们像这样:

while(feof(fp)==0){ 

fscanf(fp,"%s",buffer); 
*** Do what every action you want to do with your buffer here *** 
} 
+1

'while(!feof(fp)){read;处理; }'是一个反模式,因为'feof'只有当你试图读取文件末尾时,才会变成真,而不是当你到达文件末尾时。所以你会得到一个失败的读操作,代码不准备处理。 – zwol

1

首先,忘记你曾经听说过的fscanf。它比它值得的更麻烦。

第二关,我不知道你所说的“保存数字变成常数”的意思,但在一般情况,做这样的用C事情的正确方法是符合fgets读线(或getline(如果有的话)),然后使用strsepstrtoul从行中提取单个数字。

第三,在风格上来说,只有一件事情比在圆括号内部放置空格更糟糕,那就是不一致在圆括号和逗号内部和/或周围放置空格。你会让下一个必须阅读此代码的人头疼。