C语言文件操作为啥这个文件读取进入死循环了?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言文件操作为啥这个文件读取进入死循环了?相关的知识,希望对你有一定的参考价值。

代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE -1 //做两个宏.
#define FALSE 0
struct Fname

char* str; //存储文件名称
;
char ch[3][6]="1.txt","2.txt","3.txt";
Fname FileName[100];
Fname* fname()

for(int j=0;j<3;j++)

FileName[j].str=ch[j];

return FileName;


int ReadFile(char *fname, char* buffer)

FILE *fp;
char ch;
int i=0;
if((fp=fopen(fname,"rt"))==NULL)

printf("\nCannot open file strike any key exit!");
getchar();
return FALSE;

printf("\n");
while(!feof(fp))

ch=fgetc(fp);
buffer[i]=ch;
i++;

buffer[i] = '\0';
printf("\n");
fclose(fp);
printf("\n**********************************\n");
printf("%s",buffer); //输出文件内容
printf("\n**********************************\n");
return TRUE;

void main()

int i=0;
Fname *Fn;
char *p = NULL; //#define NULL 0
char *buf = NULL;
buf = (char*)malloc(sizeof(char)*1024); //1k
Fn=fname();
for(i=0;i<3;i++)

p=Fn[i].str;
printf("%s",p);
ReadFile(p, buf);

free(buf);

我拷贝错了,大家不要看上面的代码,看这个
#include<stdio.h>
void main()

int stuid,stuscore,stunum,i;
FILE *fp;
printf("学生数:");
scanf("%d",&stunum);
if((fp=fopen("stu.txt","w"))==NULL)
printf("can not open file\n");
return;
printf("请输入%d个学生信息",stunum);
for(i=0;i<stunum;i++)

scanf("%d%d",&stuid,&stuscore);
fprintf(fp,"stuid-%d\tstuscore-%d",stuid,stuscore);

fclose(fp);
if((fp=fopen("stu.txt","r"))==NULL)
printf("failede to open file!");
return;
while(fscanf(fp,"%d%d",&stuid,&stuscore)!=EOF)

printf("stuid-%d\tstuscore-%d\n",stuid,stuscore);

fclose(fp);

学生数:2
请输入2个学生信息1 33
2 44
stuid-1 stuscore-33
stuid-2 stuscore-44
Press any key to continue

#include<stdio.h>
void main()

int stuid,stuscore,stunum,i;
FILE *fp;
printf("学生数:");
scanf("%d",&stunum);
if((fp=fopen("stu.txt","w"))==NULL)

printf("can not open file\n");
return;

printf("请输入%d个学生信息",stunum);
for(i=0;i<stunum;i++)

scanf("%d%d",&stuid,&stuscore);
fprintf(fp,"stuid-%d\tstuscore-%d\n",stuid,stuscore); //这里把格式都带好

fclose(fp);
if((fp=fopen("stu.txt","r"))==NULL)

printf("failede to open file!");
return;

while(EOF !=fscanf(fp,"stuid-%d\tstuscore-%d\n",&stuid,&stuscore)) //这里把格式都带好

printf("stuid-%d\tstuscore-%d\n",stuid,stuscore); //这里把格式都带好

fclose(fp);
参考技术A fprintf只能以二进制的形式读写的吧,把fp=fopen("stu.txt","rb")试试,(前面一个改成wb) 参考技术B 要使用while(!feof(fp)) ........; 点到为止

在用KEIL调试程序时,遇到读取外部数据、死循环使得程序不能继续执行时怎么办?

在循环处设断点,程序执行到后修改一下外部数据,使其满足跳出循环的条件,然后再执行,这样就可以继续调试下去。如果这种情况很多,可以通过在程序中增加条件编译语句方便调试。比如:

#define DEBUG //条件编译选择,可放在文件头部.H文件之后。
。。。。。。。

#ifdef DEBUG
x=0; //调试时使用这条语句,执行下一句时就能跳出循环了
#endif
while(x==1); //假设这就是你所说的读取外部数据的语句,未读到数据则原地循环

调试完成后注掉#define DEBUG,也就是
//#define DEBUG
这样正式编译时x=0;这条语句就不会被编译进去了。以后调试时再恢复。

这只是个例子,相信你能理解这个含义从而加以应用。
参考技术A 怎么会呢?你的调试环境选择使用外部总线了没?追问

什么外部总线?可以说清楚点吗?

以上是关于C语言文件操作为啥这个文件读取进入死循环了?的主要内容,如果未能解决你的问题,请参考以下文章

c语言 scanf("%d",&a);输入字符为啥会进入死循环?

用c语言编的程序生成exe文件为啥一打开马上就自动关闭了啊

c语言一个死循环中为啥执行完一个功能函数就退出了?

为啥C语言输出文件内容乱码

C语言中死循环怎么解决?

Java 循环读取文件导致内存溢出!