标准输入与输出与格式控制符

2024-06-04 00:44

本文主要是介绍标准输入与输出与格式控制符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

标准输入与输出

标准输入与输出与格式控制符的故事

文章目录

  • 标准输入与输出
    • 一、 printf标准输出(格式化输出)
      • 1.1、`printf()`函数
      • 1.2、格式控制符
        • 1.2.1 -对齐方式举例
        • 1.2.2 m.n:指定域宽和精度
      • 1.3、常见的格式控制符
        • 示例
    • 二、标准输入
      • 2.1 函数说明
      • 2.2 示例代码
      • 2.3 详细解释

一、 printf标准输出(格式化输出)

标准输出(格式化输出)是指将内容输出到屏幕(终端),对应的设备文件为标准输出设备文件。常见的函数是printf()。下面是关于printf()的语法点和格式控制符的详细说明:

1.1、printf()函数

printf()用于格式化输出数据到标准输出(通常是屏幕)。其基本语法如下:

printf("格式字符串", 参数1, 参数2, ...);

1.2、格式控制符

格式控制符用于指定输出的格式。以下是详细的格式控制符说明:

  • %:格式化的开头标记。
  • -:对齐方式,向左对齐(空格在右);如果没有此标记,则默认向右对齐(空格在左)。
  • m.n:指定域宽和精度,其中m表示域宽(需要的字符数),n表示精度(默认精度为6)。如果m的值比实际数据小,则按实际输出,否则用空格填补
1.2.1 -对齐方式举例
#include <stdio.h>int main() {int num = 42;printf("右对齐,默认:'%5d'\n", num);printf("左对齐,使用'-':'%-5d'\n", num);return 0;
}

输出结果:

右对齐,默认:'   42'
左对齐,使用'-''42   '

可以看到,右对齐时数字在右侧,左侧填充空格;左对齐时数字在左侧,右侧填充空格。

1.2.2 m.n:指定域宽和精度

m表示域宽,n表示精度。以下是几个具体的例子:

复制代码
#include <stdio.h>int main() {float num = 3.14159;printf("默认精度:'%f'\n", num);printf("指定精度两位:'%.2f'\n", num);printf("指定域宽和精度:'%8.2f'\n", num);printf("左对齐指定域宽和精度:'%-8.2f'\n", num);return 0;
}

输出结果

默认精度:'3.141590'
指定精度两位:'3.14'
指定域宽和精度:'    3.14'
左对齐指定域宽和精度:'3.14    '

可以看到:
默认精度为6位小数。
%.2f指定精度为两位小数。
%8.2f指定域宽为8个字符,精度为两位小数,右对齐。
%-8.2f指定域宽为8个字符,精度为两位小数,左对齐。

1.3、常见的格式控制符

  • 整型

    • %d:十进制整数。
    • %md:指定域宽的十进制整数。
    • %ld:长整型十进制整数。
    • %u:无符号十进制整数。
    • %lu:长无符号十进制整数。
  • 八进制

    • %o:八进制整数。
    • %#o:带前缀0的八进制整数。
  • 十六进制

    • %x:小写十六进制整数。
    • %#x:带前缀0x的小写十六进制整数。
    • %#X:带前缀0X的大写十六进制整数。
  • 字符

    • %c:字符。
  • 字符串

    • %s:字符串。
  • 浮点数

    • %f:单精度浮点数。
    • %.nf:指定精度的单精度浮点数,n表示精度。
    • %lf:双精度浮点数。
    • %Lf:长双精度浮点数。
  • 地址

    • %p:指针地址。
示例
#include <stdio.h>int main() {int num = 123;float fnum = 123.456;char ch = 'A';char str[] = "Hello, World!";long lnum = 1234567890;unsigned int unum = 12345;void *ptr = &num;printf("十进制整数: %d\n", num);printf("指定域宽的十进制整数: %5d\n", num);printf("单精度浮点数: %.2f\n", fnum);printf("字符: %c\n", ch);printf("字符串: %s\n", str);printf("长整型十进制整数: %ld\n", lnum);printf("无符号十进制整数: %u\n", unum);printf("指针地址: %p\n", ptr);return 0;
}

