C语言文件问题:1.fp=fopen("al","w"))==NULL 这里的al表示文件,那么它放在哪了?我怎么找到它
2.为什么去掉fclose(fp);fp=fopen("al","r");fgets(str,strlen(str)+1,fp);这三句后输出结果和原来不一样了。原来输入...
2.为什么去掉fclose(fp); fp=fopen("al","r"); fgets(str,strlen(str)+1,fp);这三句后输出结果和原来不一样了。原来输入sdhj!输出为SDHJ。去掉这三句后输出变成SDHJ!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
char str[100];
int i=0;
if((fp=fopen("al","w"))==NULL)
{printf("can not open file\n");
exit(0);
}
printf("input a string:\n");
gets(str);
while(str[i]!='!')
{if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-32;
fputc(str[i],fp);
i++;}
fclose(fp);
fp=fopen("al","r");
fgets(str,strlen(str)+1,fp);
printf("%s\n",str);
fclose(fp);
getch();
} 展开
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
char str[100];
int i=0;
if((fp=fopen("al","w"))==NULL)
{printf("can not open file\n");
exit(0);
}
printf("input a string:\n");
gets(str);
while(str[i]!='!')
{if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-32;
fputc(str[i],fp);
i++;}
fclose(fp);
fp=fopen("al","r");
fgets(str,strlen(str)+1,fp);
printf("%s\n",str);
fclose(fp);
getch();
} 展开
4个回答
展开全部
fp=fopen("al","w"))==NULL 这里的al表示文件,他默认情况下就在你的当前运行程序下嘛。
在下面这段:
while(str[i]!='!')
{if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-32;
fputc(str[i],fp);
i++;}
这个是将你输入的不是大写的转化为大写的,放在str中,记住是str中,在讲str存入文件中,所以转化后str=SDHJ!, 但是由于while(str[i]!='!')限制,所以你的!没有写到文件中去。也就是说你的文件中现在存的就是SDHJ。
fclose(fp); 是关闭刚才打开的流指针, 你开始是以写的方式打开的,现在你要读,所以要关闭它在重新打开一个流指针来读取文件中的内容。
就是 fp=fopen("al","r");的说法了。
fgets(str,strlen(str)+1,fp);就是利用流指针fp读取文件中内容SDHJ!到str中,原来的str是SDHJ!,现在读到里面就变成了SDHJ,所以正常输出就是SDHJ
至于去掉,那只知完成了将字符串装换输入到文件中去了,上面说了str变成了SDHJ!,这个时候直接输出str就是SDHJ!了。
不晓得说清楚了没有,没有在讨论哈,共同进步!
在下面这段:
while(str[i]!='!')
{if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-32;
fputc(str[i],fp);
i++;}
这个是将你输入的不是大写的转化为大写的,放在str中,记住是str中,在讲str存入文件中,所以转化后str=SDHJ!, 但是由于while(str[i]!='!')限制,所以你的!没有写到文件中去。也就是说你的文件中现在存的就是SDHJ。
fclose(fp); 是关闭刚才打开的流指针, 你开始是以写的方式打开的,现在你要读,所以要关闭它在重新打开一个流指针来读取文件中的内容。
就是 fp=fopen("al","r");的说法了。
fgets(str,strlen(str)+1,fp);就是利用流指针fp读取文件中内容SDHJ!到str中,原来的str是SDHJ!,现在读到里面就变成了SDHJ,所以正常输出就是SDHJ
至于去掉,那只知完成了将字符串装换输入到文件中去了,上面说了str变成了SDHJ!,这个时候直接输出str就是SDHJ!了。
不晓得说清楚了没有,没有在讨论哈,共同进步!
展开全部
问题在于fgets(str,strlen(str)+1,fp);这行代码,首先在小写字母转换大学字母这个过程中有这样一句代码fputc(str[i],fp);意思是将一个字符写入到fp所指路径文件中,小写字母转换大学字母这个过程的循环循环到'!'便会结束,既感叹号不被写入fp中,而他存储于str[]中。当你去除fgets(str,strlen(str)+1,fp);时printf();将输出str[]。fgets()函数的意思是从fp中获取strlen(str)+1(加1原因为'\0')个字符存入到str[]中,此时输出的str[]既为没有写入‘!’的str。
(fgets函数格式:char *fgets( char *string, int n, FILE *stream );)
(fgets函数格式:char *fgets( char *string, int n, FILE *stream );)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你程序的解决方案的目录中。
第二个问题很明显,在这三句没去掉前str执行了fgets,那str是从文件中读出来的数据(已经完成了小写到大写的过程)内容被覆盖了;去掉这三句,str内容除了完成小写变大写,它并没有从文件中读出数据,也就是没有被覆盖,所以也是大写,但是!号保留了
第二个问题很明显,在这三句没去掉前str执行了fgets,那str是从文件中读出来的数据(已经完成了小写到大写的过程)内容被覆盖了;去掉这三句,str内容除了完成小写变大写,它并没有从文件中读出数据,也就是没有被覆盖,所以也是大写,但是!号保留了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出的路径就和你程序可执行文件exe的路径相同。建议你改成al.txt,这样明显一些。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询