鱼C论坛

 找回密码
 立即注册
查看: 4338|回复: 10

[技术交流] 061第十一章 文件操作02(新版) 代码中的两个ch = getchar();的思考。

[复制链接]
发表于 2011-10-2 21:28:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Y.H 于 2011-10-2 22:13 编辑

代码如下:
#include <stdio.h>
void main()
{
        FILE *fp;
        char ch, filename[256];

        printf ("input FileName : ");
        scanf ("%s", filename);                         //我怀疑在这里最后的一个换行被下面的第一个ch = getchar();接受到了。

        if (!(fp = fopen (filename, "wt+")))
        {
                printf ("Cannot open the file!\n");
                
        }

        printf ("input sentences : ");
        ch = getchar();                                 //为了检验ch接受的是不是一个换行,经过调试发现到了此时ch = 10,
        if (ch == '\n')                                 //而我查了下ASCII码表,发现ASCII码10对应的是控制字符LF LF=换行=\n。
        {                                               //虽然确定ch是接收到了一个换行,但不确定是不是接受到上面的那个换行
                exit(0);                                //而且当我把这一段测试代码和第一个ch = getchar();注释掉时,发现所写的文件,第一换了一行.
        }
        ch = getchar();

        while (ch != EOF)
        {
                fputc(ch, fp);
                ch = getchar();
        }
        fclose(fp);
}
还希望,高手解答。。。具体的原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-2 22:06:01 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-2 22:06 编辑

你具体想问什么呢? 看了半天没看懂你想问什么。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-2 22:12:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-2 22:16:45 | 显示全部楼层
什么视频? 小甲鱼的0基础学C?  如果是的话,我没看,我以前就会C的。。我是来学汇编的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-2 22:25:01 | 显示全部楼层
yipwing 发表于 2011-10-2 22:16
什么视频? 小甲鱼的0基础学C?  如果是的话,我没看,我以前就会C的。。我是来学汇编的。。

这段代码中,就是那个注释最多的地方,你发现有两个ch = getchar();  

中间的那个判断是我后来加的源程序是没有的


就是问为什么要用两个ch = getchar();

从注释中我也写了为什么要用两个ch = getchar();的原因,还有只用一个ch = getchar ();产生的后果。

还有这个后果是怎样产生的。

但是我自己不确定 是不是就是这个原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-2 22:37:11 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-2 22:48 编辑

原本就只有一个 ch =getchar();   ?
这个程序主要是干嘛? 读取文件的文本?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-3 17:49:09 | 显示全部楼层
我也不知道啊 谁能解答一下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-4 18:05:58 | 显示全部楼层
getchar和scanf都是从stdin流中读取数据,scanf遇到空白符就结束,但是scanf和getchar都要需要回车才结束输入,但是结束符不会读取,还在stdin流中,所以后面直接用getchar读取,首先会读取上一次scanf留下的空白符号。所以在getchar和scanf混合使用的时候需要注意。
建议在scanf之后用fflush(stdin)刷新stdin,后面用getchar就不会出问题。不要用一个getchar,如果你用多个空格再回车,你知道要用多少个getchar才能读取完呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-4 18:10:46 | 显示全部楼层
rover12421 发表于 2011-10-4 18:05
getchar和scanf都是从stdin流中读取数据,scanf遇到空白符就结束,但是scanf和getchar都要需要回车才结束输 ...

呵呵呵,谢谢。。。有解决方法就好了,

那有没有不用刷新stdin也能解决的方法呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 09:55:33 | 显示全部楼层
激动人心,无法言表!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-16 00:14:29 | 显示全部楼层
你写的啥功能我看不懂,但是你要用exit(0);要#include <stdlib.h>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-19 01:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表