23)C语言之getchar()以及缓冲区

Posted 流浪孤儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23)C语言之getchar()以及缓冲区相关的知识,希望对你有一定的参考价值。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int text();

int main()

{

    int ch = 0;

    while ((ch = getchar()) != EOF)//EOF-end of file-文件结束标志---(-1),当getchar读取失败或者把文件读//完就会返回EOF

    {

       putchar(ch);//putchar输出一个字符

       printf("\\n");

       break;

    }

    text();

    return 0;

}

//代码2

int text()

{

    int ch1 =0;

    //ch1 = getchar();

    while ((ch1 =getchar())!= EOF)//按下ctrl+z-getchar就读取结束

    {

        //ch1 = getchar();

       if (ch1 < '0' || ch1 > '9')

       {

           printf("请输入的ch1 大于'0' 以及小于 '9':");

           continue;

       }  

       putchar(ch1 );

       break;

    }

    return 0;

}

函数原型:int getchar( void );

getchar的缓冲区

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()

{

    int ch = 0;

    ch = getchar();//从键盘上输入字符后按enter会结束getchar的进程,然后下一条的输出会显示在下一行

    printf("ch=%c\\n", ch);

    int ch1 = 0;

    while ((ch1 = getchar()) != EOF)//注意现在getchar()的缓冲区还有\\n没有读取会被这里的直接读取!

       //可以在while的前面再加一个如getchar();来取走\\n

    {

       if (ch1 < '0' || ch1 > '9')

       {

           printf("请输入的ch1 大于'0' 以及小于 '9':");

           continue;

       }

       putchar(ch1);

       break;

    }

    return 0;

}

24)C语言之for循环与do{}while();循

输入函数的缓冲区

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//输入函数如scanf,getchar共用缓冲区

int main()

{

    char password[20] = { 0 };

    scanf("%s", password);//scanf确认缓冲区没有数据请求键盘输入,这里输入123456

    /*

       解决方法->清除缓冲区getchar();

    */

    printf("请确认密码(Y/N):>");

    int ch = getchar();//scanf之前拿走了123456还有\\ngetchar拿走了因此getchar没有请求键盘输入

    if (ch == 'Y')

       printf("密码确认成功");

    else

       printf("密码确认失败");//这句语句执行了

    return 0;

}

清除缓冲区内的内容

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//清除缓冲区进阶

int main()

{

    char password[20] = { 0 };

    printf("请输入密码:>");

    scanf("%s", password);//数组名就是一个地址,这里输入123456 abcd,scanf读到空格返回

    getchar();//scanf取走了123456,这里getchar只能取走一个空格,一个getchar取一个字符

    /*

        进阶清除缓冲区

        int tmp=0;

        while((tmp=getchar())!='\\n')

        {

            ;

        }

    */

    printf("请确认密码(Y/N):>");

    int ch = getchar();//此时cha

    if (ch =='Y')

        printf("确认成功");

    else

        printf("确认失败");

    return 0;

}

//getchar返回的是整型1、,getchar读取的是字符,而字符在内存中以ASCII码形式储存,getchar返回的是ASCII

                //  2、当输入的字符错误使getchar会返回EOF,而EOF本质上是-1-1不可能是ASCII值,但是整型

//gets函数可以处理空格问题即读一行,如

gets(password);//输入123456 abcd

//123456 abcd存入到数组password中,’\\n’不会读取进去

以上是关于23)C语言之getchar()以及缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

C语言getchar()和EOF

c语言中的getch与getchar 有啥区别?

在C语言中getchar()如何用

c语言getchar的用法

C语言清空输入缓存区的几个方法

java 中有没有getchar和putchar函数呢?