(03)格式化输入和输出

news/2024/4/23 7:44:53/

一、概念简介

基础学习阶段:键盘输入,屏幕输出。
从键盘输入数据,以及实现简单的人机交互。
通过格式化的方式输出 整数、浮点数、字符、字符串,以及对数据进行对齐。

1、标准输入输出

在C语言中,有三个函数可以用来在键盘上输入数据,它们分别是:
1)gets() :用于输入一行字符串;
2)getchar() :用于输入单个字符;
3)scanf():可以输入各种类型的数据,作为最灵活、最复杂、最常用的输入函数,虽然无法完全替代前面两者,但是却是必须掌握的。

在C语言中,有三个函数可以用来在屏幕上输出数据,它们分别是:   
1)puts() :只能输出字符串,并且输出结束后会自动换行;
2)putchar() :只能输出单个字符;
3)printf():可以输出各种类型的数据,作为最灵活、最复杂、最常用的输出函数,可以完全替代全面两者,所以是必须掌握的。

scanf函数的命名含义是:Scan(扫描) 和 Format (格式),即 格式化输入。
printf函数的命名含义是:Print(打印) 和 Format (格式) ,即 格式化输出。

类比输出,我们发现,输入和输出的差别在于:
(1) 函数名不同;
(2) 输入少了换行符 \n;
(3) 输入多了取地址符&;

2、格式化

输入和输出所讲的格式化可以类比。

我们在进行输入的时候,其实都是一个字符串,但是这个字符串被输入后有可能当成整数来用,也有可能还是字符串,这个计算机自己是不知道规则的,需要写代码的人告诉它,这个告诉它如何输入的过程就被称为格式化。

我们在进行输出的时候,对于小数而言,可能需要输出小数点后一位,亦或是两位,这个计算机自己是不知道规则的,需要写代码的人告诉它,这个告诉它如何输出的过程就被称为格式化。

二、整数的格式化输入

1、单个数据的输入

#include <stdio.h>
int main() 
{int a;scanf("%d", &a);printf("%d\n", a);return 0;
}
1314//↙代表回车
1314

2、多个数据的输入

两个数据:

#include <stdio.h>
int main() 
{int a, b;scanf("%d", &a);scanf("%d", &b);printf("%d %d\n", a, b);return 0;
}
5201314520 1314

也可以把输入放在一行上进行输入:
多个数据的输入,我们可以放在一个scanf语句来完成。

#include <stdio.h>
int main() 
{int a, b;scanf("%d %d", &a, &b);printf("%d %d\n", a, b);return 0;
}
520 1314520 1314

3、空格免疫

对于输入的数据之间有一个空格和多个空格的情况:

#include <stdio.h>
int main()
{int a, b;scanf("%d %d", &a, &b);printf("%d %d\n", a, b);return 0;
}
520    1314520 1314
#include <stdio.h>
int main()
{int a, b;scanf("%d       %d", &a, &b);printf("%d %d\n", a, b);return 0;
}
520 1314520 1314

在这里插入图片描述

4、回车结算

scanf()是以回车来结算一次输入的。
用户每次按下回车键,计算机就会认为完成一次输入操作,scanf()开始读取用户输入的内容,并根据我们定义好的格式化内容从中提取有效数据,只要用户输入的内容和格式化内容匹配,就能够正确提取。

三、输入缓冲区

#include <stdio.h>
int main()
{int a, b, c, d;scanf("%d %d %d %d", &a, &b, &c, &d);printf("%d %d %d %d\n", a, b, c, d);return 0;
}

以下是我们的期望输入

1 2 3 41 2 3 4

1、少输入

我们尝试少输入1个数,按下回车后,发现程序并没有任何的输出,当我们再次输入下一个数的时候,产生了正确的输出:

1 2 341 2 3 4

2、多输入

我们尝试多输入1个数,按下回车后,发现输出了前四个我们输入的数:

1 2 3 4 51 2 3 4

3、再次尝试

我们增加一行代码,就是在输出四个数以后,再调用一次 scanf():

#include <stdio.h>
int main()
{int a, b, c, d, e;scanf("%d %d %d %d", &a, &b, &c, &d);printf("%d %d %d %d\n", a, b, c, d);scanf("%d", &e);printf("%d\n", e);return 0;
}

然后我们采用上述的一次性输入5个数的方式:

