蓝桥杯之c++入门(二)【输入输出(上)】

目录

  • 前言
    • 1.getchar和 putchar
      • 1.1 getchar()
      • 1.2 putchar()
    • 2.scanf和 printf
      • 2.1 printf
        • 2.1.1基本用法
        • 2.1.2占位符
        • 2.1.3格式化输出
          • 2.1.3.1 限定宽度
          • 2.1.3.2 限定小数位数
      • 2.2 scanf
        • 2.2.1基本用法
        • 2.2.2 占位符
        • 2.2.3 scanf的返回值
      • 2.3练习
        • 练习1:浮点除法
        • 练习2:甲流疫情死亡率
        • 练习3:温度表达转化
        • 练习4:计算并联电阻的阻值
        • 练习5:与圆相关的计算
        • 练习6:对齐输出
        • 练习7:糖果游戏
    • 3.cin和 cout
      • 3.1基本用法
      • 3.2 连续输入输出
      • 3.3 cout的格式输出(加餐)
        • 3.3.1 控制宽度和填充(加餐)
        • 3.3.2 控制数值格式 (加餐)
        • 3.3.3 控制整数格式(加餐)
        • 3.3.4 控制对齐方式(加餐)
      • 3.4 练习
        • 练习1:数字反转
        • 练习2:三⻆形⾯积
  • 总结


前言

编程的世界里,输入与输出是程序与用户交互的桥梁。无论是简单的数据处理,还是复杂的算法实现,输入输出始终是不可或缺的环节。本章将深入探讨C/C++语言中输入输出的多种方式,从基础的getchar和putchar函数,到功能强大的scanf和printf,再到C++特有的cin和cout流对象,我们将逐步剖析它们的使用方法、特点以及适用场景。


正文开始

1.getchar和 putchar

getchar()getchar()和 putchar() 是属于C语言的库函数,C++是兼容C语言的,所以C++中只要正确包含头文件也可以正常使用这两个函数。

1.1 getchar()

函数原型如下:

int getchar ( void);

在这里插入图片描述

**getchar()**函数返回用户从键盘输入的一个字符,使用时不带有任何参数。

程序运行到这个命令就会暂停,等待用户从键盘输入,等同于使用cin或scanf() 方法读取一个字符。

它的原型定义在头文件<cstdio>

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
 int ch;
 ch = getchar();
 cout << ch << endl;
 cout << (char)ch << endl;
 return 0;
}

getchar()不会忽略起首的空白字符,总是返回当前读取的第一个字符,无论是否为空格。

换行算不算字符呢?答案是肯定的;

我们来看下面的代码:

#include <iostream>
using namespace std;
int main()
{
	int ch = getchar();
	cout << (char)ch << endl;
	cout << ch << endl;
	ch = getchar();
	cout << (char)ch;
	cout << ch << endl;
	cout << "xxxxx" << endl;
	return 0;
}

运行结果:
在这里插入图片描述
上面的代码我们输入了一个a回车,getchar先读取一个字符a打印a和其的ASCII码值97,再读取换行,打印换行,和其ASCII码值10;

如果读取失败,返回常量EOF,由于EOF通常是-1,所以返回值的类型要设为int,而不是char。

如何让getchar()函数读取失败,返回-1呢?其实需要在输入字符之前,直接按Ctrl+z就可以。

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
 	int ch;
 	ch = getchar();
 	cout << ch << endl;
 	return 0;
}

getchar() 通常和 putchar() 是一对儿,配合使用的

1.2 putchar()

函数原型如下:

int putchar( int character );

putchar()函数将它的参数字符输出到屏幕,它的原型定义在头文件<cstdio>

#include <cstdio>
int main()
{
 int ch = 0;
 ch = getchar();
 putchar(ch);
 
 return 0;
}

操作成功时, putchar()返回输出的字符,否则返回常量 EOF。

小提示:

当用到快速读写,就会用到这两个函数。

2.scanf和 printf

scanf() 和 printf()是属于C语言的库函数,C++是兼容C语言的,所以C++中只要正确包含头文件也可以正常使用这两个函数。而且这两个函数在算法竞赛题目中使用的非常频繁,尤其是在输出格式控制中,所以接下来我们这里认真学习一下。

