一个非常非常不可思议的问题
今天做了一道计算机三级的题目,如下:函数ReadDat()的功能是实现从文件IN012.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOL(),该函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT012.DAT中。
例如,原文:You He Me
I am a student.
结果:Me He You
student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意:部分源程序已给出。
请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。
试题程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <memory.h>
char xx[50][80] ;
int maxline = 0 ;/* 文章的总行数 */
int ReadDat(void) ;
void WriteDat(void) ;
void StrOL(void)
{
}
void main()
{
system("CLS");
if (ReadDat ())
{
printf("数据文件 IN012.DAT不能打开!\n\007") ;
return ;
}
StrOL() ;
WriteDat() ;
}
int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
char *p;
if((fp = fopen("IN012.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 ;
system("CLS");
fp = fopen("OUT012.DAT", "w") ;
for(i = 0 ; i < maxline ; i++)
{
printf("%s\n", xx[i]) ;
fprintf(fp, "%s\n", xx[i]) ;
}
fclose(fp) ;
}
我的函数内容是这样的:
void StrOL(void)
{
int n1;
int len;
char *p1,*p2;
char t1[80],t2[80];
for(n1=0;n1<maxline;n1++)
{
len=strlen(xx[n1]);
t1[0]=t2[0]='\0';
p1=&xx[n1][len-1];
p2=&xx[n1][len-1];
while(1)
{
while(isalpha(*p1)==0)
p1--;
p2=p1;
while(isalpha(*p1))
p1--;
memcpy(t2,p1+1,p2-p1);
t2[p2-p1]='\0';
strcat(t1,t2);
strcat(t1," ");
if(p1-&xx[n1]<0)
break;
}
strcpy(xx[n1],t1);
}
}
编译运行都正确,但是结果却是很诡异的错误:
第四行竟然多出了一个which,其他的结果却都是正确的,请各位高说指点一下!
00000000.rar
(30.17 KB)