一 基本用法

scanf函数:接收用户的输入

语法:

scanf("格式化控制符",地址列表);

例:

int num;

scanf("%d",&num);//代表接收用户输入一个整数,把这个整数赋值到num所在的空间

如果要接收字符呢???

char ch;

scanf("%c",&ch);

tips:千万要记住:scanf的格式化控制符后面不要加\n

scanf函数有一个特点:它叫阻塞式函数

意思就是:当程序执行到它这一句的时候,会暂时停止,不会继续往下执行,直到用户输入完才会继续往下执行

二 详解

尽量在让用户输入给一个提示

printf补充:可以同时挖N个坑(同时在内存中开辟N个空间),但是你给的值的顺序必须一致,而且类型也必须一致

1、也可以同时输入两个整数,分别输入两次就行了,或者用空格隔开

2、scanf里面的格式化控制符也可以用其他符号隔开,但是不管你用什么格式,输入的时候必须以你的那个格式来输入,否则会输入异常

3、最好不要先接收输入任何一个类型的数据后,立即再接收输入一个字符

4、最好不要把字符型和其他类型放在一起输入(tips:为什么呢?请看下面的运行原理)

三 运行原理

首先,scanf在内存中有个位置,叫缓冲区,里面是保存所有用户输入的数据的

用scanf接收用户输入的时候:

1.先去缓冲区里面找有没有合适的数据,如果有,则直接把缓冲区的这个数据赋值给你的变量(意味着不要用户输入了)

2.如果没有,才会让用户进行输入,输入以后,数据先放在缓冲区

3.然后再从这个缓冲区里面找数据

tips:如果要接收的是数字,但是输入的是字符,那么会忽略(不给那个变量赋值)

以后如果要接收一个字符的话,一定要记得在前面加空格(tips:会过滤掉所有的空格和回车)

tips:代码例子如下

#include <stdio.h>

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

/*

int num1;

scanf("%d",&num1);

char ch;

scanf("%c",&ch);

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

*/

/*

int num;

char ch;

scanf("%d%c",&num,&ch);//会让用户输入,依次输入200空格a回车

printf("num=%d   ch=%c\n",num,ch);//num=200 a=空格

char ch2;

scanf("%c",&ch2);//不会让用户输入

printf("ch2=%c\n",ch2);//ch2里保存的是a

char ch3;

scanf("%c",&ch3);//不会让用户输入

printf("ch3=%c\n",ch3);//ch3里面保存的是回车

*/

/*

char ch;

scanf("%c",&ch);//输入完以后a,a,2,0

int num;

scanf("%d",&num);//这里还会让我继续输入,因为上面缓冲区留下来的\n和int类型不符合,所以会让我输入

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

*/

//    int num = 200;

//    scanf("%d",&num);//如果输入的是字母,直接忽略

//

//    printf("num=%d\n",num);

/*

char ch;

scanf("%c",&ch); //aa20

int num = 200;

scanf("%d",&num);

char ch2;

scanf("%c",&ch2);

printf("ch=%c   num=%d  ch2=%c\n",ch,num,ch2);//a  200  a

*/

/*

int num;

scanf("%d",&num);

char ch;

scanf("%c",&ch);//如果接收字符的话,很容易吸收掉上一次输入的空格或者回车,那么要解决这个问题怎么办???

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

*/

//解决办法一:

/*

int num;

scanf("%d",&num);

char temp;

scanf("%c",&temp);//帮我们吸收掉回车了

char ch;

scanf("%c",&ch);//如果接收字符的话,很容易吸收掉上一次输入的空格或者回车,那么要解决这个问题怎么办???

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

*/

//解决办法二

//    int num;

//    scanf("%d",&num);

//

//    char ch;

//    scanf(" %c",&ch);//会自动过滤掉所有的空格和回车

//

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

//解决办法三(推荐方法)

//    int num;

//    scanf("%d",&num);

//

