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

「C++输入输出」笔记

参考:比特鹏哥

1. getchar和putchar

1.1 getchar

函数原型:int getchar(void)

1.1.1 头文件 <cstdio>

1.1.2 空格,换行都会当成字符读取

1.1.3 返回值类型为整型,读取失败返回E0F(-1)

#include<iostream>
#include<cstdio>

int main()
{
  int ch = getchar();
  //读取失败:
  //不做任何操作,直接点Ctrl+z
  cout << ch << endl;//实际上,getchar和putchar才是一对

  return 0;
}

1.2 putchar

1.2.1 函数原型:int putchar(int ch)

1.2.2 头文件 <cstdio>

1.2.3 失败,也返回EOF(-1)

#include<iostream>
#include<cstdio>

int main()
{
  int ch = getchar();
  putchar(ch);
  putchar('\n');
  putchar('a');

  return 0;
}

2. scanf和printf

2.1 printf

用于设置输出格式

2.1.1 函数原型:int printf ( const char * format, ... );

2.1.2 头文件 <cstdio>

2.1.3 \n 换行符

#include<cstdio>

int main()
{
  printf("holle world\n");

  return 0;
}

2.1.4 常见占位符

占位符类型
%dint(十进制整数)
%cchar(单个字符)
%s字符串
%ffloat/double(小数)
%Lflong double(小数)
%lldlong long int(十进制整数)
#include<cstdio>

int main()
{
  printf("你好 %s 今天是星期%d\n","李华",2);

  return 0;
}

2.1.5 格式化输出

㈠ 控制宽度

⑴%5d

右对齐,至少保留五位,若超过五位则直接输出(其中5可替换为其他数字)

⑵%-5d

左对齐,至少保留五位,若超过五位则直接输出(其中5可替换为其他数字)

㈡ 控制小数位数

%.2f

保留两位小数(其中2可替换为其他数字)

㈢ " * "替代

eg. %*.*f

%5.2f

向右对齐,至少保留5位(小数点也算),保留两位小数

2.2 scanf

用于输入已知类型

2.2.1 函数原型:int scanf ( const char * format, ... );

2.2.2 头文件 <cstdio>

#include<cstdio>

int main()
{
int d = 0;
scanf("%d",&d);

return 0;
}

2.2.3 常用占位符

占位符类型
%dint
%c字符
%s字符串
%ffloat

%lf

double
%Lflong double
%[]

在方括号中指定一组字符(eg.%[a-z]或%[0-9])。

遇到不在集合中的字符时,输入会结束

注意

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

Ⅱ ‘&’---取地址操作符,scanf读取的是地址

Ⅲ %c 不忽略空白字符,总是返回第⼀个字符

     若想 %c 强制跳过字符前的空白字符,则需要将其写成'  %c'

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

Ⅴ scanf原理: 输入的数据会先存储在缓存区,等到按下回车键后,按照占位符对缓存进行解读。

                      解读用户输入时,会从上一次解读剩下的第一个字符开始,直到读完缓存,或遇到第一个不符合条件的字符停止

2.2.4 返回值(整数)

读取成功,返回值为读取成功的变量个数

没有读取任何项或匹配失败,返回 0

若在成功读取任何数据前,发生读取错误或读取到文件结尾,则返回常量EOF(-1)

注意3,如果scanf前面读取失败,后面的scanf将不再读取

3. cin和cout

控制台(终端)上无论是输入还是输出显示的都是字符流,只有在程序中才有类型之分(eg.浮点型,整型...)

头文件 <iostream>

3.1 cin​​​​​​

(输入)当一行读取结束时,cin会自动换行,读取下一行内容

①cin格式

cin可以被用于while循环中当循环条件

cin >> 变量名; 会返回⼀个流对象的引用,就是cin。

C++里,流对象(像 cin ,它用于从标准输入读取数据)可被当作布尔值使用。

当流对象处于正常状态,也就是在读取数据过程中没有发生错误(如:没有遇到输入结束符、输入类型和要读取的类型匹配等情况)时,这个流对象的布尔值为 true ;反之,false 

因此,cin可以被用于while循环中当循环条件

//计算除空白字符外的字符串 
#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s;
	int t = 0;
	//输入并计算除空白字符外的字符串 
	while(cin >> s)
	{
		t += s.size();
	}
	//输出
	cout << t << endl; 
	return 0;
 } 

