鱼C论坛

 找回密码
 立即注册
查看: 1221|回复: 12

[已解决]关于getc,getch,getchar,fgetc,gets函数的理解及流的理解问题

[复制链接]
发表于 2020-4-21 16:30:44 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 老牛来学习 于 2020-4-21 16:31 编辑

关于getc,getch,getchar,fgetc,gets函数的理解总结。

首先说一下对“流”的理解,流即文件,文件就是数据,所以流就是数据,stdin流是键盘标准输入流,
当我们使用scanf函数是就相当于,打开了键盘这个文件并对键盘输入的内容,也就是标准输入流进行操作。
C程序是不能直接对固件进行操作的,因为直接对固件操作会很慢,所以用了一种文件缓冲区符的方法。
拿stdin流比喻:在程序运行时,会在内存中开辟一个512B的文件缓冲区,将stdin流先存放在缓冲区中,用到时从
缓冲区取。
再拿fopen函数打开文件与上面一样。。
(上面是我的理解,求大佬帮我纠错!)

下面是对几个函数的理解:
getc只能用于文件,int getc(FILE *stream);(这是putc函数声明)
通过声明可以看出getc只对FILE类型的指针进行操作,getc(fp)相当于把fp文件指针目前所指向的字符输入。
如果读取失败或者到了文件结束符返回EOF;

问题:
1、我用getc(stdin)也没问题,C语言是吧stdin定义成一个文件指针了,所以可以我们可以使用吗?
2、之前有一段代码是这样写的putc(getc(fp1),fp2);它这getc(fp1)取出来的内容放在哪,然后继续操作?
因为感觉之前写的时候取到值之后,先赋给一个变量,让它有自己的空间。此时取到的值没有内存空间啊,putc如何对它操作?


getch()、getche和getchar:都是由标准stdin流输入一个字符,区别在于
getch()由键盘输入一个值不按回车,直接输入,并且输入内容不回显,所以在老版的编译器中,用于解决程序运行完立马关闭的用途,类似现在的press any key...
getche() 与getch的区别就是一个回显,一个不回显。其他一样
getchar()与上面的区别是输入后回显并需要按下空格后才输入。


想确认一下我的理解对不对,有问题麻烦指出,谢谢!!!!!!
最佳答案
2020-4-21 17:25:53
本帖最后由 sunrise085 于 2020-4-21 17:33 编辑

你的这些理解基本都是对的。
你可以在查一下FILE结构体,可能会对这个文件流有更好的理解。

1、C语言程序运行是会系统自动定义三个FILE类型的指针stdin、 stdout、 stderr ,分别指向终端输入(键盘输入)、终端输出(屏幕显示)、标准出错输出(也从终端输出)。在程序中是可以直接使用的
2、getc()的返回值就是读取到的那个字符,当然是可以直接使用的啦。这和你把getc()返回值赋值给一个变量,再使用是一样的,而且还减少了一个变量的消耗呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-21 16:33:43 | 显示全部楼层

回帖奖励 +5 鱼币

领鱼币,楼主好人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 16:35:16 | 显示全部楼层

不帮我答疑解惑吗?!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 16:35:53 | 显示全部楼层
老牛来学习 发表于 2020-4-21 16:35
不帮我答疑解惑吗?!

emmmm……我平常用 iostream抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 16:42:25 | 显示全部楼层

回帖奖励 +5 鱼币

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-21 16:59:54 From FishC Mobile | 显示全部楼层

回帖奖励 +5 鱼币

占楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-21 17:01:55 | 显示全部楼层

兄嘚,你也不拯救我了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 17:12:33 | 显示全部楼层

回帖奖励 +5 鱼币

老牛来学习 发表于 2020-4-21 17:01
兄嘚,你也不拯救我了...

拯救你还得大神来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 17:25:53 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +5 鱼币

本帖最后由 sunrise085 于 2020-4-21 17:33 编辑

你的这些理解基本都是对的。
你可以在查一下FILE结构体,可能会对这个文件流有更好的理解。

1、C语言程序运行是会系统自动定义三个FILE类型的指针stdin、 stdout、 stderr ,分别指向终端输入(键盘输入)、终端输出(屏幕显示)、标准出错输出(也从终端输出)。在程序中是可以直接使用的
2、getc()的返回值就是读取到的那个字符,当然是可以直接使用的啦。这和你把getc()返回值赋值给一个变量,再使用是一样的,而且还减少了一个变量的消耗呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-21 17:29:52 | 显示全部楼层
sunrise085 发表于 2020-4-21 17:25
先领个鱼币。一会儿在编辑回答

还是最爱你!!!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 17:33:47 | 显示全部楼层
老牛来学习 发表于 2020-4-21 17:29
还是最爱你!!!!!!!!!!!!!!

千万别酱紫!!
我是直男
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 18:28:31 From FishC Mobile | 显示全部楼层
老牛来学习 发表于 2020-4-21 17:01
兄嘚,你也不拯救我了...

我也不太懂,看大佬回答吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-11 12:46:24 | 显示全部楼层
占楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-12 04:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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