鱼C论坛

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

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

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

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

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

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

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

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

  8.         if (!(fp = fopen (filename, "wt+")))
  9.         {
  10.                 printf ("Cannot open the file!\n");
  11.                
  12.         }

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

  20.         while (ch != EOF)
  21.         {
  22.                 fputc(ch, fp);
  23.                 ch = getchar();
  24.         }
  25.         fclose(fp);
  26. }
复制代码
还希望,高手解答。。。具体的原因。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-2 22:06:01 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-2 22:06 编辑

你具体想问什么呢? 看了半天没看懂你想问什么。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-2 22:12:42 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-2 22:16:45 | 显示全部楼层
什么视频? 小甲鱼的0基础学C?  如果是的话,我没看,我以前就会C的。。我是来学汇编的。。
小甲鱼最新课程 -> https://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 ();产生的后果。

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

但是我自己不确定 是不是就是这个原因。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-2 22:37:11 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-2 22:48 编辑

原本就只有一个 ch =getchar();   ?
这个程序主要是干嘛? 读取文件的文本?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-3 17:49:09 | 显示全部楼层
我也不知道啊 谁能解答一下?
小甲鱼最新课程 -> https://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才能读取完呢
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-4 18:10:46 | 显示全部楼层
rover12421 发表于 2011-10-4 18:05
getchar和scanf都是从stdin流中读取数据,scanf遇到空白符就结束,但是scanf和getchar都要需要回车才结束输 ...

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

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

本版积分规则

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

GMT+8, 2025-7-6 09:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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