caven 发表于 2009-4-30 15:30

磕头感谢,解答谭老师的C经典,进来看看文件操作

#include&nbsp;&ltstdio.h&gt<br /><br />main&nbsp;()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*&nbsp;fp;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;ch,&nbsp;filename&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf&nbsp;(&quot;%s&quot;,&nbsp;filename);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((fp&nbsp;=&nbsp;fopen(filename,&nbsp;&quot;w&quot;))&nbsp;==&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;Can&nbsp;not&nbsp;open&nbsp;file\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;=&nbsp;getchar&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(ch&nbsp;!=&nbsp;'#')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputc&nbsp;(ch,&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putchar&nbsp;(ch);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;fclose&nbsp;(fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />功能说明:从键盘输入一些字符,逐一把它输出到磁盘中,知道输入&quot;#&quot;为止.<br /><br />我现在只要输入一个文件名,例如test.txt,按回车,再输入其它的,都无法正常显示,TURBO&nbsp;C就死了.<br /><br />查看磁盘,有一个test.txt,&nbsp;但里面是空的,&nbsp;可是文件大小又不象空文件,大概42K.<br /><br />请哪位大虾过来指教一下.&nbsp;磕头感谢.

奇门遁甲 发表于 2009-4-30 16:24

re

while((ch=getchar())!='#')

caven 发表于 2009-4-30 16:29

LZ,我在上一句已经赋值了.语法没有问题.

奇门遁甲 发表于 2009-4-30 16:47

语法当然没问题,有问题编译会报错,是运行有问题啦

&nbsp;你试试<br />//ch&nbsp;=&nbsp;getchar&nbsp;();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注释掉&nbsp;<br />&nbsp;while((ch=getchar())!='#')<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />}

flanker 发表于 2009-4-30 17:49

这个逻辑有问题

while&nbsp;(ch&nbsp;!=&nbsp;'#')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputc&nbsp;(ch,&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putchar&nbsp;(ch);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />无限循环地向fp所指文件写入ch,这样当然会死机。<br />

caven 发表于 2009-4-30 20:06

谢谢楼上两位的热心帮助.

但楼上这位说会死循环,应该不会吧.<br />应该只要输如字符'#',这个循环体就会结束.<br />不知道说得对不

flanker 发表于 2009-4-30 20:46

当然是死循环。

while&nbsp;(ch&nbsp;!=&nbsp;'#')<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;fputc&nbsp;(ch,&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;putchar&nbsp;(ch);<br />}<br />这个地方是putchar,所以ch永远不会变。这不是死循环是什么呢?<br />

caven 发表于 2009-5-2 08:38

如何修改

那7楼的,这个根据功能应该如何修改<br />让它不进入死循环.帮忙一下!

鱼头08614 发表于 2009-5-2 14:08

试试这个,可以跳出循环,但不知道对程序结果会不会影响

试试这个,可以跳出循环,但不知道对程序结果会不会有影响:<br />if&nbsp;(ch&nbsp;!=&nbsp;'#')<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;fputc&nbsp;(ch,&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;putchar&nbsp;(ch);<br />&nbsp;&nbsp;&nbsp;&nbsp;contiune;<br />}<br />

sinanjj 发表于 2009-5-2 14:11

汗。。。。。

LZ你自己先想想改改好不好。。。。。<br /><br /><br /><br />这问题。。。。。。

sinanjj 发表于 2009-5-2 14:12

还没骨气。。

“磕头感谢”<br /><br /><br />-------------又见跪求。最bs没骨气的了。。。。

电脑圆圆 发表于 2009-5-3 20:40

。。。

<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;=&nbsp;getchar&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputc&nbsp;(ch,&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putchar&nbsp;(ch);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}while&nbsp;(ch&nbsp;!=&nbsp;'#')

flanker 发表于 2009-5-4 18:03

这样不行!

最后一个#号也会被写到文件里面。<br />应该是在收到#号的时候break出来才符合逻辑。

icecut 发表于 2009-5-8 14:39

哈哈哈哈

俺不会说话
页: [1]
查看完整版本: 磕头感谢,解答谭老师的C经典,进来看看文件操作