| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1279 人关注过本帖
标题:getchar()
只看楼主 加入收藏
yu_c
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-6-23
结帖率:0
收藏
 问题点数:0 回复次数:7 
getchar()
#include<stdio.h>
main(){
    int c;
    c=getchar();
   
    while(c!=EOF){
        putchar(c);
        c=getchar();
    }

}
执行后,输入abcd后回车,输出的为什么是abcd,而不是a?按我的理解:
程序进行到c=getchar();
等我输入abcd后,c应该就存了一个字符a吧,
然后判断while条件,再putchar();输出应该就一个a,
再等待我输入,进入下一次while循环。
我的理解哪里错了,求指教!!
2016-06-23 17:55
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
简单点看:
#include<stdio.h>
main(){
    int c;
    c=getchar();
    putchar(c);
    c=getchar();
    putchar(c);
}
2016-06-23 19:40
格格不入fl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:56
专家分:192
注 册:2016-3-23
收藏
得分:0 
while((c = getchar()) != EOF){
    putchar(c);
}
一次性输入会先存放在输入缓存区等待输入指令到来进入内存,这里除了输入异常返回-1的情况下(也就是换行符输出后)拥有足够的输入输出指令


你的理解应该是输入一串字符只有第一个字符会被写入内存输出,那是因为输入和输出指令有限的情况下

[此贴子已经被作者于2016-6-23 21:29编辑过]

2016-06-23 21:16
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
getchar是必需读到一个换行符或者文件结束符EOF才进行一次输出。有一个解释是:getchar实际上是按文件进行读取的,以行为单位。因此只有遇到换行符,那么程序会认为输入结束,然后执行程序的其他部分。同时,输入是按照文件的方式存取的,这也就是为什么getchar结束输入退出时要用换行符或EOF的原因。
2016-06-23 22:02
格格不入fl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:56
专家分:192
注 册:2016-3-23
收藏
得分:0 
回复 4楼 linlulu001
《The C Programming Language》?
2016-06-23 22:21
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
收藏
得分:0 
回复 2楼 吹水佬
#include<stdio.h>
main(){
int c;
c=getchar();
putchar(c);

}我试着删了你的代码
结果程序输出的字符不换行

原代码换行。
我可以这样理解吗?
多出一次重复的c=getchar();
putchar(c);把回车也作为字符输出
回车既是字符也是结束标志。

[此贴子已经被作者于2016-6-23 22:56编辑过]


慢慢调试
2016-06-23 22:55
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 5楼 格格不入fl
嗯,是出自K&R的The C Programming Language(SecondEdition)。
我是在网上看到别人相关章节的总结。
2016-06-24 08:24
低调低调
Rank: 3Rank: 3
来 自:四川省成都市
等 级:论坛游侠
威 望:1
帖 子:66
专家分:103
注 册:2016-6-23
收藏
得分:0 
不是我只是想说这段程序能执行出来吗?各位前辈,这个#include<stdio.h>如果说是按照一段程序的读取情况来看应该是读不出来的吧
不是应该是#include <stdio.h>   include与<>之间不是应该用空格符要断开吗?不然显示读取错误吧!其次如果说按照现在我自己接触理解的来说这段代码不是很规范吧!在现在很多的开发工具中如果不在主函数main函数之前加上一个数据类型的话会提示出警示状态吧!我是一个菜鸟新手,希望各位前辈能帮忙解一下:是不是我们在写代码时都必须标准化?还是可以按照自己的写法来写?同时,有一个疑惑很久的问题,但是一直没人帮我解释下,希望借这个机会各位前辈能帮我解释下:所谓的每个成功的程序员都有一套自己的算法,是指什么呢?
2016-06-24 19:05
快速回复:getchar()
数据加载中...
 
   



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

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