一 基本用法

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. Ajax跨域原理及JQuery中的实现

    浅析Ajax跨域原理及JQuery中的实现分析   AJAX 的出现使得网页可以通过在后台与服务器进行少量数据交换,实现网页的局部刷新.但是出于安全的考虑,ajax不允许跨域通信.如果尝试从不同的域请 ...

  2. C# 以嵌入到窗体的方式打开外部exe

    using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using S ...

  3. VS2015集成新潮工具4

    VS2015集成新潮工具(四)   本课程来源与微软connect视频教程,Modern Web Tooling in Visual Studio 2015 本课程主要讲下当下流行的前端工具 bowe ...

  4. Grub启动配置文件

    和许多其他linux发行版一样,Fedora使用Grub作为32位和64位X86系统的启动加载器(bootloader).grub的配置文件主要是/boot/grub/grub.conf,而/boot ...

  5. Thrift学习

    Thrift学习 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java,P ...

  6. Java泛型和集合之泛型VS模板

    Java的泛型很像C++中的模板,说到Java 泛型和C++中的模板的关系时,有两个重要的方面需要被考虑到:语法和语义.语法看起来是相似的,可是语义却明显是不同的. 在语法上讲,选择尖括号  是因为他 ...

  7. 如何通过js获取iframe框架中的内容

    在父窗口中获取iframe中的元素 IE下:格式:window.frames["iframe的name值"].document.getElementById("ifram ...

  8. -协同IResult

    Caliburn.Micro学习笔记(五)----协同IResult   今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows cust ...

  9. How To Configure Logging And Log Rotation In Apache On An Ubuntu VPS

    Introduction The Apache web server can be configured to give the server administrator important info ...

  10. twitter 授权过程

    转自:http://blog.csdn.net/yangjian8915/article/details/11816669 官方的流程图如下: 下面开始一步步讲解,如何获取最终的access_toke ...