注意:在我们的电脑里,在换行后还要输入结束符(Windows系统中按 Ctrl + Z ,Linux或macOS系统中按 Ctrl + D 

 

3.2 cout

3.2.1 输出

cout格式

3.2.1 cout输出格式控制

它们的头文件都是 <iomanip>

ⅰ控制宽度和填充空白处

    setw:设置宽度,仅针对紧挨着的一项(默认右对齐)

    setfill:设置填充字符

   

ⅱ控制对齐方式

    right:右对齐

    left:左对齐

ⅲ 控制数值格式(常用:浮点数)

    fixed:固定小数点 浮点数

    scientific:科学计数法 浮点数

    setprecision:保留小数位数,一般与fixed一起使用

ⅳ 控制整数格式

    oct :八进制

    dec:十进制

    hex:十六进制

#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
  int a = 66, b = 77;
  cout << "八进制:" << oct << a << " " << b << endl;
  cout << "十进制:" << dec << a << " " << b << endl;//默认 
  cout << "十六进制:" << hex << a << " " << b << endl;  

  return 0;
}

2与3的对比

①格式差异

cout会自动忽略小数点后多余的0,不需要指定格式;printf函数打印浮点数,会默认打印六位小数,需要指定格式

②性能差异

scanf与printf比cin和cout快

一般,数据量10^6以内,用cin和cout与scanf和printf都行

          数据量10^9左右,用scanf和printf

③优化cin和cout

注意风险

1. ios::sync_with_stdio(false);

2. cin.tie(0);

#include <iostream>
using namespace std;

int main()
{
	ios::sync_with_stdio(false);//取消C风格I/O同步 
	cin.tie(0);//解除cin和cout的绑定 
	int a;
	cin >> a;
	cout << "a: " << a << endl;
	return 0;
}

4. 竞赛:输入多组数据

4.1 输入多组未知数量的数据

可以利用while()+cin,来进行输入   [解释详见本篇 3.1cin ]

#include<iostream>
using namespace std;

int main()
{
  int a, b;
  while(cin >> a >> b)
  {
    cout << a + b << endl;
  }
  return 0;
}

4.2 输入多组指定结束符号的数据

①单个数据接收

#include <cstdio>
 
int main()
{
  int ch;
  while((ch = getchar()) ! = '结束字符')
  {
    语句;
  }
  return 0;
}

②多个数据接收

//例如 输入:多组数据,一行两个数据,空格隔开,若输入 0 0,则结束输入
//     输出:每行两个数据的和
#include <iostream>
using namespace std;

int main()
{
  int a, b;
  while(cin >> a >> b,a||b)
  {
    cout << a + b << endl;
  }
  return 0;
}

⑴逗号表达式

1.从左到右以此计算

2.最终结果是最后一个的结果

⑵一些简化程序的函数

在C++中它们的头文件都是 <cctype>

1.检测大写字母  islower()

2.检测小写字母  isupper()

3.检测大小写字母 isalpha()

4.检测数字 isdigit()

5.检测空白字符 isspace()

 

 

 

 

 

 

相关文章:

  • 上取整,下取整,四舍五入
  • IC/ID卡的卡号的不同格式的转换
  • created在vue3 script setup中的写法
  • redis搭建一主一从+keepalived(虚拟IP)实现高可用
  • 【8】分块学习笔记
  • 修改War包文件
  • PTA C语言程序设计 第三章
  • linux Redhat9.5采用DNS主从实现跨网段解析
  • 批量删除 PPT 中的所有图片、某张指定图片或者所有二维码图片
  • 【Java】——方法的使用(从入门到进阶)
  • deepseek使用记录99——为何追问
  • nginx 配置ip黑白名单
  • Docker 内部通信(网络)
  • 基于MySQL的创建<resultMap>和查询条件<if test>
  • zookeepernacoskafka之间的联系
  • Linux系统上后门程序的原理细节,请仔细解释一下
  • 【GeeRPC】项目总结:使用 Golang 实现 RPC 框架
  • PostgreSQL:语言基础与数据库操作
  • Cloudlog系统接口 search_log未授权存在SQL注入漏洞代码审计(DVB-2025-8964)
  • 大数据 ETL 异常值缺失值处理完整方案
  • 上海工匠学院首届学历班56人毕业,新一届拟招生200人
  • 7月打卡乐高乐园,还可以去千年古镇枫泾参加这个漫画艺术季
  • 重庆大学通报本科生发14篇SCI论文处理结果
  • 警方通报男子地铁上拍视频致乘客恐慌受伤:列车运行一度延误,已行拘
  • 夜读丨古代有没有近视眼?
  • 大四本科生已发14篇SCI论文?学校工作人员:已记录汇报