c语言怎么从文件中读取数据,在线等,急求。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言怎么从文件中读取数据,在线等,急求。相关的知识,希望对你有一定的参考价值。
csv文件,格式为
字符,字符;字符
字符,字符;字符
字符,字符;字符
。。。
用什么方法把字符读出来分别存起来(三列对应三个字符串数组)?(按照第一列字符的字母顺序存入二叉树)
(这三块字符里都有空格)
这里提供一种做法,空格也会被存进字符串里。
如果空格是不需要的,可用DeleteSpace(node[i].a)来删除空格。或者在选取字符时跳过空格即可。
#define N 100
char a[N][N], b[N][N], c[N][N];
void DeleteSpace(char *p)
int i, j;
for(i = 0; p[i] != '\\0'; i++)
if(p[i] == ' ')
for(j = i; p[j] != '\\0'; j++)
p[j] = p[j+1];
i--;
int main()
char filename[100] = "in.csv";
FILE *file;
file = fopen(filename, "r");
if(file == NULL)
puts("error");
return 1;
char buf[N];
int i, j, cnt = 0;
while((fgets(buf, N, file)) != NULL)
// puts(buf);
i = j = 0;
for(; buf[i] != ','; i++)
//if(buf[i] == ' ') continue; //跳过空格,下面同理
a[cnt][j++] = buf[i];
a[cnt][j] = '\\0';
j = 0;
i++;
for(; buf[i] != ';'; i++)
b[cnt][j++] = buf[i];
b[cnt][j] = '\\0';
j = 0;
i++;
for(; buf[i] != '\\n'; i++)
c[cnt][j++] = buf[i];
c[cnt][j] = '\\0';
cnt++;
for(i = 0; i < cnt; i++)
printf("#%s# #%s# #%s#\\n", a[i], b[i], c[i]);
return 0;
追问
不好意思啊。。不是三个字符,是三组字符串。。。
追答这样不就是三组字符串吗..
参考技术A 主要通过fscanf,fprintf格式化输入输出函数实现,主要代码如下,#include <stdio.h>
int main(int argc, char *argv[])
FILE *pf=NULL;
char name[20];//存储用户名
float salary=0;//存储工资
pf=fopen("test.txt", "r+" );//test.txt文件中内容为kobe 90000.80
if(!pf)
printf("打开文件失败,程序退出!");
exit(1);
fscanf(pf,"%s %f",name,&salary);
salary*=0.9;//处理工资,例如扣除五险、扣税等。
fprintf(pf,"\n%f",salary);//写入test.txt文件中
printf("%s %f\n",name,salary);//输出kobe 81000.718750
if(pf)//关闭文件
fclose( pf);
pf=NULL;
return 0;
int fscanf( FILE *stream, const char *format, ... );函数fscanf()以scanf()的执行方式从给出的文件流中读取数据,
fscanf()的返回值是事实上已赋值的变量的数,如果未进行任何分配时返回EOF。
int fprintf( FILE *stream, const char *format, ... );fprintf()函数根据指定的format(格式)发送参数到由stream指定的文件。fprintf()只能和printf()一样工作,
fprintf()的返回值是输出的字符数,发生错误时返回一个负值。 参考技术B 用fscanf呀,,追问
fscanf遇到空格才结束,我需要把这三块分开读出来,分隔符是,和; 用fscanf怎么实现?
追答那还是用fgetchar,加个判断,只要不是,或者;就读取,
以上是关于c语言怎么从文件中读取数据,在线等,急求。的主要内容,如果未能解决你的问题,请参考以下文章