1 2 3 4 51 2 3 4
5

这时候,我们发现程序正常运行了。

这是因为:我们从键盘输入的数据并没有直接交给scanf(),而是放入了输入缓冲区中,当我们按下回车键,scanf()才到输入缓冲区中读取数据。如果缓冲区中的数据符合 scanf()给定的格式要求,那么就读取结束;否则,继续等待用户输入,或者读取失败。

【例题1】给定一段代码,如下,并且给出一个输入,请问输出是什么。

#include <stdio.h>
int main()
{int a = 9, b = 8, c = 7, d = 6, e = 5;scanf("%d %d %d %d", &a, &b, &c, &d);printf("%d %d %d %d\n", a, b, c, d);scanf("%d", &e);printf("%d\n", e);return 0;
}

输入如下:

1 2b 3 4 5

四、其他数据类型的格式化输入

在这里插入图片描述

1、字符串的输入

关于字符串,后面在讲完数组以后,还会着重讲,也有很多匹配算法是应用于字符串上的,是一个很重要的内容。
记住 字符串输入时&可以不加:

#include <stdio.h>
int main()
{char str[100]; scanf("%s", str);    // (1)更常用!!!printf("%s\n", str);scanf("%s", &str);   // (2)printf("%s\n", str);return 0;
}

2、做个简单的算命游戏

#include <stdio.h>
int main()
{char str[100]; int height;printf("请大侠输入姓名:");scanf("%s", str);printf("请大侠输入身高(cm):");scanf("%d", &height);printf("%s大侠,身高%dcm,是百年难得一遇的人才,只要好好学习C语言,日后必成大器!\n", str, height);return 0;
}

五、格式化输出

1、数据类型格式化

所有格式化内容都是以百分号%开头。

1)整数

对于int而言,我们利用%d将要输出的内容进行格式化,然后输出,简单的理解就是把%d替换为对应的变量,%lld用于对long long类型的变量进行格式化:

#include <stdio.h>
int main()
{int a = 520;long long b = 1314;printf("a is %d, b is %lld!\n", a, b);return 0;
}
a is 520, b is 1314!

2)浮点数

对于浮点数而言,我们利用%f来对单精度浮点数float进行格式化;用%lf来对双精度浮点数进行格式化,并且用.加 “数字” 来代表要输出的数精确到小数点后几位:

#include <stdio.h>
int main()
{float f = 1.2345;double df = 123.45;printf("f is %.3f, df is %.0lf\n", f, df);return 0;
}
f is 1.235, df is 123

在这里插入图片描述
另外,单精度 和 双精度 的区别就是双精度的精度更高一点,也就是能够表示的小数的范围更加精准,这个会在介绍浮点数的存储方式时详细介绍。

3)字符

对于字符而言,我们利用%c来进行格式化;C语言中的字符是用单引号引起来的,当然,字符这个概念扯得太远,会单独开一个章节来讲,具体可以参考 ASCII 码。
顺便我们来解释一下一直出现但是我闭口不提的换行符\n,这个符号是一个转义符,它代表的不是两个字符(反斜杠\和字母n),而是换行的意思;

#include <stdio.h>
int main()
{char ch = 'A';printf("%c\n", ch);return 0;
}
A //输出就是一个字符 A

【例题1】第1行输出1个1,第2行输出2个2,第3行输出3个3,第4行输出4个4。(理解换行符的意义)

#include <stdio.h>
int main()
{printf("1\n");printf("22\n");printf("333\n");printf("4444\n");return 0;
}

也可以用一条语句解决:

#include <stdio.h>
int main()
{printf("1\n22\n333\n4444\n");return 0;
}

4)字符串

字符串,是由多个字符组合而成,用双引号引起来,用%s进行格式化:

#include <stdio.h>
int main()
{char str[100] = "I love you!";printf("%s\n", str);return 0;
}
I love you!

2、对齐格式化

上文中所有的格式化,都有一个%和一个字母,事实上,在百分号和字母之间,还有一些其它的内容:

主要包含如下内容:
  1)负号:如果有,则按照左对齐输出;
  2)数字:指定字段最小宽度,如果不足则用空格填充;
  3)小数点:用与将最小字段宽度和精度分开;
  4)精度:用于指定字符串重要打印的而最大字符数、浮点数小数点后的位数、整型最小输出的数字数目;