对printf和scanf有更深入的了解可以看看小编的这篇文章:
C语言的 printf 与 scanf

2.1 printf

printf() 函数原型如下:

int printf ( const char * format, ... );
2.1.1基本用法

printf()的作用是将参数文本输出到屏幕。

它名字里面的f代表format(格式化),表示可以定制输出文本的格式。

#include <cstdio>
int main() 
{
 printf("Hello World");
 return 0;
}

上面命令会在屏幕上输出一行文字“Hello World”。

printf() 不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。

为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符\n。

#include <cstdio>
int main() 
{
 printf("Hello World\n");
 return 0;
}

如果文本内部有换行,也是通过插入换行符来实现,如下方代码:

#include <cstdio>
int main() 
{
 printf("Hello\nWorld");
 return 0;
}
2.1.2占位符

printf() 可以在输出文本中指定占位符。

所谓“占位符”,就是这个位置可以用其他值代入。

#include <cstdio>
// 输出 There are 3 apples
int main()
{
 printf("There are %d apples\n", 3);
 return 0;
}

上面示例中,There are %d apples\n是输出文本,里面的%d就是占位符,表示这个位置要用其他值来替换。占位符的第一个字符一律为百分号%,第二个字符表示占位符的类型,%d表示这里代入的值必须是一个整数。

printf() 的第二个参数就是替换占位符的值,上面的例子是整数3替换%d。执行后的输出结果就是 There are 3 apples。

常用的占位符除了%d,还有%s表示代入的是字符串。

#include <cstdio>
int main()
{
 printf("%s will come tonight\n", "zhangsan");
 return 0;
}

上面示例中,%s表示代入的是一个字符串,所以printf() 的第二个参数就必须是字符串,这个例子是zhangsan。执行后的输出就是zhangsan will come tonight。

输出文本里面可以使用多个占位符。

#include <cstdio>
int main()
{
 printf("%s says it is %d o'clock\n", "lisi", 21);
 return 0;
}

上面示例中,输出文本%s says it is %d o'clock 有两个占位符,第一个是字符串占位符%s,第二个是整数占位符%d,分别对应printf()的第二个参数(lisi)和第三个参数(21)。执行后的输出就是lisi says it is 21 o'clock。

printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个。如果参数个数少于对应的占位符,printf() 可能会输出内存中的任意值。

占位符列举:

printf() 的占位符有许多种类,与数据类型相对应。

下面列出常用的占位符,方便查找,具体含义在后面章节介绍。

占位符介绍
%d十进制整数。
%lld十进制long long int类型。
%f小数(包含float类型和double类型)。
%Lflong double 类型浮点数。
%c字符。
%S字符串。
%a十六进制浮点数,字母输出为小写。
%A十六进制浮点数,字母输出为大写。
%e使用科学计数法的浮点数,指数部分的e为小写。
%E使用科学计数法的浮点数,指数部分的E为大写。
%i整数,基本等同于%d。
%g6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e 为小写。
%G等同于%g,唯一的区别是指数部分的E为大写。
%hd十进制short int类型。
%ho八进制short int类型。
%hx十六进制short int类型。
%huunsigned short int类型。
%ld十进制 long int类型。
%lo八进制long int类型。
%lx十六进制long int类型。
%luunsigned long int 类型。
%llo八进制long long int类型。
%llx十六进制 long long int类型。
%lluunsigned long long int 类型。
%Le科学计数法表示的long double类型浮点数。
%n已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。
八进制整数。
%p指针。
%u无符号整数(unsigned int)。
%x十六进制整数。
%zdsize_t类型。
%%输出一个百分号。
2.1.3格式化输出

printf() 可以定制占位符的输出格式。

2.1.3.1 限定宽度

printf()允许限定占位符的最小宽度。

#include <cstdio>
int main()
{
 printf("%5d\n", 123); // 输出为 " 123"
 return 0;
}

上面示例中,%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出的值默认是右对齐,即输出内容前面会有空格
在这里插入图片描述

如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的%的后面插入一个’-'号。

int main()
{
 	printf("%-5d\n", 123); // 输出为 " 123"
 	return 0;
}

