| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 640 人关注过本帖
标题:键盘输入送文件的问题
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:8 
键盘输入送文件的问题
从键盘输入一些字符,逐个把他们送到磁盘上去,直到输入一个“#”为止。
下面是教材上的程序:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    FILE * fp;
    char ch, filename[10];
    scanf("%s", filename);
    if ((fp = fopen(filename, "w")) == NULL)
    {
        printf("Can not open file.\n");
        exit(0);
    }
    ch = getchar();
    ch = getchar();
    while (ch != '#')
    {
        fputc(ch, fp);
        putchar(ch);
        ch = getchar();
    }
    putchar(10);
    fclose(fp);
    return 0;
}
搞不懂3个ch = getchar();的具体用途,谁能解释下? 要是能说下流程更好。
搜索更多相关主题的帖子: 键盘 include file 
2011-12-18 19:54
月夜幻影
Rank: 2
来 自:辽宁大连
等 级:论坛游民
帖 子:16
专家分:71
注 册:2011-10-26
收藏
得分:7 
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    FILE * fp;
    char ch, filename[10];
    scanf("%s", filename);
    if ((fp = fopen(filename, "w")) == NULL)
    {
        printf("Can not open file.\n");
        exit(0);
    }
    ch = getchar();//接受回车符;如果没有这一行,那么输入名字后ch接受换行,那么光标下一一行,对应温江中也从第二行开始
    ch = getchar();//接受字符
    while (ch != '#')
    {
        fputc(ch, fp);
        putchar(ch);
        ch = getchar();//循环中接受字符
    }
    putchar(10);
    fclose(fp);
    return 0;
}
2011-12-20 08:31
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:7 
教材上的例子本身就容易引起歧义,有的人不一定回车啊
2011-12-20 11:21
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 月夜幻影
ch = getchar();//接受回车符;如果没有这一行,那么输入名字后ch接受换行,那么光标下一一行,对应温江中也从第二行开始
ch = getchar();//接受字符
第一个接受了最后的回车符,第二个为什么不接受回车符前面的字符?

梅尚程荀
马谭杨奚







                                                       
2011-12-20 16:39
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 3楼 hengde_li
有不回车也能输入的情况?

梅尚程荀
马谭杨奚







                                                       
2011-12-20 16:40
离开天空的云
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:110
专家分:198
注 册:2011-8-12
收藏
得分:7 
执行到第一个getchar的前面的时候 系统缓存上的字符为(\n ****#)\n为回车字符,SCANF输入后都会把回车也带入系统缓存,*为你输入的字符。
第一个getchar执行后把\n装入字符变量CH,系统缓存上就为(****#)了
第二个getchar执行后把第一个字符装入CH,缓存就为(***#)了 ,输出CH到文件中,输出到屏幕
然后循环 一个个字符挨个存放到CH中 输出到文件..到屏幕...直到循环结束~~
2011-12-20 18:54
离开天空的云
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:110
专家分:198
注 册:2011-8-12
收藏
得分:0 
不知道对不对....
2011-12-20 18:55
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 6楼 离开天空的云
同是getchar在同一个缓存区读数据,为什么一个读最后一个读最前?
我想是不是 scanf("*****#");后 *****#与回车符分离,*******#被存到某个存储器,而回车还留在缓存中。
getchar();来找东西给别人先去缓存搜索,没有就去存储器找,有的话就直接吸收,因此上几楼都说吸收回车符。
第二个getchar();来后在缓存没找到东西,就从******#开始读入;所以它吃到第一个字符。 否则解释不通啊。
如果是这样,那么为什么又会是这样呢?

梅尚程荀
马谭杨奚







                                                       
2011-12-20 22:27
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:0 
回复 5楼 有容就大
有的人输了文件名 然后空格,直接输入内容,有的可能输了文件名后回车,然后再输入内容,使用习惯不一样啊。
2011-12-21 09:31
快速回复:键盘输入送文件的问题
数据加载中...
 
   



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

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