C语言读取文件数据

假设我有一个数据文件,共有500行数据,每行数据的个数不相同,比如第一行有6个int型数据,第二行有7个,第三行有8个。。。但数据类型都一样,请问哪个函数可以方便的读取每... 假设我有一个数据文件,共有500行数据,每行数据的个数不相同,比如第一行有6个int型数据,第二行有7个,第三行有8个。。。但数据类型都一样,请问哪个函数可以方便的读取每行的数据,从而通过一个for循环将所有数据读取出来? 展开
 我来答
南北186
推荐于2019-08-24 · TA获得超过9.1万个赞
知道小有建树答主
回答量:114
采纳率:100%
帮助的人:5.5万
展开全部

先用getline或fgets读取数据到一个字符串中,这个串定义的长一点,保证够用就行。

举例:

char str[1024]。

fgets( str , sizeof(str), fp ),//fp打开的文件指针。

然后调用for循环去读取串的的数据,假设你的分隔符是空格,遍历str,遇到空格就得到一个数据,然后继续遍历,直到str尾。

再去fgets数据,再遍历,即可得到所有的数据。

拓展资料:

C语言是一门通用计算机编程语言,广泛应用于底层开发。

C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

kaixingui2012
推荐于2017-09-08 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6456万
展开全部
先用getline或fgets读取数据到一个字符串中,这个串定义的长一点,保证够用就行,如:
char str[1024];
fgets( str , sizeof(str), fp ); //fp为你打开的文件指针

然后调用for循环去读取串的的数据,假设你的分隔符是空格,遍历str,遇到空格就得到一个数据,然后继续遍历,直到str尾。
然后再去fgets数据,再遍历,即可得到所有的数据。
更多追问追答
追问
能否给出具体代码,用fgets得到的是字符串,用哪个函数来遍历这个字符串并将其中的数据由字符串转为int型数据?
追答
等一下再追问,或解除推荐,用strtok函数加atoi可轻松搞定。
关键是你读到的数据,怎么保存?是输出来就可以了吗?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-11-14
展开全部
如果允许不按行读取,用scanf读整数即可,scanf会自动忽略换行和其它空白符。
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;

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
推荐于2017-09-12 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:892万
展开全部

使用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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
思孕
2012-11-14 · TA获得超过389个赞
知道小有建树答主
回答量:645
采纳率:0%
帮助的人:420万
展开全部
把数据发给我!1390564261@qq.com我大概能搞定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式