一颗大棗 发表于 2020-3-13 10:16:47

C语新手的一个小问题 感谢

#include<stdio.h>

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



}

六小鸭 发表于 2020-3-13 10:19:18

getchar是读入函数的一种。它从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。
(百度的)

空白zz 发表于 2020-3-13 10:20:27

获取(输入)一个字符
putchar(getchar()) 即输出你输入的那个字符

一颗大棗 发表于 2020-3-13 10:27:27

空白zz 发表于 2020-3-13 10:20
获取(输入)一个字符
putchar(getchar()) 即输出你输入的那个字符

并没有再次输出 我输入的内容

jackz007 发表于 2020-3-13 10:30:11

本帖最后由 jackz007 于 2020-3-13 10:33 编辑

      c = getchar()         // 从键盘缓冲区读取一个字符,保存到变量 c 中;
      putchar(c)            // 把变量 c 的内容输出到屏幕的当前光标位置处;
      putchar(getchar())    // 从键盘缓冲区读取一个字符并将其直接输出到屏幕的当前光标位置;

空白zz 发表于 2020-3-13 10:48:01

一颗大棗 发表于 2020-3-13 10:27
并没有再次输出 我输入的内容


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

一颗大棗 发表于 2020-3-13 10:53:24

jackz007 发表于 2020-3-13 10:30


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

Press any key to continue

空白zz 发表于 2020-3-13 10:54:11

一颗大棗 发表于 2020-3-13 10:27
并没有再次输出 我输入的内容

#include<stdio.h>
void main()
{
putchar(getchar());
}

这样的话就是输出你输入的字符了{:10_277:}

一颗大棗 发表于 2020-3-13 10:54:54

空白zz 发表于 2020-3-13 10:48

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

是 就是老师出的例题 有点不理解

一颗大棗 发表于 2020-3-13 11:07:28

空白zz 发表于 2020-3-13 10:54
这样的话就是输出你输入的字符了

对对 我想知道一下 那个为什么没有输出

jackz007 发表于 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()) ;
}
      这个代码如果只有一次键盘输入,那肯定 "交不了差"。

空白zz 发表于 2020-3-13 11:20:23

一颗大棗 发表于 2020-3-13 11:07
对对 我想知道一下 那个为什么没有输出

我知道了
在输入一个字符后会按一下回车也就是\n 第二个getchar获取的就是\n了

对牛弹琴的三高C 发表于 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()都是只能输入和输入一个字符,不能输出字符串,所以我认为你最后一行代码是不正确的,

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

如果这个回复可以帮到你,希望能把这个回复给个最佳答案,谢谢了

就是要努力呀 发表于 2020-3-13 12:23:54

输入a回车
第一个getchar获取a
第二个getchar获取回车
所以putchar语句打印了一个换行符

如果输入ab回车
第二个getchar获取b
putchar就会打印一个b

风吹来了 发表于 2020-3-13 14:35:11

最后一句话的意思是:

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

getchar()的意思是:

读取用户输入的字符,如果单独就写一个getchar();在那儿,那么读取之后会直接丢弃内容。

风吹来了 发表于 2020-3-13 14:50:42

一颗大棗 发表于 2020-3-13 10:53
void main()
{
char c;


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