C语言文件问题:1.fp=fopen("al","w"))==NULL 这里的al表示文件,那么它...
发布网友
发布时间:2024-10-08 05:46
我来回答
共4个回答
热心网友
时间:2024-11-15 15:32
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!了。
不晓得说清楚了没有,没有在讨论哈,共同进步!
热心网友
时间:2024-11-15 15:28
问题在于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 );)
热心网友
时间:2024-11-15 15:33
输出的路径就和你程序可执行文件exe的路径相同。建议你改成al.txt,这样明显一些。
热心网友
时间:2024-11-15 15:28
你程序的解决方案的目录中。
第二个问题很明显,在这三句没去掉前str执行了fgets,那str是从文件中读出来的数据(已经完成了小写到大写的过程)内容被覆盖了;去掉这三句,str内容除了完成小写变大写,它并没有从文件中读出数据,也就是没有被覆盖,所以也是大写,但是!号保留了