当前位置: 首页 > news >正文

C语言学习【printf函数和scanf函数】

C语言学习【printf函数和scanf函数】

printf()函数和scanf()函数可以让用户与程序交流,是输入/输出函数

printf()函数

请求printf()函数打印数据的指令要与待打印数据的类型相匹配。例如,打印整数时使用%d,打印字符时使用%c。这些符号被称为转换说明(conversion specification),它们指定了如何把数据转换成可显示的形式

如下图所属我i欸转换说明及其打印的输出结果

/* 使用转换说明 */
#include "stdio.h"
#define PI 3.1415926int main(void)
{int number = 7;float pies = 12.75;int cost = 7800;printf("The %d contestants ate %f berry pies.\n", number, pies);printf("The value of pi is %f.\n", PI);printf("Farewell! thou art too dear for my possessing, \n");printf("%c%d\n", '$', 2 * cost);
}

程序运行结果

The 7 contestants ate 12.750000 berry pies. 
The value of pi is 3.141593.
Farewell! thou art too dear for my possessing, 
$15600

printf()函数格式为

printf(格式字符串, 待打印项 1, 待打印项 2,...);

printf()输出百分号:使用两个%即可

/* printf 输出 % */
#include "stdio.h"int main(void)
{int radio = 12;printf("%d%%", radio);
}

程序运行结果

12%

printf()的转换说明修饰符

下图所示为printf()的修饰符

printf()中的标记

使用修饰符和标记的示例程序(字段宽度打印输出整数时的效果)

/* 字段宽度 */
#include "stdio.h"#define PAGES 959int main(void)
{printf("*%d*\n", PAGES);printf("*%2d*\n", PAGES);printf("*%10d*\n", PAGES);printf("*%-10d*\n", PAGES);}

程序运行结果

*959*
*959*
*       959*
*959       *

第一个转换说明%d不带任何修饰符,其对应输出结果与带整数字段宽度的转换说明的输出结果相同;
第二个转换说明是%2d,其对应的输出结果应该该是2字段度。因为待打印的整数有3位数字,所以字段宽度自动扩大以符合整数的长度;
第3个转换说明是%10d,其对应的输出结果有10个空格宽度,实际上在两个星号之间有7个空格和3位数字,并且数字位于字段的右侧;
最后一个转换说明是%-10d,其对应的输出结果同样是10个空格宽度,-标记说明打印的数字位于字段的左侧.

浮点型格式效果

/* 一些浮点型修饰符的组合 *//* 一些浮点型修饰符的组合 */#include "stdio.h"int main(void)
{const double RENT = 3852.99;     /* const 常量 */printf("*%f*\n", RENT);                  /* 字段宽度和小数点文书均为系统默认 小数点后打印6位数字 */printf("*%e*\n", RENT);                  /* %e 编译器在小数点左侧打印一个数字 小数点右侧打印6个数字 */printf("*%4.2f*\n", RENT);               /* */printf("*%3.1f*\n", RENT);printf("*%10.3f*\n", RENT);printf("*%10.3E*\n", RENT);printf("*%+4.2f*\n", RENT);              /* +代数标记 */printf("*%010.2f*\n", RENT);             /* 补齐方式 */
}

程序运行结果

*3852.990000*  
*3.852990e+003*
*3852.99*
*3853.0*
*  3852.990*
*3.853E+003*
*+3852.99*
*0003852.99*

其他组合

/* 演示一些格式标记 */#include "stdio.h"int main(void)
{printf("%x %X %#x\n", 31, 31, 31);printf("**%d**% d**% d**\n", 42, 42, -42);printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);}

程序运行结果

1f 1F 0x1f
**42** 42**-42**
**    6**  006**00006**  006**

第1行输出中,1f是十六进制数,等于十进制数31,第1行 printf()语句中,根据%x打印出1f%F打印出1F%#x打印出0x1f
第 2 行输出演示了如何在转换说明中用空格在输出的正值前面生成前导空格,负值前面不产生前导空格。这样的输出结果比较美观,因为打印出来的正值和负值在相同字段宽度下的有效数字位数相同;
第 3 行输出演示了如何在整型格式中使用精度(%5.3d)生成足够的前导 0 以满足最小位数的要求(本例是 3)。然而,使用 0 标记会使得编译器用前导 0 填充满整个字段宽度。最后,如果 0 标记和精度一起出现,0 标记会被忽略。

字符串格式的示例

