C语言之scarf函数
一 基本用法
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函数的更多相关文章
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- C语言字符串匹配函数
C语言字符串匹配函数,保存有需要时可以用: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- [转]SQLITE3 C语言接口 API 函数简介
SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...
- (转)PHP的语言结构和函数的区别
相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($user) ) { //do some thi ...
- Java之--Java语言基础组成—函数
Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...
- C语言中的函数
C语言中的函数 目录 概述——对函数的理解 C语言中函数的定义和声明 函数允许的参数类型 函数允许的返回类型 递归 概述 由于有些代码段在编写程序的时候经常会用到,此时我们为了减少代码文件的长度和增加 ...
- C语言文件操作函数
C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...
- 想精度高,可以考虑用c语言中的函数gettimeofday
大家好: 在 win32 + bcb 时, 有个 GetTickCount() 返回第统启动到现在的 tick, 单位 ms.请问在 Linux + qt5 怎样实现呢? 如果用 QDateTime ...
随机推荐
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- leetcode第37题--Count and Say
题目:(据说是facebook的面试题哦) The count-and-say sequence is the sequence of integers beginning as follows:1, ...
- Web前端框架与类库
Web前端框架与类库的思考 说起前端框架,我也是醉了.现在去面试或者和同行聊天,动不动就这个框架碉堡了,那个框架好犀利. 当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉.网站技术是为业务而存在的,除此 ...
- 使用UDL文件来测试SQL Server数据库连接
原文 来自http://www.2cto.com/database/201308/234427.html 使用UDL测试SQL Server连接问题 做数据库经常会遇到SQL Server连接的问 ...
- 如何使用SetTimer MFC 不够具体
转会:http://blog.csdn.net/ellor/article/details/1714741 Timer事件,即定时器事件,是在游戏编程中.常常使用的一个事件.借助它能够产生定时运行动作 ...
- .NET : 使用代码性能分析工具
NET : CLR Profiler的使用 经常讲课的时候会提到值类型和引用类型,也会提到如何查看它们的大小.多次被朋友问到,如何真的想要知道到底每个方法分配了多少内存之类的问题,其实这可以通过CLR ...
- Java 8新特性前瞻
快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年jav ...
- 5 MySQL索引
目录: 1. 索引概述 1.1 为什么引入索引 1.2 什么是索引 1.3 索引的好处 1.4 索引的不足 1.5 索引分类 2. 索引设计原则 3. 索引建立和删除 3.1 索引创建 3.2 索引删 ...
- AspNet MVC3中过滤器 + 实例
AspNet MVC3中过滤器 + 实例 过滤器在请求管线注入额外的逻辑,提供简单优雅的方法实现横切点关注(AOP),例如日志,授权,缓存等应用.通过AOP可以减少在实际的业务逻辑中参杂过多非直接业务 ...
- jquery上传控件uploadify使用备忘
我简单修改了js和样式,效果如下 使用起来也是超简单,将文件下载并解压到你网站目录下,然后 .在使用位置插入代码 ============================= <iframe wi ...