菜鸟请教:c语言中怎么统计一个文件中的数据个数

数据形式:
tpyedef struct goods
{
char node[20];
char name[20];
char num[20];
char price[20];
}ITEM;
文件中存放形式如下:
01 apple 2
02 shoes 100
03 banana 1
如果这样的话数据就是三个,但怎么编一个函数把这个个数(三个)统计出来
希望能把完整的代码写出来,或者指出我编的代码的错误
int tongji()
{
int i;
ITEM m[100];
FILE * fp;
if((fp=fopen("sp.txt","rt"))==NULL) //这个sp.txt是文件的名字
{
printf("\n error on open it!\n");
exit(1);
}
fscanf(fp,"%s %s %s %s\n",m[0].code,m[0].name,m[0].num,m[0].price);
for(i=1;m[i-1].code!="";i++)
{
fscanf(fp,"%s %s %s %s\n",m[i].code,m[i].name,m[i].num,m[i].price);
}
return(i-1);
}
//这个函数由主函数调用,文件里有三个数据,但结果却是193个,怎么也检查不出来错误在哪,求救,有点急,谢谢
如果回答出来了,分数可以追加的

第1个回答  推荐于2017-09-16
//下面是正确的程序,请加分;
//运行时将sp.txt文件复制到C:\
#include <stdio.h>
#include<stdlib.h>
typedef struct goods
{
char node[20];
char name[20];
char num[20];
char price[20];
}ITEM;
int tongji()
{
int i;
ITEM m[100];
FILE * fp;
if((fp=fopen("c:\\sp.txt","rt"))==NULL) //这个sp.txt是文件的名字
{
printf("\n error on open it!\n");
exit(1);
}
fscanf(fp,"%s %s %s",m[0].node,m[0].name,m[0].num);
for(i=1;!feof(fp);i++)
{
fscanf(fp,"%s %s %s",m[i].node,m[i].name,m[i].num);
}
return(i);
}

int main(int argc, char* argv[])
{
printf("number=%d\n",tongji());
}本回答被提问者采纳

菜鸟请教:c语言中怎么统计一个文件中的数据个数
根据文件格式 依次把数据读出 读到一个 计数一个 读完文件 就知道总个数了。

C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开_百度知 ...
intword,num=0;char ch;while((ch=getchar())!='\n'){ if(ch=='')word=0;else { if(word==0){ num++;word=1;} } } printf("%d",num);return0;}

如何用c语言读取文本文件中的多行数据
用循环存入数组比较简单。查下api有函数可以一行一行的读写的。比如getline 先保存到一个字符串数组中。然后再处理

急!C语言菜鸟求助关于一个简单的求整除个数的编程.
printf("能被678整除的有%d个,加起来是:%d\\n",j,sum);}

用c语言求一组数据的众数
众数(Mode)统计学名词,将数据按从大到小顺序排列后,在统计分布上具有明显集中趋势点的数值,代表数据的一般水平(众数可以不存在或多于一个)。修正定义:是一组数据中出现频数最多的那个数值,用M。表示。理性理解:简单的说,就是一组数据中占比例最多的那个数。用众数代表一组数据,可靠性较差,...

如何用c语言读取文本文件中的多行数据
1、用fgets函数可以读取文件中某行的数据,某列数据就必须一个一个读入每行的第几个字符,再存入到一个字符串当中。2、例程:include<stdio.h>#include<string.h>void main(){ char a[100],b[100],c[100]; int i=3,j=4,k=0; \/\/第三行,第四列 FILE *fp = fopen("data.tx...

c语言菜鸟求助 在已知的几个数之间随机选择一个
include include <iostream> using namespace std;int GetSrand(int a[],int len){ srand(time(0));return a[rand()%len];} int main(){ int a[] = {1,2,3,6,8,9};int r = GetSrand(a,6);cout<<r<<endl;return 0;} 将这些数放入一个数组中,随机得到数组的下标就可以了。

C语言数据的范围怎么求?
答:256种方法肯定能表示256个数啊。3、无符号char类型的最大值与最小值是多少?char类型是一个字节的,无符号数,它能表示256个数,从0开始算就是[0,255],所以8位的unsigned char类型的最大值就是255 就是2^8 - 1因为我们是从0开始表示的嘛。最小的值就是0啦。4、有符号char类型的最大...

C语言的一个菜鸟问题,求三数中的最大值
include (stdio.h)改成#include <stdio.h> return (i);改成return (q);

c++ 中如何读取文件 并使用文件中的数据
1、在电脑上新建一个文件夹,名称叫txt2array。然后,打开我们的devc++,新建一个控制台c++项目,名称也叫txt2array。2、将项目文件及源代码文件以及我们演示用的数据文件都存放在txt2array文件夹中。3、向数据文件中写入一些演示用数据。4、标准库的输入输出类的关系。5、第一个操作读文件,我们可以...

相似回答