scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

1、scanf函数的一般形式:scanf函数是一个标准的库函数,它的函数原型在头文件“stdio.h”中,与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。

scanf函数的一般形式为:scanf(“格式控制字符串”,地址列表);

其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址列表中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成。

例:&a,&b;//分别表示变量a和变量b的地址。

变量地址是C编译系统分配的,用户不必关系具体地址是多少。

变量的地址和变量值的关系如下;a=567  //a为变量名,567是变量的值,&a是变量a的地址。

赋值语句左边是变量名,不能写地址,而scanf的本质也是给变量赋值,但要求写变量的地址,如&a。这两者在形式上是不同的。&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。

例:

#include <stdio.h>

void main()
{
int a,b,c;
printf("input a,b,c\n");
scanf("%d%d%d",&a,&b,&c); //输入时应用回车或空格将两数隔开
printf("a=%d,b=%d,c=%d",a,b,c);
}

2、格式字符串:格式字符串的一般形式为:%[*][输入数据宽度][长度]类型。

(1)类型:与printf相同。

(2)“*”:表示读入的数据将被舍弃。带有*的格式指令不对应可变参数列表中的任何数据。

如:scanf(“%d%*d%d",&a,&b);  //当输入为:1,2,3时,把1赋予a,2被跳过,3赋予b。

(3)宽度:用十进制整数指定输入的宽度(即字符数)

例:scanf("%5d",&a);

输入:12345678    //只把12345赋予变量a,其余部分被截去。

scanf("%4d%4d",&a,&b);

输入:12354678  //把1234赋予a,而把5678赋予b。

(4)长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。

注意:(1)scanf函数中没有精度控制,如:scanf("%5.2f",&a);是非法的。不能企图用此语句输入小数为2的实数。

(2)scanf函数要求给出变量地址,若给出变量名则会出错。如scanf("%d",a);是非法的,应改为scanf(”%d“,&a);才是合法的。

(3)在输入多个数值数据时,若格式控制串中无非格式字符做输入数据之间的间隔则可用空格,TAB或回车做间隔。C编程在碰到空格,TAB,回车或非法数据(如对”%d“输入”12A“时,A即为非法数据)时,即认为该数据结束。

(4)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符(空格也为字符)。

例如:scanf("%c%c%c",&a,&b,&c);

输入为:d e f

则把“d”赋予a“ ”赋予b,“e“赋予c。只有输入为def时,才能把”d“赋予a,”e”赋予b,“f”赋予c。

如果在格式控制中加入空格作为间隔。

例:

#include <stdio.h>

void main()
{
char a,b;
printf("input character a,b\n");
scanf("%c%c",&a,&b);
printf("%c%c\n",a,b);
}

由于scanf函数中“%c%c”无空格,输入M N结果只有M输出

(5)若格式控制符中有非格式字符则输入时也要输入非格式字符。

例:scanf("%d,%d,%d",&a,&b,&c);其中非格式字符”,“作为间隔符,故输入时应为5,6,7

(6)如输入的数据与输出的类型不一致时,虽然编译能通过,但结果不正确。

例:

#include <stdio.h>
void main()
{
 int a;
 printf("input a number\n");
 scanf("%d",&a);
 printf("%ld",a);
}
#include <stdio.h>

void main()
{
long a;
printf("input a long number\n");
scanf("%ld",&a);
printf("%ld",a);
}

比较输入:1234567890

由于输入的数据类型为整型,因此输出结果与输入数据不符。(有的编译器结果相同,这里仅对不同的做出解释)

题目:输入三个小写字母,输出其ASCII码和对应的大写字母。

#include <stdio.h>

void main()
{
char a,b,c;
printf("input charatera,b,c\n");
scanf("%c %c %c",&a,&b,&c);
printf("%d%d%d\n%c,%c,%c\n",a,b,c,a-,b-,c-);
}

题目:输入各种类型的字节长度。

#include <stdio.h>

void main()
{
int a;
long b;
float f;
double d;
char c;
printf("\nint:%d\nlong:%d\nfloat:%d\nchar:%d\n",sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c));
}

