C语言读取文件数据
char str[1024];
fgets( str , sizeof(str), fp ); //fp为你打开的文件指针
然后调用for循环去读取串的的数据,假设你的分隔符是空格,遍历str,遇到空格就得到一个数据,然后继续遍历,直到str尾。
然后再去fgets数据,再遍历,即可得到所有的数据。
能否给出具体代码,用fgets得到的是字符串,用哪个函数来遍历这个字符串并将其中的数据由字符串转为int型数据?
等一下再追问,或解除推荐,用strtok函数加atoi可轻松搞定。
关键是你读到的数据,怎么保存?是输出来就可以了吗?
2012-11-14
for(;;)
{
if(fscanf(fp, "%d", &n) != 1) break;
//处理读入的整数
}
如果要按行读取,需要两层循环, 外层用fgets, 内层用sscanf.
能具体说一下按行读取的话内层怎么循环吗?因为现在不确定每行有多少个数据。。。多谢
可以这样(下面用sscanf举例, 你也可以用strtok和atoi实现):
#define BUF_SIZE 100
char buf[BUF_SIZE];
char 星号 p;
int n;
...
while(fgets(s, sizeof(buf), fp)){
p = buf;
while(sscanf(p, "%d", &n) == 1){
//处理整数
//假设分隔符是空格,如果是tab换成\t。
//跳过前置空格:
while(p[0] == ' ') p++;
//跳过处理的整数,指针停在下一个空格(下面一个整数至少有一个前置空格):
while((p[0] != ' ') && (p[0] != '\0')) p++;
//如果停在字符串尾(可能跳过’\n'),跳出内循环
if(p[0] == '\0') break;
}
}
使用fopen,fscanf函数即可读取文件数据。
1、fopen的函数原型:FILE * fopen(const char * path,const char * mode);
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
2、例程:
#include<stdio.h>
#define F_PATH "d:\\myfile\\file.dat"
char c;
int main(){
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"r");
if(NULL==fp) return -1;//要返回错误代码
while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //从文本中读入并在控制台打印出来
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址
return 0;
}