getchar()与文件结束符EOF

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getchar()与文件结束符EOF相关的知识,希望对你有一定的参考价值。

参考技术A /*

**test13.cpp : Defines the entry point for the console application.

**系统winXP SP3 32位.

**getchar()与文件结束符EOF

*/

#include "stdafx.h"

#include "stdio.h"

#include "stdlib.h"

int main(int argc, char* argv[])



    char cNum1;

    char cNum2 = '\0';

    printf("please input a char:\n");

    cNum1 = getchar();   

/*****************************

    若输入±,则得出结果为cNum = ?

    这是因为c是char类型,其取值范围是-128~+127,

    ±在其取值范围之外,故输出的值不可测。

    若输入CTRL+Z(即文件结束符EOF),则输出error!EOF!

******************************/

    if(cNum1 == EOF)

        printf("error!EOF!\n");

    else

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

    

    if(cNum2 == EOF)

        printf("error!EOF!\n");

    else

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

        printf("cNum2 = %d\n",cNum2);   //0,\n的asc码是0

    

    return 0;



Tips:getchar()在c语言中的是int型,正常情况下getchar()返回你输入的第一个字符,但是当碰到文件结束符亦或是读取错误时候,其无法返回有效的字符,而返回标志EOF,将EOF定义为-1,所以也就将getchar()的返回值类型设置为了int型。注意:这里若是输入的字符超出其表示范围的话,输出的值也是不可测的。如上面的例子。

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’不会读取进去

以上是关于getchar()与文件结束符EOF的主要内容,如果未能解决你的问题,请参考以下文章

c语言getchar的用法

遇到不懂的,摘抄了好的文章

C语言getchar()和EOF

getchar()

EOF:getchar()函数返回的一个特殊值

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