_____TJ 发表于 2018-7-27 17:23:47

它获取的是下一个字符,那第一个字符怎么获取呢?

21228827 发表于 2018-9-1 15:39:26

本帖最后由 21228827 于 2018-9-1 15:50 编辑

getchar()函数执行一次会从键盘缓冲区(如果有内容就读取,没有内容就等待用户输入并以回车结束,回车相当于加上一个换行符\n)顺序读取一个字符并返回此ASCII码,举个例子:当我们调用一次getchar()时,然后输入abc并回车,此时abc和\n才一起送入了键盘缓冲区,总共就是4个字符。而此时getchar()由于只运行了一次,所以取到的是a,剩下缓冲区的字符就是bc\n 源程序里while(getchar()!='\n')意思就是一个一个字符读取,直到碰到\n也就是回车就停止(当然\n也就不会被计入累加值)。我们在执行此程序时很直观的感受是输入完一个句子,然后回车马上print,其实回车之后又根据句子长度执行了N次(我有点啰嗦了)
还有一个问题就是有朋友提出视频里getchar()过滤回车的问题,其实就是scanf()比如输入Y并回车之后,scanf只读并取走了一个字符,此时\n也就是回车符依然在键盘缓冲区里(有点像getchar()),此时调用getchar()但又不把他的值赋予其他变量,不正好起到了把那个多余的\n用getchar()“过滤掉”的作用吗,使用之后缓冲区就是空的了,下次调用scanf因为是空的,就会等待用户输入,也就自然不会自动取到遗留的\n

我一开始也是没搞懂,后来自己动手写了几次程序才摸懂了原理,表达不是很好,不对的地方请大神指正

#include <stdio.h>
int main(int argc, char *argv[])
{

   char test1;
   char test2;
   char test3;
   char test4;
   
   scanf("请输入:%c%c%c" ,&test1,&test2,&test3);
   test1=getchar();
   test2=getchar();
   test3=getchar();
   test4=getchar();
   printf("test1=%dtest2=%dtest3=%dtest4=%d\n",test1,test2,test3,test4);
   printf("test1=%ctest2=%ctest3=%ctest4=%c\n",test1,test2,test3,test4);

      return 0;


}



沙耶加 发表于 2018-9-8 13:34:57

{:10_266:}不懂

xiao10 发表于 2018-9-14 21:37:25

lianyingteng 发表于 2016-2-23 15:57
不懂???

表示有点蒙{:5_94:}

saberAMD 发表于 2018-11-8 09:20:29

我能说没看懂吗

大显666 发表于 2019-1-10 16:33:34

不是很懂

1809228982 发表于 2019-4-19 11:47:02

getchar 是不是也把换行符给输入进去了?虽然并没有进入while循环。

15637889015 发表于 2019-5-22 15:19:53

一样啊

白汤圆 发表于 2019-5-24 20:31:25

21228827 发表于 2018-9-1 15:39
getchar()函数执行一次会从键盘缓冲区(如果有内容就读取,没有内容就等待用户输入并以回车结束,回车相当于 ...

感谢,终于看懂了。。。试了一下,发现确实是只获取一个字符,在过滤回车那个视频里面的代码运行时,女神是否有空,在输入Y之后加一个空格再回车,发现getchar确实失效了。{:10_275:}

清尘yt 发表于 2019-7-30 16:23:58

加快进度!!!

小谨谨 发表于 2019-9-26 11:15:41

做课后作业遇到一个问题
#include<stdio.h>
int main()
{
        int h,ch=0;
        printf("请输入一个英文句子:");
        while(getchar() != '\n')
        {
                if(getchar() ='A'&&getchar() <='C')
                {
                        ch=ch+1;
                }
        }
        printf("你一共输入了%d个大写字母!\n",ch);
        return 0;
}
像这样不将getchar赋值为整形变量,直接比较的话程序就会报错,是运算符两边是表达式的原因吗,函数的返回值不能用getchar()直接表示吗?{:10_266:}

Monory小乐 发表于 2019-11-28 18:02:58

#include <stdio.h>

int main()
{
        int c = 0;
        printf("请输入一行英文:");
        while (getchar() < 91)
        {
                c = c + 1;
        }
        printf("你一共输入了%d个大写字母", c);
        return 0;
}

BCwhite 发表于 2019-12-14 12:07:32

还是不知道

pangjiwei365 发表于 2019-12-15 20:35:05

21228827 发表于 2018-9-1 15:39
getchar()函数执行一次会从键盘缓冲区(如果有内容就读取,没有内容就等待用户输入并以回车结束,回车相当于 ...


大甲鱼873639952 发表于 2020-1-14 10:32:44

re-born 发表于 2017-1-19 12:34
为什么这个输入的语句不需要scanf来装?

同问

ikwen 发表于 2020-2-7 21:47:39

本帖最后由 ikwen 于 2020-2-7 21:56 编辑

(getchar() != '\n')
就是这里的!=没看懂。为什么要加上这个呢:

我知道了,只有不等于回车,才会执行计数。

Bobo_Keiko 发表于 2020-2-15 22:15:52

21228827 发表于 2018-9-1 15:39
getchar()函数执行一次会从键盘缓冲区(如果有内容就读取,没有内容就等待用户输入并以回车结束,回车相当于 ...

感觉你说的是对的,给你点赞!

Kirin29 发表于 2020-2-17 19:01:01

lntouchables 发表于 2017-6-2 21:13
#include

int main()


这个while后真的有分号吗

千夜绯雪 发表于 2020-3-3 18:24:31

小谨谨 发表于 2019-9-26 11:15
做课后作业遇到一个问题
#include
int main()


你这一个循环里面getchar就运行了三次,依次读取了三次缓冲区。应该每次循环调用getchar的时候赋值给一个变量保存

ming@1993 发表于 2020-3-6 13:49:59

学习了
页: 1 [2] 3 4 5 6
查看完整版本: getchar -- 从标准输入流中获取字符