scanf函数(初学者)的更多相关文章

  1. 4-printf & scanf函数

    一.printf函数 这是(printf和scanf)在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h> 1.用法 1> printf(字符串) ...

  2. C语言scanf函数详细解释

    原文链接 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准 ...

  3. 黑马程序员-scanf函数

    变量的内存:字节和地址:1.变量的存储单位是字节,每个字节都有存储地址.2.不同的数据大小占用的内存带下不同拥有的字节数也是不同的.变量的存储:1.存储是按照,先存储的放在地址教高的位置,优先存储的地 ...

  4. C语言Scanf函数

    C语言的scanf函数 一.变量的内存分析 (一)字节与地址 ①. 内存以字节为单位 每个字节都有自己的内存地址,根据地址就可以找到该字节.整个内存相当于一整个酒店,而酒店以房间为单位,在这里每个房间 ...

  5. scanf函数

    一. 变量的内存分析 1. 字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. 1> 内存以“字节为单位” 0x表示的是十六进制,不用过于纠结,能看懂这些 ...

  6. scanf函数与输入缓冲区

    本文链接:http://www.cnblogs.com/xxNote/p/4008668.html 今天看书的时候遇到scanf函数与缓冲区的问题,产生了一些猜想即:应该有一个指针来记录缓冲区中读取到 ...

  7. Scanf函数输入字符串

    Scanf函数输入字符串 #define _CRT_SECURE_NO_WARNINGS //#pragma warning(disable:4996) #include <stdio.h> ...

  8. [转载]VS2012编译C语言scanf函数error的解决方法

    在VS 2012 中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误: error C4996: 'scanf': This function or variable may ...

  9. 【C语言】05-printf和scanf函数

    一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据 1.用法 1> pr ...

随机推荐

  1. Spring Framework简介

    作者关于此主题早期文章 Spring框架快速入门 起源 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层 ...

  2. top命令查看进程下线程信息以及jstack的使用

    转自:https://www.cnblogs.com/shengulong/p/8513652.html top -Hp pid可以查看某个进程的线程信息 -H 显示线程信息,-p指定pid jsta ...

  3. 深度学习之PyTorch实战(3)——实战手写数字识别

    上一节,我们已经学会了基于PyTorch深度学习框架高效,快捷的搭建一个神经网络,并对模型进行训练和对参数进行优化的方法,接下来让我们牛刀小试,基于PyTorch框架使用神经网络来解决一个关于手写数字 ...

  4. 深度学习论文翻译解析(一):YOLOv3: An Incremental Improvement

    论文标题: YOLOv3: An Incremental Improvement 论文作者: Joseph Redmon Ali Farhadi YOLO官网:YOLO: Real-Time Obje ...

  5. 详细的最新版fastdfs单机版搭建

    前言 目前项目是tomcat单机部署的,图片.视频也是上传到tomcat目录下,关键是此项目的主要内容还就是针对图片.视频的,这让我非常担忧:文件服务器的应用是必然的,而且时间还不会太久.之前一直有听 ...

  6. 分布式版本控制系统GIT的使用

    一.什么是Git Git是一个分布式版本控制系统,Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异(如CVS.Subver ...

  7. .Net Core 简单定时任务框架封装

    有段日子没有更新,写点东西冒个泡 .这篇文章过来讲个小东西,也是大家在日常开发中也经常需要面临的问题:后台定时任务处理.估计大家看到这句就已经联想到 QuartZ 等类似第三方类库了,不好意思,后边的 ...

  8. C++注入记事本

    #include <iostream>; using namespace std; #include <windows.h>; #include <tlhelp32.h& ...

  9. VB.NET语法小结

    本人精通C#编程,VB没有开发经验,项目维护需要,特意整理了下VB语法,进行恶补.编程思想都是互通的,都是微软生的,语言大同小异. Imports System 一.(1)定义一个变量,并且初始化. ...

  10. 《Photoshop CS4手绘艺术技法》

    书名 <Photoshop CS4手绘艺术技法> 图片 时间 2017-4月  学习 想了想当初的学习动机,自己P图片可是P的是实在是丑就会做几张动图.看完了才发现这行博大精深而且自己的审 ...