gpt4 book ai didi

c - 用C读取文件的问题

转载 作者:行者123 更新时间:2023-11-30 18:55:14 25 4
gpt4 key购买 nike

我编写了一个程序来逐行扫描文件中的数字,并查找每个数字出现的次数。它可以工作,但最多只能 33 行。如果我的文本文件有 34 行及以上,它不会响应。我可以知道是什么问题以及需要做什么吗?这是代码:`

#include<stdio.h>
#include<conio.h>
int numOfDig(int);
int numOfLines(FILE*);
main()
{
FILE *fp;
char ch;
int c,i,flag=1,line=1,numLine;
int arr[101];
for(i=1;i<101;i++)
{
arr[i]=0;
}
fp = fopen("new1.txt","r");
numLine=numOfLines(fp);
fclose(fp);
fp=fopen("new1.txt","r");
while(line<=numLine)
{
ch=fgetc(fp);
while((ch=fgetc(fp)!=10))
{
fscanf(fp,"%d",&i);
(arr[i])++;
c=numOfDig(i);
fseek(fp,c-2,SEEK_CUR);
}
line++;
}
fclose(fp);
for(i=1;i<101;i++)
{
if(arr[i]!=0)
printf("%d = %d\n",i,arr[i]);
}
getch();
}

int numOfDig(int num)
{
int n=0;
for(n=0;num>0;num/=10)
n++;
return(n);
}

int numOfLines(FILE *fp)
{
int numLines=0;
char ch;
do
{``
ch = fgetc(fp);
if(ch == '\n')
numLines++;
} while (ch != EOF);
printf("%d ",numLines);
return (numLines);
}

最佳答案

除了其他逻辑问题[已在其他答案和评论中指出],我在您的代码中可以看到

(arr[i])++;

arr[i]指向无效的内存位置,如 i 的值从for出来后没有被重置环形。因此,本质上您正在访问越界内存并面临off-by-one错误。这将导致 undefined behaviour .

注释:

  • for(i=1;i<101;i++) ,循环应从 0 开始,因为 C 数组的起始索引为 0 .
  • 始终检查 fopen() 是否成功在访问返回的指针之前。

关于c - 用C读取文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28323590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com