/* 字符串格式 */#include "stdio.h"#define BLURB "Authentic imitation!"int main(void)
{printf("[%2s]\n", BLURB);printf("[%24s]\n", BLURB);printf("[%24.5s]\n", BLURB);printf("[%-24.5s]\n", BLURB);
}

程序运行结果

[Authentic imitation!]    
[    Authentic imitation!]
[                   Authe]
[Authe                   ]

-标记使得文本左对齐输出.

转换(conversion)说明的意义

76在计算机内部的存储格式为二进制数0100 1100%d转换说明将其转换成字符76,并显示为76%x转换说明把相同的值0100 1100转化成十六进制计数法4c%c转换说明把0100 1100转换成字符L

转换说明应该与待答应值得类型相匹配

以下是一些不匹配的整型转换示例

/* 一些不匹配的整型转换 */
#include "stdio.h"#define PAGES 336
#define WORDS 65618int main(void)
{short num = PAGES;short mnum = -PAGES;printf("num as short and unsigned short: %hd %hu\n", num, num);printf("-num as short and unsigned short: %hd %hu\n", mnum, mnum);printf("num as int and char: %d %c\n", num, num);printf("WORDS as int, short, and char: %d %hd %c\n", WORDS, WORDS, WORDS);}

程序运行结果

num as short and unsigned short: 336 336
-num as short and unsigned short: -336 65200
num as int and char: 336 P
WORDS as int, short, and char: 65618 82 R

%u表示无符号;
short int的大小是2字节;系统采用二进制补码来表示有符号整数;数字0~32767代表它们本身,而32768~65535则表示负数,其中65535表示-1,依此类推.

当 printf()使用%c 打印 336 时,它只会查看储存 336 的 2 字节中的后 1 字节
用%hd 转换说明打印时,printf()只使用最后 2 个字节


混淆整型和浮点型

/* 不匹配的浮点型转换 */#include "stdio.h"int main(void)
{float n1 = 3.0;double n2 = 3.0;long n3 = 2000000000;long n4 = 1234567890;printf("%.1e %.1e %.1e %.1e\n", n1, n2, n3, n4);printf("%ld %ld\n", n3, n4);printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);}

程序运行结果

3.0e+000 3.0e+000 9.9e-315 6.1e-315
2000000000 1234567890
0 0 2000000000 1234567890

第1 行输出显示,%e转换说明没有把整数转换成浮点数;
float 类型的值作为 printf()参数时会被转换成 double 类型。
在本系统中,float 是 4 字节,但是为了 printf()能正确地显示该值,n1 被扩成 8 字节

参数传递

栈(stack)

printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);

n1 被储存在栈中,占 8 字节(float 类型被转换成 double 类型)。同样,n2 也在栈中占 8 字节,而 n3 和 n4 在栈中分别占 4 字节;
%ld 转换说明表明 printf()应该读取 4 字节

printf()函数的返回值

printf()函数也有一个返回值,它返回打印字符的个数。如果有输出错误,printf()则返回一个负值

/* printf()的返回值 */#include "stdio.h"int main(void)
{int bph2o = 212;int rv;rv  =printf("%d F is water's boiling point.\n", bph2o);printf("The printf() function printed %d characrters.\n", rv);return 0;
}

程序运行结果

212 F is water's boiling point.
The printf() function printed 32 characrters.

在字符串中,可以使用\n 来表示换行字符,但是不能通
过按下 Enter(或 Return)键产生实际的换行符。

打印较长字符串的方法

/* 打印较长字符串 */#include "stdio.h"int main(void)
{printf("Here's one way to print a ");printf("long string.\n");printf("Here's another way to print a \long string.\n");printf("Here's the newest way to print a ""long string.\n");        /* ANSI C */return 0;
}

程序运行结果

Here's one way to print a long string.        
Here's another way to print a     long string.
Here's the newest way to print a long string. 

示例二

/* 打印较长字符串 */#include "stdio.h"int main(void)
{printf("Hello, young lovers, wherever you are.\n");printf("Hello, young"    " lovers" ", wherever you are.\n");printf("Hello, young lovers" ", wherever you are.");}

程序运行结果

Hello, young lovers, wherever you are.
Hello, young lovers, wherever you are.
Hello, young lovers, wherever you are.

相关文章:

C语言学习【printf函数和scanf函数】

C语言学习【printf函数和scanf函数】 printf()函数和scanf()函数可以让用户与程序交流,是输入/输出函数 printf()函数 请求printf()函数打印数据的指令要与待打印数据的类型相匹配。例如,打印整数时使用%d,打印字符时使用%c。这些符号被称…...