在这里插入图片描述

上面示例中,输出内容123的后面添加了空格。

对于小数,这个限定符会限制所有数字的最小显示宽度。

#include <cstdio>
// 输出 " 123.450000"
int main()
{
 printf("%12f\n", 123.45);
 return 0;
}

上面示例中,%12f表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45输出结果的头部会添加2个空格。

2.1.3.2 限定小数位数

输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成%.2f。

#include <cstdio>
// 输出 Number is 0.50
int main()
{
 	printf("Number is %.2f\n", 0.5);
 	return 0;
 }

上面示例中,如果希望小数点后面输出3位(0.500),占位符就要写成%.3f。

这种写法可以与限定宽度占位符,结合使用。


// 输出为 "  0.50"
int main()
{
 	printf("%6.2f\n", 0.5);
 	return 0;
}

上面示例中,%6.2f表示输出字符串最小宽度为6,小数位数为2。所以,输出字符串的头部有两个空格。

最小宽度和小数位数这两个限定值,都可以用*代替,通过printf() 的参数传入。

#include <cstdio>
int main()
{
	printf("%*.*f\n", 6, 2, 0.5);
 	return 0;
}
// 等同于printf("%6.2f\n", 0.5);

在这里插入图片描述

上面示例中, %★.★f的两个星号通过printf() 的两个参数6和2传入。

2.2 scanf

scanf() 函数原型如下:

int scanf ( const char * format,...);
2.2.1基本用法

scanf() 函数用于读取用户的键盘输入。

程序运行到scanf() 这个语句时,会停下来,等待用户从键盘输入。

用户输入数据、按下回车键后,scanf() 就会处理用户的输入,将其存入变量。

scanf()的语法跟printf() 类似。

请看下面的代码:

#include <cstdio>
int main()
{
 	int i = 0;
 	scanf("%d", &i);
 	printf("%d\n", i);
 	return 0;
}

小提示:

特别注意,scanf函数的占位符后面一般不会加\n,\n是换行,一般在输出的时候才使用

它的第一个参数是一个格式字符串,里面会放置占位符(与printf()的占位符基本一致),告诉编译器如何解读用户的输入,需要提取的数据是什么类型。这是因为C语言的数据都是有类型的,scanf() 必须提前知道用户输入的数据类型,才能处理数据。

它的其余参数就是存放用户输入的变量,格式字符串里面有多少个占位符,就有多少个变量。

上面示例中,scanf()的第一个参数%d,表示用户输入的应该是一个整数。%d就是一个占位符,%是占位符的标志,d表示整数。第二个参数&i表示,将用户从键盘输入的整数存入变量i。

小提示:

scanf函数中存储数据的变量前面必须加上&运算符(指针变量除外),因为scanf()需要的是地址,必须将变量i的地址取出来传给scanf函数。

如果这里的变量i是数组,那就不用加&运算符。(后期慢慢介绍)

下面是一次从键盘读取多个变量的例子:

先来一个简单的:

#include <cstdio>
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;
}

小提示:

scanf 函数中指定的格式和给程序输入的数据格式要严格的匹配,否则可能不能得到想要的值。

再换一个例子:

#include <cstdio>
int main()
{
 	int i = 0;
 	int j = 0;
 	float x = 0;
 	float y = 0;
 	scanf("%d%d%f%f", &i, &j, &x, &y);
 
 	printf("i = %d\n", i);
 	printf("j = %d\n", j);
 	printf("x = %f\n", x);
 	printf("y = %f\n", y);
 
 	return 0;
}

上面示例中,格式字符串%d%d%f%f,表示用户输入的前两个是整数,后两个是浮点数。

比如键盘输入1-20 3.4-4.0e3,这四个值依次放入i、j、x、y四个变量。

scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。

所以,用户输入的数据之间,有一个或多个空格不影响scanf()解读数据。另外,用户使用回车键,将输入分成几行,也不影响解读。

1
-20
3.4
-4.0e3

上面示例中,用户分成四行输入,得到的结果与一行输入是完全一样的。每次按下回车键以后,scanf()就会开始解读,如果第一行匹配第一个占位符,那么下次按下回车键时,就会从第二个占位符开始解读。

