文件内容
题目解读:
- 按照题意,文件内容应该有单词的长度,但是给的案例没有,为了锻炼自己最好还是按照题意写一下。
输入案例:
3
I love china!
This is a book!
How are you?
2
This is a dog.
I like dogs.
0
I love china!
ac代码:
真正的ac代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp,*read;
char s[305];
int i,n,l,num;
if((fp=fopen("text01.txt","w"))==NULL)//将键盘内容输入文件text01.txt
{
printf("can't open file\n");
exit(1);
}
if((read=fopen("text01.txt","r"))==NULL)//将文件text01.txt读出并且输出到屏幕
{
printf("can't open file\n");
exit(1);
}
while(scanf("%d ",&n)!=EOF)//此处输入注意吃掉数字后面的空格,否则n的值不会更新
{
if(n==0){break;}
for(i=0;i<n;i++)
{
gets(s);
l=strlen(s);
fprintf(fp,"%d ",l);
fputs(s,fp);
fputc('\n',fp);
memset(s,0,sizeof(s));
}
}
rewind(fp);//当前一次对文件进行操作以后,文件指针指向文件末尾,此时需要将文件指针指向文件头重新读取,否则后面read指针指向文件末尾,操作不会进行。
while(fscanf(read,"%d ",&num)!=EOF)
{
fgets(s,num,read);
for(i=0;s[i]!='\0';i++)//因为fgets会保留结尾的换行符,所以用s[i]!='\0'来终止输出
{
putchar(s[i]);//此处如果用puts直接输出,puts会直接把'\0'变为'\n',输出会多一个\n;
}
}
fclose(fp);
fclose(read);
return 0;
}
虚假的ac代码
(逻辑不对但是莫名奇妙输出对了,可以不看,我放在这里看哪位大神能够回答我的疑惑)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp,*read;
char s[305];
int i,n,l,num;
if((fp=fopen("text01.txt","w"))==NULL)
{
printf("can't open file\n");
exit(1);
}
if((read=fopen("text01.txt","r"))==NULL)
{
printf("can't open file\n");
exit(1);
}
while(scanf("%d ",&n)!=EOF)
{
if(n==0){break;}
for(i=0;i<n;i++)
{
gets(s);
l=strlen(s);
fprintf(fp,"%d ",l);
fputs(s,fp);
fputc('\n',fp);
memset(s,0,sizeof(s));
}
}
rewind(fp);
while(fscanf(read,"%d ",&num+1)!=EOF)//num+1这个接收就不对啊
{
fgets(s,num,read);
for(i=0;i<=n;i++)//这个n为什么莫名奇妙变成了字符串长度
{
putchar(s[i]);
}
}
fclose(fp);
fclose(read);
return 0;
}
文件内容:
输出结果:
文件好难!
~~~~~ TAT ~~~~~