C语言实现程序不跳出,【C语言】为什么这个程序不能跳出循环,新人求解

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

这是一道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、付费专栏及课程。

余额充值