【例题2】给定如下一段代码,求它的输出内容。

#include <stdio.h>
int main()
{double x = 520.1314;int y = 520;printf("[%10.5lf]\n", x);printf("[%-10.5lf]\n", x);printf("[%10.8d]\n", y);printf("[%-10.8d]\n", y);return 0;
}

首先需要看小数点后面的部分,将要输出的内容实际要输出多少的长度确定下来,然后再看字段最小宽度,最后再来看左对齐还是右对齐:

[ 520.13140]
[520.13140 ]
[  00000520]
[00000520  ]

然后,我们来看看把不同类型的变量组合起来是什么效果:

#include <stdio.h>
int main()
{char name[100] = "Zhou";int old = 18;double meters = 1.7;char spostfix = 's';printf("My name is %s, %d years old, %.2lf meter%c.\n", name, old, meters, spostfix);return 0;
}
My name is Zhou, 18 years old, 1.70 meters.

http://www.ppmy.cn/news/267707.html

相关文章

C语言:格式化输入与格式化输出

//格式化&#xff1a;数据在输入或者输出时&#xff0c;按照一定的格式来进行 1.格式化输出 #include <stdio.h> int printf (const char *format,…); //变参1 —— format&#xff1a;格式化控制字符串&#xff08;格式控制串&#xff09; //变参 —— 参数的类型或者…

tf卡无法格式化怎么修复?解决方法分享

tf卡无法格式化怎么修复&#xff1f;内存卡常应用于数据相机、摄像机等设备中&#xff0c;但随着使用时间的累积&#xff0c;我们也会遇到内存卡损坏&#xff0c;需要通过格式化解决的情况&#xff0c;但有时候却无法实现格式化&#xff0c;怎么解决这个问题呢&#xff1f; tf卡…

计算机光盘无法格式化,怎么格式化光盘啊??求解!!

网友求助&#xff1a;怎么格式化光盘啊&#xff1f;&#xff1f;求解!! 问题 最佳答案 一般光盘是不可擦写的&#xff0c;只能一次性&#xff0c;格式化不了。可擦写的光盘贵多了&#xff0c;可擦写次数有限&#xff0c;可以格式化&#xff0c; 推荐答案 一般光盘是不可擦写的&…

格式化C盘

1 引言 如今社会,随着电脑普及率的上升,各式各样的电脑问题也是接踵而至。 如何有效解决电脑问题呢?方法有很多,其实90%的电脑问题都是可以靠重启电脑解决,如果重启电脑解决不了的问题,那么就可能是电脑系统出现了比较严重的问题。 2 问题 大部分电脑系统问题: (1)电脑蓝…

format格式化输出

什么是format 相对于基本格式化输出采用“%”的方法&#xff0c;format的功能强大&#xff0c;该函数把字符串当一个模板&#xff0c;通过传入的参数进行格式化&#xff0c;并且使用大括号“{}”作为特殊字符代替“%”&#xff0c;有点类似C#里面的占位符 1&#xff09;forma…

C和C++ 常用格式化输出方式

调试的时候&#xff0c;格式化输出友好的话&#xff0c;可以有效的提高调试的效率&#xff0c;不然眼睛盯着都难受也找不到需要的参数在哪。。。。 因此&#xff0c;在这里整理一下&#xff0c;各种格式化输出的常见方法。 C语言 C语言中的输出函数为printf()&#xff0c;函数…

10.格式化输出

什么是格式化输出? 我们写程序时,可能会用到一段字符串多次,比如:我的名字是xxx,年龄xxx, 每次写的时候’我的名字’和’年龄’需要重复写。我们可以写一个特定的字符串,使用时只需填入姓名和年龄即可。 通俗来说就是:改变固定字符串的某些字符。 下面介绍三种方法: 1.占位符…

C语言练习,产品信息格式化

产品信息格式化 编写一个程序, 对用户录入的产品信息进行格式化。以下为程序的运行示例&#xff1a; Enter item number: 385↙ Enter unit price: 12.5↙ Enter purchase date (yy mm dd): 2015 3 12↙ Item Unit Purchase 385 $12.50 03/12/2015输入格式: 产…

C语言标准格式化输入输出