shell正则表达式

sort命令 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序 比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 sort 对行内容进行升序排序 XXX | sort 选项 sort 选项 文件 常用选项&#x…...

react组件渲染性能优化之函数组件-useCallback使用

useCallback主要就是对函数进行缓存,useCallBack这个Hooks主要是解决React.memo不能缓存事件的问题 useCallBack(fn, dependencies) :fn想要缓存的函数,dependencies有关是否更新 fn 的所有响应式值的一个列表 比如:UseCallBackOptimize组件…...

【C++】:string类的基本使用

目录 引言一,string类对象的常见构造二,string类对象的容量操作三,string类对象的访问及遍历操作四,string类对象的修改操作五,string类非成员函数六,整形与字符串的转换 引言 string 就是我们常说的"…...

多线程的代码案例

目录 单例模式 饿汉模式 懒汉模式 阻塞队列 生产者消费者模型意义: 阻塞队列使用方法 实现阻塞队列 阻塞队列实现生产者消费者模型 定时器 实现简单的定时器 工厂模式 线程池 为啥呢? 从池子里面取 比 创建线程 效率更高 线程池的创建 怎么填坑 ThreadPoolExec…...

什么是Java中的设计模式?请列举几种常见的设计模式

一、引言 在软件开发中,设计模式是解决特定设计问题的最佳实践或通用解决方案。Java作为一种广泛使用的编程语言,其设计模式在软件设计和架构中起着至关重要的作用。设计模式不仅提高了代码的可读性和可维护性,还使得代码更加灵活和可扩展。…...

绘制奇迹:Processing中的动态图形与动画

🚀 欢迎回到Processing的世界,你的艺术编程航程刚刚开始。在我们的入门篇中,你已经学会了如何用Processing绘制基本的静态图形。现在,让我们一起探索Processing强大的动态图形和动画功能,释放你的创造力,走…...

Django视图Views

