C/C++输入输出(1)

1.getchar和putchar

1.1getchar()

函数原型:

cpp 复制代码
1  int getchar(void);

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

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

getchar()函数原型定义在头文件<cstdio>。

cpp 复制代码
#include"cstdio"
#include"iostream"
using namespace std;

int main()
{
	int ch;
	ch=getchar();
	cout << ch << endl;
	cout << (char)ch << endl;
	return 0;
}

因为getchar()返回的是字符类型,所以不会忽略起首的空白字符,总是返回当前读取的第一个字符。

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

我们可以直接按Ctrl+z来实现读取失败。

1.2putchar()

函数原型:

cpp 复制代码
1  int putchar(int character);

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

cpp 复制代码
#include"cstdio"

int main()
{
	int ch=0;
	ch=getchar();
	putchar(ch);
	return 0;
}

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

2.scanf和printf

2.1printf

printf()函数原型:

cpp 复制代码
1  int printf(const char* format,......);

2.1.1基本用法

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

cpp 复制代码
#include <cstdio>

int main() 
{
 printf("Hello World");
 return 0;
}

printf()本身是不会在结尾处换行的,所以我们可以在结尾处增加一个\n,从而实现换行。

2.1.2占位符

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

cpp 复制代码
#include <cstdio>

int main()
{
	 printf("There are %d apples\n", 3);
	 return 0;
}

在上面我们能够看出%d就是占位符,表示这个位置要用其他值来替换。

同时在使用中,我们也可以使用多个占位符,使用顺序也是和占位符的顺序是一致的。

常见的占位符:

|------|--------------------|
| 占位符 | 介绍 |
| %d | 十进制整数 |
| %lld | 十进制long long int类型 |
| %f | 小数(包含float和double) |
| %Lf | long double类型浮点数 |
| %c | 字符 |
| %s | 字符串 |

2.1.3格式化输出

2.1.3.1限定宽度

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

cpp 复制代码
#include"cstdio"

int main()
{
	printf("%5d",123);
	return 0;
}

上面示例中,%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。

输出端值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,我们可以在%后面插入一个-号。

2.1.3.2限定小数位数

输出小数时,有时希望限定小数位数。

cpp 复制代码
#include"cstdio"

int main()

{
	printf("%.2f",12.345);
	return 0;
}

当我们希望小数点后面只保留两位,占位符可以写成%.2f。

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

cpp 复制代码
#include"cstdio"

int main()

{
	printf("%*.*f",6,2,12.345);
	return 0;
}

上面%*.*f的两个星号通过printf()的两个参数6和2传入。

2.2scanf

scanf()函数原型:

cpp 复制代码
1  int scanf( const char* format,......);

2.2.1基本用法

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

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

cpp 复制代码
#include"cstdio"

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

注:

  1. scanf函数的占位符后面一般不会加\n,\n是换行,一般在输出的时候才使用。
  2. scanf函数中存储数据的变量前面必须加上&运算符,因为scanf()需要的是地址,必须将变量的地址取出来传给scanf函数。
  3. scanf函数中指定的格式和给程序输入的数据格式要严格的匹配,否则可能不能得到想要的值。
  4. scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。

2.2.2scanf的返回值

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

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

cpp 复制代码
#include"cstdio"

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

如果输入两个数后,按ctrl+z,提前结束输入。

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

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

2.3练习

练习1:浮点除法

cpp 复制代码
#include"cstdio"
#include"iostream"
using namespace std;

int main()
{
	int a=0;
	int b=0;
	cin >> a >> b;
	printf("%.3f",a*1.0/b);
	return 0;
}

练习2:B2012 甲流疫情死亡率 - 洛谷

cpp 复制代码
#include"cstdio"

int main()
{
	int a=0,b=0;
	scanf("%d %d",&a,&b);
	printf("%.3f%%\n",b*100.0/a);
	return 0;
}

练习3: B2013 温度表达转化 - 洛谷

cpp 复制代码
#include"cstdio"

int main()
{
	double F=0;
	scanf("%lf",&F);
	double C=5*(F-32)/9.0;
	printf("%.5lf",C);
	return 0;
}

练习4:B2015 计算并联电阻的阻值 - 洛谷

cpp 复制代码
#include"cstdio"

int main()
{
	float r1=0,r2=0;
	scanf("%f %f",&r1,&r2);
	printf("%.2f",r1*r2*1.0/(r1+r2));
	return 0;
}

练习5:B2014 与圆相关的计算 - 洛谷

cpp 复制代码
#include"cstdio"
#include"iostream"
using namespace std;

double p=3.14159;
double r;

int main()
{
	cin >> r ;
	printf("%.4lf %.4lf %.4lf",r*2,r*2*p,r*r*p);
	return 0;
}

练习6:B2004 对齐输出 - 洛谷

cpp 复制代码
#include"cstdio"

int main()
{
	int a=0,b=0,c=0;
	scanf("%d %d %d",&a,&b,&c);
	printf("%8d %8d %8d",a,b,c);
	return 0;
}

练习7:信息学奥赛一本通(C++版)在线评测系统

cpp 复制代码
#include"iostream"
#include"cstdio"
using namespace std;

int a,b,c,d,e;

int main()
{
	cin >> a >> b >> c >> d >> e;
	a/=3;
	e+=a;
	b+=a;
	b/=3;
	a+=b;
	c+=b;
	c/=3;
	b+=c;
	d+=c;
	d/=3;
	c+=d;
	e+=d;
	e/=3;
	d+=e;
	a+=e;
	printf("%5d%5d%5d%5d%5d",a,b,c,d,e);
	return 0;
}

3.cin和cout

  • cin是C++中提供的标准输入流对象
  • cout是C++中提供的标准输出流对象
  • cin和cout的输入输出非常方便,不需手动控制格式,能够自动识别变量类型

3.1基本用法

cpp 复制代码
#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;
}

练习:

练习1:P5705 【深基2.例7】数字反转 - 洛谷

cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	char a,b,c,d,e;
	cin >> a >> b >> c >> d >> e;
	cout << e << d << c << b << a << endl;
	return 0;
}

练习2:P5708 【深基2.习2】三角形面积 - 洛谷

cpp 复制代码
#include"cstdio"
#include"cmath"
#include"iostream"
using namespace std;

int main()
{
	double a,b,c;
	cin >> a >> b >> c;
	double p=(a+b+c)/2;
	printf("%.1f",sqrt(p*(p-a)*(p-b)*(p-c)));
	return 0;
}
相关推荐
逐雨~16 小时前
9.8C++作业
开发语言·c++
我爱挣钱我也要早睡!17 小时前
Java 复习笔记
java·开发语言·笔记
知识分享小能手20 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
汇能感知1 天前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun1 天前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao1 天前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾1 天前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
利刃大大1 天前
【高并发内存池】五、页缓存的设计
c++·缓存·项目·内存池
DKPT1 天前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa1 天前
HTML和CSS学习
前端·css·学习·html