//    rewind(stdin); //自动帮助我们清空缓冲区的数据

//    char ch;

//    scanf("%c",&ch);

//

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

return 0;

}

C语言之scarf函数的更多相关文章

  1. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针

    Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针   1.1. java方法引用(Method References) 与c#委托与脚本语言js ...

  2. C语言字符串匹配函数

    C语言字符串匹配函数,保存有需要时可以用: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...

  3. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  4. [转]SQLITE3 C语言接口 API 函数简介

    SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...

  5. (转)PHP的语言结构和函数的区别

    相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($user) ) { //do some thi ...

  6. Java之--Java语言基础组成—函数

    Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...

  7. C语言中的函数

    C语言中的函数 目录 概述——对函数的理解 C语言中函数的定义和声明 函数允许的参数类型 函数允许的返回类型 递归 概述 由于有些代码段在编写程序的时候经常会用到,此时我们为了减少代码文件的长度和增加 ...

  8. C语言文件操作函数

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...

  9. 想精度高,可以考虑用c语言中的函数gettimeofday

    大家好: 在 win32 + bcb 时, 有个 GetTickCount() 返回第统启动到现在的 tick, 单位 ms.请问在 Linux + qt5 怎样实现呢? 如果用 QDateTime ...

随机推荐

  1. JS解析DataSet.GetXML()方法产生的xml

    在实际的项目制作过程中,经常要采用ajax方式来进行,当然,这就免不了要进行数据交换.如果采用拼接字符串的方式来进行,不仅拼接的时候麻烦,而且在拆解的时候更加麻烦,一旦遇到特殊字符,那么就是灾难了.因 ...

  2. VS2013中Python学习环境搭建

    VS2013中Python学习笔记[环境搭建] 前言 Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python的设计具有很强的可读性,相比其他语言经常使用英文关键字, ...

  3. Ubuntu 14.04 字体设置

    ubuntu 14.04消息公布后,我迫不及待地安装和使用.不知道怎么搞的,整个系统彻底改变了字体.有罪,看. 后来.听说文泉驿米黑效果不错.就试了一下,确实还行. 以下是设置方法: 1.安装文泉驿米 ...

  4. .NET MVC4 实训记录之五(访问自定义资源文件)

    .Net平台下工作好几年了,资源文件么,大多数使用的是.resx文件.它是个好东西,很容易上手,工作效率高,性能稳定.使用.resx文件,会在编译期动态生成已文件名命名的静态类,因此它的访问速度当然是 ...

  5. 基于Jquery 简单实用的弹出提示框

    基于Jquery 简单实用的弹出提示框 引言: 原生的 alert 样子看起来很粗暴,网上也有一大堆相关的插件,但是基本上都是大而全,仅仅几句话可以实现的东西,可能要引入好几十k的文件,所以话了点时间 ...

  6. 动动手,写个knockout的分页模板

    最近一个项目用ASP.NET + knockout开发,很多列表页面都带分页,于是就有了写一个公共的分页模板的想法. 先把template写好: <script type="text/ ...

  7. JavaScript实例技巧精选(10)—计算器实例2

    >>点击这里下载完整html源码<< 这是截图: 利用Javascript和html实现的另一个计算器实例,核心代码如下: <script language=" ...

  8. Git工作流:中心工作流(翻译)

    使用Git作为版本控制器,有众多可能的工作流(Workflow),这使得我们这些新鸟不知道在实际工作中不知道该选择哪种工作流.这里我们对最常见的Git工作流做一个对比,为企业团队提供一个参考. 正如你 ...

  9. Ajax提交底层原型XMLHttpRequest

    相信接触过ajax的都觉得其post,get提交很方便,那么他是怎么实现的呢?基于此我们就不得不谈到js中的XMLHttpRequest对象. 其中w3c中是这样解释的: XMLHttpRequest ...

  10. Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定

    使用Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定   原文地址:http://www.dotnetjalps.com/2013/05/Simple-da ...