scanf() 处理用户输入的原理是:

用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止。

#include <cstdio>
int main()
{
 	int x = 0;
 	float y = 0;
 
 	// 用户输入 " -13.45e12# 0"
 	scanf("%d", &x);
 	printf("%d\n", x);
 	scanf("%f", &y);
 	printf("%f\n", y);
 	return 0;
}

上面示例中,scanf() 读取用户输入时,%d占位符会忽略起首的空格,从-处开始获取数据,读取到-13停下来,因为后面的.不属于整数的有效字符。这就是说,占位符%d会读到-13。

第二次调用scanf() 时,就会从上一次停止解读的地方,继续往下读取。这一次读取的首字符是.,由于对应的占位符是%f,会读取到.45e12,这是采用科学计数法的浮点数格式。后面的#不属于浮点数的有效字符,所以会停在这里。

由于scanf() 可以连续处理多个占位符,所以上面的例子也可以写成下面这样。

#include <stdio.h>
int main()
{
 	int x = 0;
	float y = 0;
 
 	// ⽤⼾输⼊ " -13.45e12# 0"
 	scanf("%d%f", &x, &y);
 	printf("%d %f\n", x, y);
 	return 0;
}
2.2.2 占位符

scanf() 常用的占位符如下,与 printf()的占位符基本一致。

占位符介绍
%c字符。
%d整数。
%ffloat类型浮点数。
%lfdouble类型浮点数。
%Lflong double类型浮点数。
%s字符串。
%[]在方括号中指定一组匹配的字符(比如%[0-9]),遇到不在集合之中的字符,匹配将会停止。

上面所有占位符之中,除了%c以外,都会自动忽略起首的空白字符。%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。

如果要强制跳过字符前的空白字符,可以写成scanf(" %c", &ch) ,即%c前加上一个空格,表示跳过零个或多个空白字符。

#include <cstdio>
int main()
{
 	char ch = 0;
 	scanf("%c", &ch);
 	printf("--%c--\n", ch);
 	return 0; 
}

结果演示:

在这里插入图片描述

为了避免在读取这些空⽩字符,可以换⼀种⽅式:

 #include <cstdio>
int main()
{
 	char ch = 0;
 	scanf(" %c", &ch);
 	//%c前的空格会让scanf强制跳过空白字符,去读取非空白字符
 	printf("--%c--\n", ch);
 	return 0; 
}

结果演⽰:
在这里插入图片描述

了解这一点后,当‰c和%d等占位符连续使用的时候,也要注意,%c默认不会跳过空白字符的,所以在输入的时候,要非常小心,比如:

#include <cstdio>
int main() 
{ 
 	int a;
	char ch;
 	scanf("%d%c", &a, &ch);
 	printf("%d %c\n", a, ch);
 	return 0; 
}

在这里插入图片描述

如果在输入的时候,就是想在整数和字符之间加上空格,那么scanf中的格式串中%c的前面就要加上空格。

#include <cstdio>
int main() 
{ 
 	int a;
	char ch;
 	scanf("%d %c", &a, &ch);
 	printf("%d %c\n", a, ch);
 	return 0; 
}

正确的输入:

在这里插入图片描述

总之要注意,scanf中规定的输入格式和控制台输入数据的格式要保持一致才可能得到正确的结果。

2.2.3 scanf的返回值

scanf() 的返回值是一个整数,表示成功读取的变量个数。

如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF(-1)。

#include <cstdio>
int main()
{
 	int a = 0;
 	int b = 0;
 	float f = 0.0f;
 	int r = scanf("%d %d %f", &a, &b, &f);
 	printf("a=%d b=%d f=%f\n", a, b, f);
 	printf("r = %d\n", r);
 	return 0;
}

输入输出测试:
在这里插入图片描述
如果输⼊2个数后,按 ctrl+z ,提前结束输⼊:
在这里插入图片描述

在Dev-C++中按下ctrl+z,才结束了输入,我们可以看到r是2,表示正确读取了2个数值。

如果输入的数据一个都不能匹配成功的话,则输出的r是0.

在这里插入图片描述

