zoukankan      html  css  js  c++  java
  • c语言标准输入和scanf的关系

    int a
    scanf("%d",&a);
    

     什么意思,是从键盘读取一个数字存放到a中。错,scanf和所有从键盘获取输入数据的函数都不是直接从键盘获取数据的,而是从“标准输入”获取数据的,如果标准输入没有数据,才让用户从键盘输入数据的。

    当程序提示我们输入数据的时候实际上发生了这样的过程:

    键盘数据----------缓冲区----------标准输入

    缓冲区你可以理解为程序分配的一块内存空间,标准输入你可以理解为另外一块内存空间

    你有没有发现在调用scanf输入数据的时候我们是可以编辑输入数据的,本想输入数字,结果输入了字母,可以按退格键,重新输入的,那么这些字符就被输入到了缓冲区里面了,直到按下回车之后,缓冲区的数据连同最后输入的回车一起被写到标准输入里面取了。然后scanf从标准输入读取数据。

    	char ch;
    
    	ch = getchar();
    	putchar(ch);
    
    	ch = getchar();
    	putchar(ch);
    

    看下上面这段代码,getchar意思是从标准输入获取一个字符,但是我输入的是hello 共5个字符,当我按下回车的时候,这5个字符连同回车一同被写入到了标准输入中,putchar是从标准输入获取一个字符输出,默认是第一个字符,那么自然会输出h

    然后下面我又调用 getchar(),这次还要从键盘读取输入数据吗? 不需要,是直接从标准输入读取的数据,由于标准输入现在是hello 这几个字符, getchar获取的获取的是e这个字符,然后调用putchar输出e。所以最后的结果是he。

    我写了一个程序来把标准输入的数据放到输入中。

    	char ch;
    	char test[10] = {0};
    	int x=0;
    	while(x<6)
    	{
    		ch = getchar();
    		test[x] = ch;
    		x++;
    	}
    

    运行结果:

    可以看到标准输入的最后一个字符是

    getchar scanf这些输入函数并不限制你输入字符的个数,实际上你想输入多少个字符都可以,只是当你按下回车的时候,所有缓冲区的数据被写入到标准输入里面,然后getchar从标准输入从里面读一个字符,scanf从标准输入读一个数字、一个字符、一个字符串。

    以前一直觉得getchar调用一次就从键盘输入一次数据,并不是这样的。

  • 相关阅读:
    asp.net 网页标题、关键字、描述
    星级评分jQuery插件
    以jquery为基础的星星评分
    投票系统显示结果jQuery插件
    JAVASCRIPT模拟模式对话窗口
    Repeater 嵌套代码
    window服务程序安装卸载批处理文件
    c#window程序开发入门系列自学笔记
    jquery 模式对话框改进版
    php的正则表达式完全手册
  • 原文地址:https://www.cnblogs.com/yfish/p/9851689.html
Copyright © 2011-2022 走看看