| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1183 人关注过本帖
标题:这到底是怎么一回事,请高手帮忙?
取消只看楼主 加入收藏
xinhang
Rank: 2
等 级:论坛游民
帖 子:40
专家分:57
注 册:2006-7-25
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
这到底是怎么一回事,请高手帮忙?
#include<stdio.h>
main()
{
  FILE *fp,*fp2;char ch;
  fp = fopen("1.txt","r");
  fp2 = fopen("12.txt","w");
  for(;(ch = getc(fp)!=EOF);)
    putc(ch, fp2);
   
}
执行完后,我打开12。txt 发现里面全是 一个个方框的字符 why?这不是我想要的。
搜索更多相关主题的帖子: why 
2010-05-02 16:53
xinhang
Rank: 2
等 级:论坛游民
帖 子:40
专家分:57
注 册:2006-7-25
收藏
得分:0 
很奇怪不是吗! 我又重新试了一次,又可以了,12。txt 是我想要的正常的字符。不知作何解释,望高手解答。

\" ﹏╭⌒╮¤ ﹋ ^^
2010-05-02 20:42
xinhang
Rank: 2
等 级:论坛游民
帖 子:40
专家分:57
注 册:2006-7-25
收藏
得分:0 
以下是引用hzz063在2010-5-2 18:06:40的发言:

#include<stdio.h>
main()
{
  FILE *fp,*fp2;char ch;
  fp = fopen("1.txt","r");
  fp2 = fopen("12.txt","w");
  for(;(ch = getc(fp)!=EOF);)//应是(ch = getchar())!='0';注意优先级别。还有ch是字符类型,用返回EOF判断是个陷阱,
                             //他容不下EOF。你可以把ch定义为int.
    putc(ch, fp2); //这里是fputc函数
   
}我改了一下:
#include<stdio.h>
main()
{
  FILE *fp,*fp2;
  char ch;
 
  fp2 = fopen("12.txt","w");
  for(;(ch = getchar())!='0';)
    fputc(ch, fp2);
   
}

getchar()函数是从终端获取字符,这位同学违背了作者的本意,不是很喜欢
EOF 值是 -1 对吧,但是char类型也可以看成是1字节int类型(你可以将EOF赋给ch,再以%d格式输出,试试,然后以%c格式的话就不行),我在gcc编译器上可以通过。
另外,fputc与putc函数结构上基本相似,可以互换,不是吗? 至于那个括号是打少了吧。

\" ﹏╭⌒╮¤ ﹋ ^^
2010-05-02 21:01
xinhang
Rank: 2
等 级:论坛游民
帖 子:40
专家分:57
注 册:2006-7-25
收藏
得分:0 
以下是引用hzz063在2010-5-2 22:42:05的发言:

抱歉,是可以换。
但你认为:
#include<stdio.h>
int main(void)
{
  char c;

  while((c = getchar()) != EOF)
  putchar(c);
 
 return 0;  
}存在问题吗?它看起来没问题,运行“正常”。

你那没问题,但是你好像没看懂我的程序,还是怎么的?我是想一个文本把里的内容复制到另一个文本去,不是要从终端获取数据,然后放到12。txt中。

\" ﹏╭⌒╮¤ ﹋ ^^
2010-05-02 23:47
xinhang
Rank: 2
等 级:论坛游民
帖 子:40
专家分:57
注 册:2006-7-25
收藏
得分:0 
以下是引用hzz063在2010-5-3 08:38:47的发言:

嗯…,其实给你看的那个程序代码那样写是不对的,不是能运行就是没问题。如果你明白上面的例子那有问题,你就明白你写的那代码隐藏一个问题。

我愚拙,望高手赐教。

\" ﹏╭⌒╮¤ ﹋ ^^
2010-05-03 18:10
xinhang
Rank: 2
等 级:论坛游民
帖 子:40
专家分:57
注 册:2006-7-25
收藏
得分:0 
以下是引用StarWing83在2010-5-3 18:17:59的发言:

对于自己不懂的东西,可以猜测,但希望能说明白这是你推测的。否则容易误导初学者。


对于printf的函数,会有argument promotion,所有小于int的类型都会被转变成int,所以看起来char和int一样。

char ch;
这种形式本来就是错的,因为getc的原型是这样的:
int getc(FILE *);

必须是个int类型,才能接收到EOF。这样做:

int ch;
ch = getc(fp) ...

thanks very much.

\" ﹏╭⌒╮¤ ﹋ ^^
2010-05-04 12:36
快速回复:这到底是怎么一回事,请高手帮忙?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013433 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved