printf 和scanf

2023-11-11

1、printf 简介

1.1 printf 的格式

printf 函数的原型为:

# include <stdio.h>

int printf(const char *format, ...);

printf 的格式有四种:

1) printf("字符串\n");

# include <stdio.h>
int main(void)
{
printf("Hello World!\n"); // \n表示换行
return 0;
}

2) printf("输出控制符1 输出控制符2…", 输出参数1, 输出参数2, …);

# include <stdio.h>
int main(void)
{
int i = 10;
int j = 3;
printf("%d %d\n", i, j);
return 0;
}

输出控制符 1 对应的是输出参数 1,输出控制符 2 对应的是输出参数 2……

1.2 输出控制符

常用的输出控制符如下:

【示例】调用 printf() 函数输出具有以下数据:

printf("%d %d %d %d\n", 20, 345, 700, 22);
printf("%d %d %d %d\n", 56720, 9999, 20098, 2);
printf("%d %d %d %d\n", 233, 205, 1, 6666);
printf("%d %d %d %d\n", 34, 0, 23, 23006783);

还可以自动调整数据的输出格式、控制输出小数的位数等。

1.3 控制符%x、%X、%#x、%#X 的区别

输出控制符 %x(或 %X 或 %#x 或 %#X),可用于调试的时候将内存中的二进制代码全部输出,然后用十六进制显示出来。下面看看它们四个有什么区别:

#include <stdio.h>
int main(void)
{
int i = 47;
printf("%x\n", i);
printf("%X\n", i);
printf("%#x\n", i);
printf("%#X\n", i);
return 0;
}

在 VC++ 6.0 中的输出结果:
2f
2F
0x2f
0X2F

     从输出结果可以看出:如果是小写的x,输出的字母就是小写的;如果是大写的X,输出的字母就是大写的;如果加一个# 就以标准的十六进制形式输出。

      最好是加一个#,否则如果输出的十六进制数正好没有字母的话会误认为是一个十进制数呢!总之,不加#容易造成误解。但是如果输出 0x2f 或 0x2F,那么人家一看就知道是十六进制。而且%#x%#X中,笔者觉得大写的比较好,因为大写是绝对标准的十六进制写法。

1.4  如何输出 %d、\ 和双引号

    printf 中的输出控制符%d,转义字符对应的反斜杠\ ,还有双引号。怎样将这三个符号通过 printf 输出到屏幕上呢?

    要输出%d只需在前面再加上一个%,要输出\只需在前面再加上一个\,要输出双引号也只需在前面加上一个\即可。程序如下:

# include <stdio.h>
int main(void)
{
printf("%%d\n");
printf("\\\n");
printf("\"\"\n");
return 0;
}

在 VC++ 6.0 中的输出结果是:

%d

\

""

1.5 printf总结

    输出控制符中,%d、%f、%s、%c 是最常用的,它们分别是输出整数、实数、字符串和字符的控制符。有关 %x、%X、%#x、%#X 四种用法的区别,只需要了解一下即可。

2、scanf 简介

2.1 scanf 的两种用法

它有两种用法,或者说有两种格式。

1) scanf("输入控制符", 输入参数);

功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。

# include <stdio.h>

int main(void)

{

int i;

scanf("%d", &i);   //&i 表示变量 i 的地址,&是取地址符

printf("i = %d\n", i);

return 0;

}

1) scanf("输入控制符1  输入控制符2", 输入参数1,输入参数2);

一次给多个变量赋值:

# include <stdio.h>

int main(void)

{

int i, j;

scanf("%d%d", &i, &j);

printf("i = %d, j = %d\n", i, j);

return 0;

}

    我们从键盘输入的全部都是字符。比如从键盘输入 123,它表示的并不是数字 123,而是字符 '1'、字符 '2' 和字符 '3'。%d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制数字.

       虽然 scanf 中没有加任何“非输入控制符”,但是从键盘输入数据时,给多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋的值。而且空格、回车或 Tab 键的数量不限,只要有就行。一般都使用一个空格。

其它参考:

https://www.cnblogs.com/fsknsl/p/15363872.html

C语言scanf函数用法完全攻略

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

printf 和scanf 的相关文章

  • 批处理命令,函数传参和跳转

    文章目录 函数 参数传递 返回值 局部变量保护 goto 批处理系列 初步 set指令 设置变量 函数 函数封装是编程语言必不可少的环节 而函数在创建时 至少需要有一个函数标识 同时需要一块区域 来组成函数体 Dos中的函数用标签来标识 以

随机推荐

  • Vmware虚拟机系统时间同步网络时间并登录用户自动校正时间

    VM虚拟机大家都用 我在用完后 经常使用 挂起客户机 但是这样一来 系统恢复启动很快 但是少了正常的系统自检 包括和网络同步时间 今天在虚拟机上测试 find root Text mtime 3 name Service log exec
  • can转光纤、can光端机、can光纤转换器如何选型

    1 首先 根据组网方式的不同 can光端机分为点对点式CANFiber系列 总线级联式LCAN FOB系列和环网冗余式LCAN FOBR系列 2 can光纤转换器选型
  • C语言-数字爆炸游戏

    问题 你好 欢迎来到数字爆炸 系统随机生成一个数字 猜大了 提示猜大了 猜小了 提示猜小了 思路 先写游戏大概思路 首先 会有菜单吧 所以先写一个菜单函数 显示菜单的内容 然后选择菜单中的选项 不同的选项 对应不同的功能 因此这个用swit
  • IAP升级应用程序流程和原理(前提是:用户要先编写的boot loader程序)

    STM32升级方法 一 IAP升级 骑着蜗牛写代码的博客 CSDN博客 stm32 iap升级 IAP升级是使用客户自己编写的boot loader而不是系统自带的 所以flash需要为两部分 一部分用来存放IAP boot loader
  • 通信协议——MII/GMII

    MAC层接口协议 概述 MII GMII 概述 随着宽带数据业务的飞速普及 数据产品的端口速率及端口密度也大大提升 于是以太网的MAC与PHY层之间的媒介无关接口 MII 也在不断简化 推陈出新 多种多样 基于此 本文简要介绍了以太网的PH
  • STM32芯片--FSMC外设扩展外部SRAM

    这里写自定义目录标题 一 为什么要扩展外部SRAM 二 什么是SRAM 简介 存储器型号 容量 原理框图 引脚配置 通讯方式 读写特性 读取数据时序图 读取数据的时序要求 写入数据时序图 写入数据的时序要求 三 什么是FSMC外设 简介 F
  • mac系统更新后无法打开axure8/9

    吐槽一下难用的mac 系统更新后 axure打都打不开了 双击一下 好的时候 报个错 Exception has been thrown by the target of an invocation 不好的时候 错也不报 直接打不开 甚至关
  • 密码学——1.密码学概论

    1 基本术语 1 1 密码使用学 ceyptography vs 密码编码学 crypyology 密码使用学是一种为了达到隐藏消息含义而使用秘文写的一门科学 密码分析学是一门研究在不知道通常解密所需要的秘密信息的情况下对加密的信息进行解
  • nacos 集群部署

    nacos 集群部署 之前 nacos 都是单机部署 使用倒还稳定 没有因为 nacos 出过问题 最近因为各种原因连续迁了几次服务器 中间涉及 nacos 服务器 比较麻烦 所以决定把 nacos 改为集群部署 nacos官方也推荐生产环
  • 【面试题】Javascript的这些运算符,你都都掌握哪些?

    前端面试题库 面试必备 推荐 地址 前端面试题库 国庆头像 国庆爱国 程序员头像 总有一款适合你 theme devui blue highlight a11y light 无论是JavaScript还是其他语言 运算符是基础 表达式和语句
  • python安装easygui

    1 下载地址 https sourceforge net projects easygui files 0 96 2 双击easygui文件夹 打开后复制或剪切easygui py文件放到你原来安装python的文件夹里 python Li
  • DNS解析分类

    DNS 域名系统 解析是将域名转换为对应的IP地址的过程 根据不同的功能和角色 DNS解析可以分为以下几种分类 递归解析 Recursive Resolution 递归解析是指DNS客户端向本地DNS服务器 如ISP提供的DNS服务器 发送
  • 图像配准之特征点匹配的思考

    最近赶时髦 看了一些智能优化算法如蚁群算法 还有机器学习的一些东西 就想着怎么把这些先进的东西用在图像配准中 头脑风暴了一下 觉得在已经检测到两幅图像的特征点的基础上 就如何对它们进行匹配似乎有优化的空间 匹配的过程其实是找对应点的过程 对
  • 操作系统考试重点

    1 什么是进程 什么是线程 进程与线程有何区别 进程 进程是具有独立功能的程序在数据集合上的一次执行过程 线程 线程是进程内的一个执行实体或执行单元 区别 1 进程的地址空间是独立的 而同一进程内的线程共享同一地址空间 一个进程内的线程在另
  • STL源码剖析——deque的实现原理和使用方法详解

    Deque 简介 deque是 double ended queue 的缩写 和vector一样都是STL的容器 deque 是双端数组 而 vector 是单端的 deque 在接口上和 vector 非常相似 在许多操作的地方可以直接替
  • 【IOS】移动端设置input只能输入数字,在IOS系统没有效果

    在移动端设置input的type为number类型的时候需要区分一下安卓还是IOS 如果只设置type为number类型的时候 在安卓生效 但是IOS还是会有可以输入汉字的问题出现 所以就需要一个新的属性 pattern 0 9 来控制输入
  • BigDecimal的使用小结

    文章目录 1 为什么用 BigDecimal 2 构造函数的选择 3 加减乘除的使用 4 保留小数 5 RoundingMode类 6 其他方法 1 为什么用 BigDecimal 因为 double float的计算很不靠谱 莫名其妙的会
  • 《微积分基础》学习(一)

    本系列文章主要记录我在学习coursera上的 Calculus One 在线课程的笔记 该课程是俄亥俄州立大学的经典课程 教授的发音比较标准 授课方式轻松愉悦 是不可错过的 微积分 入门课程 本文直接从第二周切入 第一周是课程介绍和学习方
  • intelli idea中配置Tomcat找不到的解决办法

    这两天新入职一家公司 公司用的是intelli idea 以前用习惯了eclipse 感觉到有点不太习惯 当然 intelli idea也有自己的强大之处 在开始配置Tomact之前 按照网上的说法 发现点击 号之后没有Tomcat 于是乎
  • printf 和scanf

    1 printf 简介 1 1 printf 的格式 printf 函数的原型为 include