如果一个数字都不输入,直接按ctrl+z ,输出的r是-1,也就是EOF.

在这里插入图片描述

掌握了scanf的返回值,我们一般会通过scanf的返回值来处理多组数据输入的竞赛题目,在后期的课程中大家都会一一见到的。

2.3练习

练习1:浮点除法

在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
    int a,b;
    cin >> a >> b;
    float  c = (float)a/b;
    printf("%.3f",c);
    return 0;
}
练习2:甲流疫情死亡率

在这里插入图片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int a,b;
    cin >> a >> b;
    float c = b*1.0/a*100.0;
    printf("%.3f%%", c);
    return 0;
}

小提示:

1.百分号%可以这样输出:printf("%%");

2.注意a和b的取值范围

3.百分比不是直接b/a,是需要乘以100.0的,因为需要得到小数,所以要是小数除法

4.有时候:先乘100再除a,还是先除a再乘100是有差异的。

比如:4/8*100和4*100/8的结果就有差异的。

练习3:温度表达转化

在这里插入图片描述

#include <cstdio>
int main()
{
 	double f = 0;
 	scanf("%lf", &f);
 	double c = 5 * (f - 32) / 9.0;
 	printf("%.5lf\n", c);
 	return 0;
}
练习4:计算并联电阻的阻值

在这里插入图片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    double r1,r2;
    cin >> r1 >> r2;
    printf("%.2lf", 1/((1/r1)+(1/r2)));
    return 0;
}
练习5:与圆相关的计算

在这里插入图片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    double r = 0;
    double p = 3.14159;
    cin >> r;
    printf("%.4lf %.4lf %.4lf",2*r,2*p*r,r*r*p);
    return 0;
}
练习6:对齐输出

在这里插入图片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    printf("%8d %8d %8d",a,b,c);
    return 0;
}
练习7:糖果游戏

在这里插入图片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{
	int a, b, c, d, e;
	cin >> a >> b >> c >> d >> e;
	//1号
	a /= 3;
	b += a;
	e += a;
	
	//2号
	b /= 3;
	c += b;
	a += b;
	
	//3号
	c /= 3;
	b += c;
	d += c;
	
	//4号
	d /= 3;
	c += d;
	e += d;
	
	//5号
	e /= 3;
	d += e;
	a += e;
	
	printf("%5d%5d%5d%5d%5d\n", a, b, c, d, e);
	return 0;
 } 

3.cin和 cout

前面我们已经提到过在C++中提供了:cin和cout两个流对象。

cin是C++中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用cin来进行数据的提取,cin一般是和>>(流提取运算符)配合使用的。cin的功能和scanf 是类似的。

cout是C++中提供的标准输出流对象,一般针对的控制台的窗口,也就是将数据以字符流的形式输出到控制台窗口上显示。cout 一般是和<<(流插入运算符)配合使用。cout的功能和printf|是类似的。

我们在写程序的时候,经常需要处理数据,不管什么类型的数据都是以字符流的形式输入和输出的,也就是不管在键盘上输入什么类型的数据,还是将程序中的各种类型的数据输出显示到控制台屏幕上,都是以字符流的形式处理的。

cin和cout的输入输出非常的方便,不需要手动控制格式,能够自动识别变量类型。

3.1基本用法

#include <iostream>
using namespace std;
int main()
{
 	int a;
 	char c;
 	float f;
 
 	cin >> a; // 读取⼀个整数
 	cin >> c; // 读取⼀个字符
 	cin >> f; // 读取取⼀个浮点数
 
 	cout << "打印结果:"<<endl;
 	cout << a << endl;
 	cout << c << endl;
 	cout << f << endl;
 	return 0;
}

在这里插入图片描述

当我们在键盘输入数据的时候,输入的数据不能被cin解读为对应类型的数据,那么读取也就结束了。

比如:

在这里插入图片描述

cin 使用细节:

  • cin 在读取的时候是根据用户的输入,从前往后,从上往下依次扫描。

  • cin在读取的过程中遇到空格,自动会跳过,所以不要担心在想要的字符前输入空白字符。

  • 当一行读取结束的时候,会自动换行,读取下一行的内容。

  • cin后面不可以跟换行endl

