C语言函数怎么判断无限循环,求解 为什么这个函数无限循环 不能得出结果 我半天没找出错误!…...

博主在尝试解决一道C语言题目,该题目要求从文件IN.DAT中读取文章,然后对每行中的小写字母'o'进行特殊处理,即将'o'左右两边的字符串交叉换位并删除'o'。博主提供的代码在编译和构建时没有错误,但在运行时无法得到预期结果。可能的问题出在`void StrOR(void)`函数中,可能存在无限循环的情况。博主希望有人能帮助找出问题并提供详细的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

这是一道c语言题,题目如下:

函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中:请编制函数StrOR(),其函数的功能是:以该文章中的行为单位依次扫描一行字符串中的小写字母o,每次将小写母o的左右字符串部分作交叉换位,即左边字符串移到小写字母o的右边,而原先右边的则反之,并把小写母o删除,依次直至这一行中的小写母o处理完,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT.DAT中。

例如原文:you have the correct record.

第1个o:u have the correct record.y

第2个o:rrect record.yu have the c

第3个o:rd.yu have the crrect rec

提示:对于每一行字符串数组处理有如下一种递归调用算法可供参考:查找字符串中首个小写字母'o'的位置;没有找到'o',则结束递归调用;找到'o',则按题意对字符串进行处理,形成新的字符串,然后返回,继续进行递归调用。

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序存放在PROG1.C中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

以下是我的答案:

#include

#include char xx[50][80] ;

int maxline = 0 ; /* 文章的总行数 */ int ReadDat(void) ;

void WriteDat(void) ; void StrOR(void)

{

int i,j,k,t;

char a[80];

for(i=0;i

{

k=0;

while(xx[i][k]!='\0'&&k<80)

if(xx[i][k]=='o')

{

j=0;

t=k+1;

while(xx[i][t]!='\0'&&t<80)

{

a[j]=xx[i][t];

t++;

j++;

}

t=0;

while(t

{

a[j]=xx[i][t];

t++;

j++;

}

a[j]='\0';

k=0;

}

else

k++;

t=0;

k=0;

while(a[t]!='\0'&&t

{

xx[i][k]=a[t];

t++;

k++;

}

xx[i][k]='\0';

}

} void main()

{

if(ReadDat()) {

printf("数据文件IN.DAT不能打开!\n\007") ;

return ;

}

StrOR() ;

WriteDat() ;

} int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ; if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx[i], 80, fp) != NULL) {

p = strchr(xx[i], '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

} void WriteDat(void)

{

FILE *fp ;

int i ; fp = fopen("OUT.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx[i]) ;

fprintf(fp, "%s\n", xx[i]) ;

}

fclose(fp) ;

}

编译和组建均无错误,但程序无法正确运行得出结果,我感觉是 void StrOR(void)函数什么地方出了错,导致 void StrOR(void)函数无限循环没法出结果。还有我没有调用字符串库函数,所以也不太确定我写出这个程序与题意在逻辑上是否一致。

希望各位老师帮我找出错误,最好有详细一点的说明。

谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值