C语言的标准输入输出都是我们都是在最开始的时候就用到的。但是&#xff0c;它们的原型也有不一样的知识值得探索。 目录 一、标准输出printf( ) &#xff08;1&#xff09;Flags &#xff08;2&#xff09;width和.prec &#xff08;3&#xff09;HlL &#xff08;4&…

c格式化输出

一、printf()函数 printf()函数是格式化输出函数&#xff0c;一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为&#xff1a; printf("<格式化字符串>"&#xff0c; <参量表>); 其中格式化字符串包括两…

C++格式化输出

在输出数据时&#xff0c;为简便起见&#xff0c;往往不指定输出的格式&#xff0c;由系统根据数据的类型采取默认的格式&#xff0c;但有时希望数据按指定的格式输出。 (如有时候需要按十六进制或者八进制输出、按指定的宽度、保留小数点后两位) C提供了两种方法&#xff1a; …

格式化输入输出(13)

cin和cout 包含头文件iostream&#xff0c;使用命名空间std&#xff08;避免每个都得加作用域&#xff09;&#xff0c;iomanip是C里用来格式化控制输入输出的&#xff0c;多个不同类型的变量的输入输出可以按照以下的方法来完成。 程序运行中&#xff0c;需要保证输入数据的正…

sd卡怎么格式化?5个步骤轻松教会你

随着SD卡的广泛使用&#xff0c;总会有各种情况导致SD卡必须要格式化才行。但是格式化有没有办法执行&#xff0c;sd卡怎么格式化&#xff1f;还有人会因为误操作导致的数据丢失。现在&#xff0c;小编就给大家介绍一下怎么格式化SD卡&#xff1f;以及格式化后SD卡数据的恢复方…

C++20格式化文本(format)探究

产生的由来 在之前的C标准之中&#xff0c;如果你想格式化文本&#xff0c;你可以使用传统的printf函数或STL iostream库&#xff0c;但是这两者&#xff0c;各有优缺点。 printf函数继承自C语言&#xff0c;50多年的发展&#xff0c;已经让其很高效&#xff0c;灵活和方便。就…

C语言格式化输入和输出; Format格式化

Format格式化 %1s或者%2s,%3s:取字符串的前1,2或者3位。%*c:屏蔽一个字符。%[A-Z]:取一个A到Z的值。 %[^a-z]:不取a到z的值。 %[^\n]&#xff1a;取非换行之前的值。printf("%5d", a):左边补 格式化&#xff1a;有正则在其中。 int main() {printf("%5d\n&quo…

C/C++ C++20 格式化库 std::format

说明 文本格式化库提供 printf 函数族的安全且可扩展的替用品。有意使之补充既存的 C I/O 流库并复用其基础设施&#xff0c;例如对用户定义类型重载的流插入运算符。 头文件 #include <format>函数定义 template<class... Args> std::string format(std::stri…

什么是代理IP?

打个比方吧&#xff0c;你就像大灰狼&#xff0c;想去抓兔子。你看见那屋子有兔子&#xff08;网站数据&#xff09;是你想要的&#xff0c;想进去。进去以后给你抓了几次呢&#xff0c;屋子里的人就知道你是坏人&#xff0c;记住你长这个样子&#xff0c;以后就不让你进去了&a…

代理ip

proxies有两种协议&#xff0c;http 和 https&#xff0c;访问http协议的网页&#xff0c;需要将代理设置成http&#xff0c;https 也是如此&#xff0c;如果设置错误&#xff0c;仍会使用你自己的IP地址。 https://icanhazip.com/ 这个链接可以查看你访问这个网页所使用的的I…

怎么设置代理服务器IP上网

如何设置代理服务器&#xff0c;怎么使用IP代理服务器上网呢&#xff0c;很多网友探讨这个问题&#xff0c;想必是因为工作原因吧&#xff0c;虽然正常上网一般用不到代理&#xff0c;但是看自己需求吧&#xff0c;看这里想必你是需要使用代理服务器上网的吧。 比如自己IP是上海…

如何使用代理服务器

1.登陆 http://www.proxyabc.com,下拉第三个选框,找到 South Korea(用别的也行), 选SEARCH. 2.你将见到多组由四组数字组成的( IP 段)和一组数字(端口), 记下其中一组IP段和端口. 3.在IE窗口的顶部选择 工具 - Internet选项 - 连接 - 居域网设置 -代理服务器下打勾.将你上…