3.2 连续输入输出

如果我们一次要输入/输出多个数据,那cin和cout能做到吗?可以!

在上面的代码中,使用cout 进行变量的输出,实质上是将变量插入到cout 对象里,并以cout 对象作为返回值返回,因此我们还可以用<<在后面连续输出多个内容,通过连续输入输出的方式对代码进行编写,效果如下:

cin举例:

#include <iostream>
using namespace std;
int main()
{
 	int a = 0;
 	int b = 0;
 	//同类型变量连续输⼊
 	cin >> a >> b; //以最后⼀次输⼊为准
 
 	//添加换⾏endl
 	cin >> a >> endl; //代码编译报错
 
 	return 0;
}
#include <iostream>
using namespace std;
int main()
{
 	//不同类型变量的连续输⼊
 	int a = 0;
 	char ch = 0;
 	float f = 0;
 	cin >> a >> ch >> f;
 
	return 0;
}

cout举例:

#include <iostream>
using namespace std;
int main()
{
 	//对同⼀类型变量连续输出
 	int a = 10;
 	int b = 20
 	cout << a << " " << b << endl;
 	return 0;
}
#include <iostream>
using namespace std;
int main()
{
 	//⽀持相同/不同类型变量的连续输⼊
 	char ch = 0;
 	float f = 0.1;
 	cout << ch << f << endl;
 
 	//格式化输出:添加(任意)空格和字符串
 	cout << "ch:" << ch << " f:" << f << endl;
 
 	//格式化输出:多次换⾏
 	cout << ch << endl << endl;
 	return 0;
}

cin 的好处:

当输入若干个变量(也就是数据量很少)的时候,我们就可以通过>>把所有的数据用一行代码完成接收,而且无需关心数据的类型,和scanf函数比起来代码的书写非常简洁明了。

cout的好处:

cout 也可以用来连续输出多个数值,而且无需考虑数值的类型,因为它本身会做类型处理,和printf比起来比较方便。

3.3 cout的格式输出(加餐)

printf 函数在输出数据的时候,可以指定格式来输出,比如:指定宽度,比如指定小数点后的位数,对齐方式等等。那么cout 在数据的时候能否指定格式呢?答案是可以的!cout 结合<iomanip>(I0 manipulators)头文件中的操纵符,可以灵活控制输出格式,从而满足各种格式化需求。

3.3.1 控制宽度和填充(加餐)
  • setw:设置字段宽度(只对紧接着的输出项有效)。

  • setfill:设置填充字符。

#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
 	int a = 123;
 
 	cout << "默认宽度: " << a << endl;
 	cout << "宽度设置为10: " << setw(10) << a << endl;
 	cout << "宽度为10,不够时填充*: " << setw(10) << setfill('*') << a << endl;
 
 	return 0;
}

结果演示:
在这里插入图片描述

3.3.2 控制数值格式 (加餐)
  • fixed :以固定⼩数点表⽰浮点数,设置后就不会以科学计数法展示了。
  • scientific :以科学计数法表⽰浮点数。
  • setprecision :设置浮点数的精度,以控制⼩数点后的数字位数,⼀般先固定⼩数点,再设置精度。
#include <iomanip>
int main()
{
	float a = 12.349584521314;
	cout << "默认:" << a << endl;
	cout << "固定小数点方式: " <<fixed << a << endl;
	cout << "科学计数法方式: " << scientific << a << endl;
	cout << "固定小数点,小数点后2位有效数字: " << fixed << setprecision(2) << a << endl;
	
	
	return 0;
}

在这里插入图片描述

3.3.3 控制整数格式(加餐)
  • dec :以⼗进制格式显示整数(默认)。
  • hex :以⼗六进制格式显示整数。
  • oct :以⼋进制格式显示整数。
#include <iostream>
using namespace std; 
#include <iomanip>
int main() {
 	int n = 255;
 
 	cout << "十进制 : " << dec << n << endl;
 	cout << "十六进制: " << hex << n << endl;
 	cout << "十进制 : " << oct << n << endl;
 
 	return 0;
}

在这里插入图片描述

3.3.4 控制对齐方式(加餐)
  • left :左对⻬。
  • right :右对⻬(默认)。
