VC高手请进,在线等答复,急! 20
#include<string.h>#include<stdio.h>#include"conio.h"#include"stdlib.h"#include<io.h>#...
#include <string.h>
#include <stdio.h>
#include "conio.h"
#include "stdlib.h"
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
int chrcnt(const char *string,int letter);
long filel(const char *path);
int main(void)
{
FILE *stream;
char gets[20];
char ch='a';
int i=0;
int runCount=0;
char chFinded[200];
int chCount[200]={0};
int flag=0;
int totalCount=0;
long length;
char path[100]="d:\\a.txt";
fpos_t fpos;
length=filel(path);/*取出文件长度*/
/*printf("%d",length);*/
if ((stream=fopen(path,"r"))==NULL)
{
printf("Error");
getch();
exit(1);
}
fgetpos(stream,&fpos);
do
{
flag=0;
totalCount=0;
fsetpos(stream,&fpos);/*设置文件流中的指针*/
ch=getc(stream);/*从文件中取出字符*/
fgetpos(stream,&fpos);/*取出文件流中的指针*/
for (i=0;i<=runCount;i++)/*在已经查找的字符数组查找是否存在正在查找的字符,存在则break,最文件的下一个字符进行判断直到文件结束*/
{
/*printf("%c-----%c\n",chFinded[i],ch);*/
if((chFinded[i] == ch) || (ch == '\n'))
{
flag=1;
break;
}
}
/*printf("%c\n",ch);*/
if(flag == 0)/*判断当前字符是否已经计算*/
{
runCount++;
chFinded[runCount]=ch;/*往已经查找过的字符数组中添加正在查找的字符*/
i=0;
fsetpos(stream,0);
while ( i < length )
{
fgets(gets,21,stream);/*从文件中取出20个字符*/
i+=strlen(gets);
totalCount+=chrcnt(gets,ch);/*计算指定字符出现的次数*/
/*printf("%d---%d\n",chrcnt(gets,ch),totalCount);*/
/* printf("%s:%d\n",gets,strlen(gets)); */
/* printf("length:%d----i:%d\n",i,length); */
}
chCount[runCount]=totalCount;/*存储当前查找字符的人数*/
}
/*printf("%c---%d",chFinded[runCount],chCount[runCount]);*/
}
while ( ch != EOF );
for (i=0;i<100 ;i++ )/*输出已经统计过的字符,和相应的个数,,和所占的比率*/
{
if(chCount[i] != 0 )
{
printf("The char:'%c'--show %d times,rate%f\n",chFinded[i],chCount[i],chCount[i]/(float)length);
}
}
fclose(stream);
getch();
}
int chrcnt(const char *string,int letter) /*指定计算字符串内的指定字符的个数*/
{
int count=0;
int i=0;
char temp;
// for (i=0;i<strlen(string);i++)
{
temp=string[i];
/*printf("%c--%c",letter,string[i]);*/
if(temp == letter)
count++;
}
return count;
}
long filel(const char *path)/*得到指定文件的长度*/
{
int handle;
long length;
handle = open(path,O_RDONLY);
length=filelength(handle);
close(handle);
return length;
}
为什么程序运行有错误?我自己写的找不出逻辑错误,请高手帮忙,给予我答复.谢谢.在线等.另外请高手说说我这程序的原理,能处理视频音频吗?
这个程序原先是用TC做的,想改成VC可以运行的,估计错误是出在TC与VC不兼容上的错误,请高手改为VC可以运行的程序,谢谢. 展开
#include <stdio.h>
#include "conio.h"
#include "stdlib.h"
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
int chrcnt(const char *string,int letter);
long filel(const char *path);
int main(void)
{
FILE *stream;
char gets[20];
char ch='a';
int i=0;
int runCount=0;
char chFinded[200];
int chCount[200]={0};
int flag=0;
int totalCount=0;
long length;
char path[100]="d:\\a.txt";
fpos_t fpos;
length=filel(path);/*取出文件长度*/
/*printf("%d",length);*/
if ((stream=fopen(path,"r"))==NULL)
{
printf("Error");
getch();
exit(1);
}
fgetpos(stream,&fpos);
do
{
flag=0;
totalCount=0;
fsetpos(stream,&fpos);/*设置文件流中的指针*/
ch=getc(stream);/*从文件中取出字符*/
fgetpos(stream,&fpos);/*取出文件流中的指针*/
for (i=0;i<=runCount;i++)/*在已经查找的字符数组查找是否存在正在查找的字符,存在则break,最文件的下一个字符进行判断直到文件结束*/
{
/*printf("%c-----%c\n",chFinded[i],ch);*/
if((chFinded[i] == ch) || (ch == '\n'))
{
flag=1;
break;
}
}
/*printf("%c\n",ch);*/
if(flag == 0)/*判断当前字符是否已经计算*/
{
runCount++;
chFinded[runCount]=ch;/*往已经查找过的字符数组中添加正在查找的字符*/
i=0;
fsetpos(stream,0);
while ( i < length )
{
fgets(gets,21,stream);/*从文件中取出20个字符*/
i+=strlen(gets);
totalCount+=chrcnt(gets,ch);/*计算指定字符出现的次数*/
/*printf("%d---%d\n",chrcnt(gets,ch),totalCount);*/
/* printf("%s:%d\n",gets,strlen(gets)); */
/* printf("length:%d----i:%d\n",i,length); */
}
chCount[runCount]=totalCount;/*存储当前查找字符的人数*/
}
/*printf("%c---%d",chFinded[runCount],chCount[runCount]);*/
}
while ( ch != EOF );
for (i=0;i<100 ;i++ )/*输出已经统计过的字符,和相应的个数,,和所占的比率*/
{
if(chCount[i] != 0 )
{
printf("The char:'%c'--show %d times,rate%f\n",chFinded[i],chCount[i],chCount[i]/(float)length);
}
}
fclose(stream);
getch();
}
int chrcnt(const char *string,int letter) /*指定计算字符串内的指定字符的个数*/
{
int count=0;
int i=0;
char temp;
// for (i=0;i<strlen(string);i++)
{
temp=string[i];
/*printf("%c--%c",letter,string[i]);*/
if(temp == letter)
count++;
}
return count;
}
long filel(const char *path)/*得到指定文件的长度*/
{
int handle;
long length;
handle = open(path,O_RDONLY);
length=filelength(handle);
close(handle);
return length;
}
为什么程序运行有错误?我自己写的找不出逻辑错误,请高手帮忙,给予我答复.谢谢.在线等.另外请高手说说我这程序的原理,能处理视频音频吗?
这个程序原先是用TC做的,想改成VC可以运行的,估计错误是出在TC与VC不兼容上的错误,请高手改为VC可以运行的程序,谢谢. 展开
1个回答
展开全部
VC肯定兼容TC。是程序本身的问题。
只大概看了一下,发现了几个小错误:
1、fsetpos(0);不能这么写,要写成fpos=0;fsetpos(&fpos);
2、最大的do while循环中,每次进入时,文件指针都指向文件头,那么,每次读入的都是文件第一个字符,当然出错。建议增加一个变量,比如offset,初始化为0,每次循环开始时,fpos=offset++;fsetpos(stream,&fpos);
3、查找某个字符是否已经在chFinded中时,循环条件应该是i<runCount,不是i<=runCount;
4、在if(flag==)这个代码段里,开始时runCount不能++,应该在chFinded[runCount]=ch;和chCount[runCount]=totalCount;之后,才能runCount++;
5、文件中,回车是两个字符,所以碰到'\n'时,要再做一次fgetc(),把回车的第2个字符读过去
另外,我不知道楼主干嘛要用一个gets[21]来按行读,一个字符一个字符地读不就行了么,还可以省掉那个chrcnt函数。
只大概看了一下,发现了几个小错误:
1、fsetpos(0);不能这么写,要写成fpos=0;fsetpos(&fpos);
2、最大的do while循环中,每次进入时,文件指针都指向文件头,那么,每次读入的都是文件第一个字符,当然出错。建议增加一个变量,比如offset,初始化为0,每次循环开始时,fpos=offset++;fsetpos(stream,&fpos);
3、查找某个字符是否已经在chFinded中时,循环条件应该是i<runCount,不是i<=runCount;
4、在if(flag==)这个代码段里,开始时runCount不能++,应该在chFinded[runCount]=ch;和chCount[runCount]=totalCount;之后,才能runCount++;
5、文件中,回车是两个字符,所以碰到'\n'时,要再做一次fgetc(),把回车的第2个字符读过去
另外,我不知道楼主干嘛要用一个gets[21]来按行读,一个字符一个字符地读不就行了么,还可以省掉那个chrcnt函数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询