C++中getchar、scanf等输入

本文首发于个人博客:http://blog.92yu.win,欢迎大家关注。

基本定义

getchar

int getchar(void)
{
    static char buf[BUFSIZ];
    static char* bb=buf;
    static int n=0;
    if(n==0)
    {
        n=read(0,buf,BUFSIZ);
        bb=buf;
    }
    return(--n>=0)?(unsigned char)*bb++:EOF;
}

该函数声明在

getch

getch功能基本上与getchar相同。区别在于getch不等待回车,只要用户按一个键,就会立刻返回。
getch返回值也是ASCII码值,出错返回-1。
注意:
getch函数是非缓冲输入函数,即不能用getch来接收缓冲区已存在的字符。

通常getch用于程序调试中,在关键位置显示有关结果以查看,然后用getch函数暂停程序运行,按下任一按键继续程序运行。


getche

与上面两个函数功能类似,都是接收一个字符,返回值同样是ASCII码值。

不同的是,此函数在输入后立刻从控制台读取字符,不以回车为结束标识。

scanf

scanf这个函数比较特别
scanf输入字符串,整型,实型等数据的判断方式都一样,回车,空格,tab键都会被认为是输入的结束。当然字符的话,一个字符就是结束了。
回车、空格等都有对应的ASCII码,所以用scanf输入字符时要小心这些东西被当成字符输进去,而输入字符串和整型、实型等数据时这些都被当成分隔符而不会被输入到字符数组或变量里。

如果scanf输入的不是字符,那么分隔符为回车,空格、tab键时,两个数据之间的分隔符只是起区别两个数据的作用,把分隔好的两个数据分别赋值到各自定义好的变量或数组中去,两个数据之间的分隔符被从缓冲区读出但是不起任何作用,当然最后一个’\n ‘会被留在缓冲区内,除非用getchar();或scanf(“%c”,&c);把它读出来。
回车是一定要有的,不管getchar还是scanf只要是通过缓冲区输入数据的函数都是等待回车键 ‘\n ‘出现才进入缓冲区的。

程序举例

#include <iostream>
#include <stdio.h>

using namespace std;

int main(int argc)
{
    int a, c;
    printf("please input a char: \n");
    a = getchar();
    if (EOF != a) {
        printf("aaa == %c \n", a);
    }

    while ((c = getchar()) != '\n' ) {
        if (EOF == a) {
            break;
        }
        printf("ccc == %d \n", c);
    }

    printf("press any key to continue: \n");
    getchar();  
    //此处 getchar()在这里作用等同于 system("pause");
}

结果为
gethar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值