#include <iostream>
using namespace std; 
#include <iomanip>
int main() 
{
 	int n = 123;
 
 	cout << "右对齐: " << setw(10) << right << n << endl;
 	cout << "左对齐: " << setw(10) << left << n << endl;
 	return 0;
}

在这里插入图片描述

3.4 练习

练习1:数字反转

在这里插入图片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{
	char a,b,c,d,e;
	cin >> a >> b >> c >> d >> e;
	cout << e << d << c << b << a << endl;
	return 0;
}

⼩提⽰:

从题⽬的中可以看出,想要输⼊⼩数,然后反转输出,如果真按照这样的思路往下⾛,也能解决问题,但是可能就复杂了。其实在不管什么类型的数据都是以字符流的形式输⼊和输出的,那我们就可以把输⼊的这个⼩数和⼩数点,都当做字符依次读取,然后再按照想要的顺 序输出就⾏。
如果使⽤ scanf 和 printf函数要指定好占位符,如果使⽤ cin/cout 要指定好变量的类型;

练习2:三⻆形⾯积

在这里插入图片描述

#include <iostream>
using namespace std;
#include <cstdio>
#include <cmath>
#include <iomanip>
int main()
{
    double a, b, c;
    cin >> a >> b >> c;
    double p = (a + b + c)/2;
    double s = sqrt(p*(p - a)*(p - b)*(p - c));
    cout << fixed << setprecision(1) << s << endl;
    return 0;
}

总结

本章对C/C++中的输入输出进行了全面而深入的讲解。从基础的字符输入输出函数getchar和putchar,到功能强大的格式化输入输出函数scanf和printf,再到C++中灵活的流对象cin和cout,我们不仅学习了它们的使用方法,还通过大量实例展示了如何在实际编程中灵活运用这些工具。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/963212.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型

Paper Card 论文标题&#xff1a;Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者&#xff1a;Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…

3.5.5 基于横盘结构的分析体系——缠论(走势类型)

走势 缠论中走势的定义如下&#xff1a; 包含一个中枢的走势——盘整 包含两个或多个中枢的走势——趋势 方向 趋势&#xff08;两中枢或多中枢&#xff09; 盘整&#xff08;一中枢&#xff09; 上涨 下跌 表1-8 盘整和趋势类型的走势理论图。 趋势和中枢 …

使用PyQt5绘制带有刻度的温度计控件

前言&#xff1a;进入学习Python开发上位机界面的第二阶段&#xff0c;学习如何开发自定义控件&#xff0c;从常用的控件入手学习&#xff0c;本期主要学习如何使用PyQt5绘制带有刻度的温度计控件。 1. 先找到一篇参考文章 参考文章&#xff1a;Qt编写自定义控件5-柱状温度计…

DIFY源码解析

偶然发现Github上某位大佬开源的DIFY源码注释和解析&#xff0c;目前还处于陆续不断更新地更新过程中&#xff0c;为大佬的专业和开源贡献精神点赞。先收藏链接&#xff0c;后续慢慢学习。 相关链接如下&#xff1a; DIFY源码解析

赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。

佬们过年好呀~新年第一篇博客让我们来场赛博算命吧&#xff01; 更多文章&#xff1a;个人主页 系列文章&#xff1a;JAVA专栏 欢迎各位大佬来访哦~互三必回&#xff01;&#xff01;&#xff01; 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…

「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)

深度学习&#xff08;DL&#xff09;是现代人工智能&#xff08;AI&#xff09;的核心之一&#xff0c;但它并不是一夜之间出现的技术。从最初的理论提出到如今的广泛应用&#xff0c;深度学习经历了几乎一个世纪的不断探索与发展。今天&#xff0c;我们一起回顾深度学习的历史…

AIGC技术中常提到的 “嵌入转换到同一个向量空间中”该如何理解

在AIGC&#xff08;人工智能生成内容&#xff09;技术中&#xff0c;“嵌入转换到同一个向量空间中”是一个核心概念&#xff0c;其主要目的是将不同类型的输入数据&#xff08;如文本、图像、音频等&#xff09;映射到一个统一的连续向量空间中&#xff0c;从而实现数据之间的…

