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();
}
展开
 我来答
填空还是选择
2012-02-15 · TA获得超过945个赞
知道小有建树答主
回答量:520
采纳率:100%
帮助的人:408万
展开全部
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!了。
不晓得说清楚了没有,没有在讨论哈,共同进步!
百度网友2da9d3b
2012-02-15 · 超过23用户采纳过TA的回答
知道答主
回答量:67
采纳率:0%
帮助的人:64.9万
展开全部
问题在于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 );)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
marilynbkun
2012-02-15 · TA获得超过756个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:242万
展开全部
你程序的解决方案的目录中。
第二个问题很明显,在这三句没去掉前str执行了fgets,那str是从文件中读出来的数据(已经完成了小写到大写的过程)内容被覆盖了;去掉这三句,str内容除了完成小写变大写,它并没有从文件中读出数据,也就是没有被覆盖,所以也是大写,但是!号保留了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leiyangbdwk
2012-02-15 · TA获得超过3295个赞
知道大有可为答主
回答量:4975
采纳率:12%
帮助的人:4386万
展开全部
输出的路径就和你程序可执行文件exe的路径相同。建议你改成al.txt,这样明显一些。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式