注意事项

  • 使用格式控制符时,需要确保类型和参数匹配。
  • mn用于控制输出的宽度和精度,对于对齐和填补空格有很大的作用。
  • 特殊格式控制符(如#)可以用于显示进制前缀。

二、标准输入

概念:标准输入一般指的是键盘的设备文件,从键盘获取数据就是标准输入。

2.1 函数说明

  1. scanf()

    • 头文件#include <stdio.h>
    • 函数原型int scanf(const char *format, ...);
    • 参数
      • format:格式化字符串。
      • ...:省略号,根据format中的格式控制符,对应一个或多个内存地址。
    • 返回值
      • 成功:返回实际读取到的项目数。
      • 失败:返回0。
  2. getchar()

    • 头文件#include <stdio.h>
    • 函数原型int getchar(void);
    • 参数:无
    • 返回值
      • 成功:返回一个ASCII值,代表获取的字符(unsigned char)。
      • 失败:返回EOF(即-1)。

2.2 示例代码

#include <stdio.h>int main(int argc, char const *argv[]) {int num = 0;char c = '0';// 使用scanf获取整型输入int ret_val = scanf("%d", &num);while(getchar() != '\n');  // 清空由scanf留下的缓冲区内容printf("返回值:%d , 获取的数据为:%d\n", ret_val, num);// 使用scanf获取字符输入ret_val = scanf("%c", &c);while(getchar() != '\n');  // 清空由scanf留下的缓冲区内容printf("返回值:%d , 获取的数据为:%c\n", ret_val, c);// 打印EOF的值printf("EOF:%d\n", EOF);return 0;
}

输出示例

输入一个整数和一个字符
100
a
返回值:1 , 获取的数据为:100
返回值:1 , 获取的数据为:a
EOF:-1

2.3 详细解释

  1. 整型输入

    int ret_val = scanf("%d", &num);
    while(getchar() != '\n');
    
    • scanf("%d", &num)用于读取一个整型输入并存储在变量num中。
    • while(getchar() != '\n');用于清空输入缓冲区,避免残留数据影响后续输入。
  2. 字符输入

    ret_val = scanf("%c", &c);
    while(getchar() != '\n');
    
    • scanf("%c", &c)用于读取一个字符输入并存储在变量c中。
    • 再次清空缓冲区,确保后续输入正确。
  3. 打印EOF值

    printf("EOF:%d\n", EOF);
    
    • EOF是一个宏,表示文件结束或错误,值为-1。

注意事项

  • 清空缓冲区:使用scanf获取输入后,使用while(getchar() != '\n');清空缓冲区,避免影响后续输入。
  • 错误处理:检查scanf的返回值,确保输入操作成功。

这篇关于标准输入与输出与格式控制符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028581

相关文章

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

C 标准库 - `<float.h>`

C 标准库 - <float.h> 概述 <float.h> 是 C 标准库中的一个头文件,它定义了与浮点数类型相关的宏。这些宏提供了关于浮点数的属性信息,如精度、最小和最大值、以及舍入误差等。这个头文件对于需要精确控制浮点数行为的程序非常有用,尤其是在数值计算和科学计算领域。 主要宏 <float.h> 中定义了许多宏,下面列举了一些主要的宏: FLT_RADIX:定义了浮点数的基数。

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

当你输入一个网址后都发生什么

原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/  作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。 本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

如何将一个文件里不包含某个字符的行输出到另一个文件?

第一种: grep -v 'string' filename > newfilenamegrep -v 'string' filename >> newfilename 第二种: sed -n '/string/!'p filename > newfilenamesed -n '/string/!'p filename >> newfilename