单细胞分析基础-第一节 数据质控、降维聚类

scRNA_pipeline\1.Seurat 生物技能树 可进官网查询 添加链接描述 分析流程 准备:R包安装 options("repos"="https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packages("BiocManager",update = F,ask =…

【13】WLC HA介绍和配置

1.概述 本文对AireOS WLC的HA进行介绍,和大多数网络架构设计一样,单台的WLC是无法保证设备的冗余性的,而且WLC也不是双引擎的设备,所以需要依靠High Available的技术来为WLC提供高可用性。 2.WLC HA类型 AireOS WLC的高可用性技术可以分为N+1的SSO的HA。不是所有的设备都…

Alibaba开发规范_编程规约之命名风格

文章目录 命名风格的基本原则1. 命名不能以下划线或美元符号开始或结束2. 严禁使用拼音与英文混合或直接使用中文3. 类名使用 UpperCamelCase 风格&#xff0c;但以下情形例外&#xff1a;DO / BO / DTO / VO / AO / PO / UID 等4. 方法名、参数名、成员变量、局部变量使用 low…

【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)

Elasticsearch系列文章目录 【Elasticsearch 基础入门】一文带你了解Elasticsearch&#xff01;&#xff01;&#xff01;【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置&#xff08;单机&#xff09; 目录 Elasticsearch系列文章目录前言单机模式1. 安装 J…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中&#xff0c;向 addConstr 这个方法中传入一个 TempConstr 对象&#xff0c;在模型中就会根据这个对象生成一个约束。更重要的是&#xff1a;TempConstr 对象可以传给所有addConstr系列方法&#xff0c;所以下面先介绍 TempConstr 对象 TempConstr TempC…

深度学习可视化指标方法工具

1. TensorBoard 简介&#xff1a;由TensorFlow提供的可视化工具&#xff0c;现已支持多种深度学习框架。 功能&#xff1a; 图可视化&#xff1a;展示计算图结构&#xff0c;帮助理解模型架构。 标量仪表板&#xff1a;跟踪损失和准确率等指标的变化。 直方图仪表板&#xf…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉&#xff0c;Oracle提供了Impdp和ExpDp工具&#xff0c;功能很强大&#xff0c;可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具&#xff0c;在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…

小程序-视图与逻辑

前言 1. 声明式导航 open-type"switchTab"如果没有写这个&#xff0c;因为是tabBar所以写这个&#xff0c;就无法跳转。路径开始也必须为斜线 open-type"navigate"这个可以不写 现在开始实现后退的效果 现在我们就在list页面里面实现后退 2.编程式导航…

list的使用,及部分功能的模拟实现(C++)

目录&#xff08;文章中"节点"和"结点"是同一个意思&#xff09; 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list…

StarRocks BE源码编译、CLion高亮跳转方法

阅读SR BE源码时&#xff0c;很多类的引用位置爆红找不到&#xff0c;或无法跳转过去&#xff0c;而自己的Linux机器往往缺乏各种C依赖库&#xff0c;配置安装比较麻烦&#xff0c;因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器&#xff0c;进行编…

Axure PR 9 旋转效果 设计交互

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们将学习Axure中的旋转效果设计与交互技巧。 旋转 创建旋转效果所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个按钮元件。 创建交互 创建按钮交互状态 1.选中按钮元件&#xf…

Java - 引用类型:强引用、软引用、弱引用和虚引用详解

文章目录 概述1. 强引用&#xff08;Strong Reference&#xff09;1.1 什么是强引用&#xff1f;1.2 强引用的特点1.3 强引用的使用场景1.4 强引用的注意事项 2. 软引用&#xff08;Soft Reference&#xff09;2.1 什么是软引用&#xff1f;2.2 软引用的特点2.3 软引用的使用场…

S4 HANA给科目分配允许记账的税码

本文主要介绍在S4 HANA OP中给科目分配允许记账的税码相关设置。具体请参照如下内容&#xff1a; 1. 给科目分配允许记账的税码 以上配置定义了总账科目可以使用什么税码进行记账。通常在科目主数据中会明确总账科目的“Tax Category”来请明确总账科目可以使用什么类型的税码…