鱼C论坛

 找回密码
 立即注册
查看: 1571|回复: 15

[已解决]C语新手的一个小问题 感谢

[复制链接]
发表于 2020-3-13 10:16:47 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>

void main()
{
  char c;
  c=getchar();         
  putchar(c);         
  putchar('\n');     
  putchar(getchar());// 想知道这个这句话什么含义 这个getchar什么意思?



}
最佳答案
2020-3-13 14:50:42
一颗大棗 发表于 2020-3-13 10:53
void main()
{
  char c;

首先要明白一点,你输入的东西,会被存储在一个叫做缓冲区的地带,然后每次读取内容时,系统会先检查缓冲区里面有没有东西,如果有,并且符合条件的话,就会直接从缓冲区中读取数据;
如果没有的话,那么这时才会要求用户输入数据;
如果有,但是不符合条件的话,那么就会一直卡在那儿,直到使用正确的方式读取出里面的东西。(考虑到你才学,所以这一点暂时不管也没事儿)
而且,还有一点,那就是当用户输入一个数据的时候,记住,除了输入的数据以外,还会有一个最后按下的回车键,这个回车键会在电脑中被存储为换行符,也是一个字符,它会被存储在缓冲区里面。这也就是为什么你输入一个A之后不用再次输入,程序仍然能自己运行。
还有就是关于存储在缓冲区里面的数据,以及最后输入的回车键所生成的换行符,在你使用scanf()读取数据时可能感觉不到换行符的存在,因为scanf()默认忽略需要读取目标前面的所有空白,包括换行符和制表符之类的东西。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-13 10:19:18 | 显示全部楼层
getchar是读入函数的一种。它从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。
(百度的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 10:20:27 | 显示全部楼层
获取(输入)一个字符
putchar(getchar()) 即输出你输入的那个字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 10:27:27 | 显示全部楼层
空白zz 发表于 2020-3-13 10:20
获取(输入)一个字符
putchar(getchar()) 即输出你输入的那个字符

并没有再次输出 我输入的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 10:30:11 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-13 10:33 编辑
        c = getchar()         // 从键盘缓冲区读取一个字符,保存到变量 c 中;
        putchar(c)            // 把变量 c 的内容输出到屏幕的当前光标位置处;
        putchar(getchar())    // 从键盘缓冲区读取一个字符并将其直接输出到屏幕的当前光标位置;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 10:48:01 | 显示全部楼层
一颗大棗 发表于 2020-3-13 10:27
并没有再次输出 我输入的内容


刚刚试了一下
感觉这句没啥意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 10:53:24 | 显示全部楼层

void main()
{
  char c;
  c=getchar();         
  putchar(c);         
  putchar('\n');     
  putchar(getchar())
您好 比如我输入A 这个为什么运行出来这个,并没有要提示再次输入
A
A

Press any key to continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 10:54:11 | 显示全部楼层
一颗大棗 发表于 2020-3-13 10:27
并没有再次输出 我输入的内容
#include<stdio.h>
void main()
{
  putchar(getchar());
} 

这样的话就是输出你输入的字符了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 10:54:54 | 显示全部楼层
空白zz 发表于 2020-3-13 10:48

刚刚试了一下
感觉这句没啥意义

是 就是老师出的例题 有点不理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 11:07:28 | 显示全部楼层
空白zz 发表于 2020-3-13 10:54
这样的话就是输出你输入的字符了

对对 我想知道一下 那个为什么没有输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 11:12:42 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-13 11:20 编辑
一颗大棗 发表于 2020-3-13 10:53
void main()
{
  char c;


       因为你按下 A 还得按下回车键,函数 getchar() 的调用才能结束,而这时,键盘缓冲区里不止有字符 'A' 还有一个字符,是的,它就是换行符 '\n',这个字符对应于你键入的回车符。代码中一共有两个 getchar(),第一个取到的毫无疑问就是字符 'A',第二个取到的当然是字符 '\n' 了。所以,执行第二个 getchar() 的时候,并没有要求你键盘输入。
      
       可以通过下面的代码来证明这种说法:
#include <stdio.h>

main(void)
{
        char c             ;
        c = getchar()      ;
        putchar(c)         ;
        c = getchar()      ;
        putchar(c)         ;
        putchar(getchar()) ;
}

        这个代码如果只有一次键盘输入,那肯定 "交不了差"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 11:20:23 | 显示全部楼层
一颗大棗 发表于 2020-3-13 11:07
对对 我想知道一下 那个为什么没有输出

我知道了
在输入一个字符后会按一下回车也就是\n 第二个getchar获取的就是\n了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 11:40:41 | 显示全部楼层
我也是才学几天的小白,刚好看到你这个问题,我自己试验的半天,得出以下结论

getchar()是输入键盘上的一个字符到括号内的存储地址,比如   ‘char c’   你定义c为一个字符的存储地址,c是这个存储地址的名称,那么“getchar(c)”就表示你在键盘上输入的一个字符保存在以  c  为名称的存储器里面,如果“getchar()”这个括号里面什么都没有填,那么应该系统会默认给他分配一个地址的(这个我还没有具体去研究,我是这么认为的)。
putchar()是输出(或者显示出)保存在“putchar()”括号内存储器地址保存的字符,比如“putchar(c)”就是输出(或者显示出)保存在以c为名称的存储器里面的字符。也可以直接输出字符,直接输入字符需要加单引号,比如  “putchar(‘Y’)”就是直接输出字符  Y   。
getchar()和putchar()都是只能输入和输入一个字符,不能输出字符串,所以我认为你最后一行代码是不正确的,

我也是小白一个,这都是我自己的见解,如果有不对的地方还请指正,感谢!

如果这个回复可以帮到你,希望能把这个回复给个最佳答案,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 12:23:54 | 显示全部楼层
输入a回车
第一个getchar获取a
第二个getchar获取回车
所以putchar语句打印了一个换行符

如果输入ab回车
第二个getchar获取b
putchar就会打印一个b
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 14:35:11 | 显示全部楼层
最后一句话的意思是:

读取用户输入的字符并且打印出来。

getchar()的意思是:

读取用户输入的字符,如果单独就写一个getchar();在那儿,那么读取之后会直接丢弃内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 14:50:42 | 显示全部楼层    本楼为最佳答案   
一颗大棗 发表于 2020-3-13 10:53
void main()
{
  char c;

首先要明白一点,你输入的东西,会被存储在一个叫做缓冲区的地带,然后每次读取内容时,系统会先检查缓冲区里面有没有东西,如果有,并且符合条件的话,就会直接从缓冲区中读取数据;
如果没有的话,那么这时才会要求用户输入数据;
如果有,但是不符合条件的话,那么就会一直卡在那儿,直到使用正确的方式读取出里面的东西。(考虑到你才学,所以这一点暂时不管也没事儿)
而且,还有一点,那就是当用户输入一个数据的时候,记住,除了输入的数据以外,还会有一个最后按下的回车键,这个回车键会在电脑中被存储为换行符,也是一个字符,它会被存储在缓冲区里面。这也就是为什么你输入一个A之后不用再次输入,程序仍然能自己运行。
还有就是关于存储在缓冲区里面的数据,以及最后输入的回车键所生成的换行符,在你使用scanf()读取数据时可能感觉不到换行符的存在,因为scanf()默认忽略需要读取目标前面的所有空白,包括换行符和制表符之类的东西。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 20:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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