Views视图 HttpRequest 和HttpResponse Django中的视图主要用来接受web请求,并做出响应。视图的本质就是一个Python中的函数视图的响应分为两大类 1)以Json数据形式返回(JsonResponse) 2)以网页的形式返回 2.1)重定向到另一个网页 (HttpRe…...

国内智能搜索工具实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

WebSocket or SSE?即时通讯的应用策略【送源码】

最近在研究H5推送,发现除了我们常用的WebSocket以外,其实还有一种协议也能实现H5推送,那就是SSE协议。 而且,当前主流的大模型平台,比如ChatGPT、通义千问、文心一言,对话时采用的就是SSE。 什么是SSE协议…...

QT实现Home框架的两种方式

在触摸屏开发QT界面一般都是一个Home页面,然后button触发进入子页面显示,下面介绍这个home框架实现的两种方式: 1.方式一:用stackedWidget实现 (1)StackedWidget控件在Qt框架中是一个用于管理多个子窗口或…...

机器学习笔记03

1.线性回归(linear regression) 是利用回归方程(函数)对一个或者多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方法。 线性模型: 1.线性关系&#xff1…...

【全面介绍下Spring】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

MYSQL-存储引擎

存储引擎就是储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被 称为表类型。 存储引擎特点 . InnoDB 介绍 InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5之后,InnoDB是默认的MySQL存储引擎。 >特…...

红蓝对抗 网络安全 网络安全红蓝对抗演练

什么是红蓝对抗 在军事领域,演习是专指军队进行大规模的实兵演习,演习中通常分为红军、蓝军,演习多以红军守、蓝军进攻为主。类似于军事领域的红蓝军对抗,网络安全中,红蓝军对抗则是一方扮演黑客(蓝军&…...

springboot 序列化和反序列化

介绍 在Java中,序列化和反序列化是一种将对象转换为字节流或将字节流转换为对象的机制。通过序列化,可以将对象存储到文件中、传输到网络上,或者在分布式系统中进行对象的传递。本文将详细介绍Java序列化和反序列化的原理、使用方法和常见应用…...

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第一周) - 自然语言处理介绍和线性分类

自然语言处理介绍和线性分类 1. 自然语言处理介绍2. 线性二分类3. 情感分析和基础特征提取 3.1. 情感分析3.2. 特征提取3.3. 文本预处理 4. 学习的基础-梯度下降算法5. 感知机6. 逻辑回归7. 情感分析8. 感知机和逻辑回归 1. 自然语言处理介绍 自然语言处理的目标是什么 能够解…...

SQL注入漏洞常用绕过方法

SQL注入漏洞 漏洞描述 Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执行,导致参数中的特殊字符打破了原有的SQL 语句逻辑,黑客可以利用该漏洞执行任意 SQL 语句,如查询数据、下载数据、写入webshell 、执行系统命令以及…...

C语言输出符

C语言输出符 以下是C语言中一些常用的格式化输出的格式控制符及其对应的数据类型: 格式控制符描述对应数据类型%d十进制有符号整数int%ld长整型long int%lld长长整型long long int%u十进制无符号整数unsigned int%lu无符号长整型unsigned long int%llu无符号长长整…...

申请一个开发者域名

申请一个开发者域名 教程 fourm.js.org 因本地没安装 hexo 环境,模板下载的 html...

接搭建仿美团、代付系统源码搭建教程

最近很多粉丝催更、分享一下地球号:xiaobao0214520(WX) 现在大家都很流行搞网恋,我们搭建一个跟美团相似的系统 然后开发一个好友代付,我们在点单的时候转发链接让网恋对象付钱 若只是单点外卖的话,能榨出的油水还是太少。 所以…...

迭代的难题:敏捷团队每次都有未完成的工作,如何破解?

各位是否遇到过类似的情况:每次迭代结束后,团队都有未完成的任务,很少有完成迭代全部的工作,相反,总是将上期未完成的任务重新挪到本期计划会中,重新规划。敏捷的核心之一是“快速迭代,及时反馈…...

ChatGPT未来可能应用于iPhone?

苹果接即将与OpenAI达成协议 ChatGPT未来应用于iPhone 前言 就在5月11日,苹果公司正与OpenAI进行深入讨论,计划在其最新的iOS操作系统中整合OpenAI的先进技术。这一举措是苹果公司在为其产品线融入更先进的人工智能功能所做努力的一部分。 目前情况双方…...

Spring之bean的细节(创建方式、作用范围、生命周期)

在Spring框架中,Bean是一个非常重要的概念,它代表了应用程序中需要被管理的对象。关于Bean的细节,我们可以从创建方式、作用范围以及生命周期三个方面进行阐述。 创建方式 Spring支持以下三种方式创建Bean: 调用构造器创建Bean…...

探索STLport:C++标准模板库的开源实现

在C++编程的世界里,STL(标准模板库)是一个不可或缺的工具。它提供了许多用于数据结构、算法和其他重要功能的模板类和函数。然而,标准模板库的实现并非只有一种,而其中一个备受推崇的选择就是STLport。 官方下载: STLport: Welcome! STLport是什么? STLport是一个开…...

计算机Java项目|Springboot高校心理教育辅导设计与实现

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…...

数据结构简单介绍、算法简单介绍、算法复杂度、时间复杂度等的介绍

文章目录 前言一、什么是数据结构二、什么是算法三、算法复杂度1. 时间复杂度① 时间复杂度的定义② 大O的渐进表示法 总结 前言 数据结构简单介绍、算法简单介绍、算法复杂度、时间复杂度等的介绍 一、什么是数据结构 数据结构是计算机存储,组织数据结构的方式&…...

Google I/O 2024:有关AI的一切已公布|TodayAI

2024年谷歌I/O大会圆满落幕,谷歌在会上发布了一系列更新,涵盖从最新的人工智能技术到Android系统的多项改进。此次大会特别关注于谷歌的Gemini人工智能模型,并详细介绍了这些模型如何被融入到Workspace、Chrome等多个应用程序中,展…...

【Shell脚本】Shell编程之数组

目录 一.数组 1.基本概念 2.定义数组的方法 2.1.方法一 2.2.方法二 2.3.方法三 2.4.方法四 2.5.查看数组长度 2.6.查看数组元素下标 3.数组分片 4.数组字符替换 4.1.临时替换 4.2.永久替换 5.数组删除 5.1.删除某个下标 5.2.删除整组 6.数组遍历和重新定义 7…...

Python 全栈系列246 任务调度对象WFlaskAPS

说明 之前已经完全跑通了任务调度,实现了S2S的流转Python 全栈系列243 S2S flask_celery。由于request请求用起来比较别扭,所以创建一个对象来进行便捷操作。 内容 1 功能 WFlaskAPS包含管理定时任务的必要功能 from datetime import datetime from…...