C/C++之输入输出

news2024/11/19 17:49:37

文章目录

    • 一.C语言的输入输出
      • 1.printf
        • i. 输出整数
        • ii. 浮点数
        • iii.字符 & 字符串
      • 2.scanf
        • i.整数
        • ii.浮点数
        • iii. 字符 & 字符串
      • 3.特殊用法
        • i. * 的应用
        • ii. %n 的应用
        • iii. %[] 的应用
    • 二.C++中的输入输出
      • 1.cout
        • i. 缓冲区(buffer)
        • ii. cout之格式化输出
      • 2.cin
        • i. cin.get()
        • ii. cin.getline()
        • iii. 流状态
    • 三.取消同步流

一.C语言的输入输出

在讲 c++ 的输入输出之前,有必要先回顾一下最经典的 c 语言的输入输出 —— s c a n f ——scanf ——scanf p r i n t f printf printf,他们被声明在头文件 #include <stdio.h>

scanf & printf 的优势:

  1. 格式化输入输出
  2. 效率高

1.printf

p r i n t f printf printf 函数为格式输出函数,其功能是按照用户指定的格式,将指定的数据输出到屏幕上:

printf("格式控制字符串", 输出表项);

格式控制字符串有两种:格式字符串、非格式字符串,非格式字符串在输出的时候原样打印;格式字符串是以 % \% % 开头的字符串,后面跟不同格式字符,用来说明输出数据的类型、形式、长度、小数位数等,就像一个模具,用来控制希望得到的物体的形态

类型格式字符串
int%d
float%f
double%lf
char%c
char[]%s
long long%lld

格式字符串的形式为:% [对齐方式][输出最小宽度] [.精度] 类型

  1. 对齐方式:- 表示左对齐,不填表示右对齐(没有% +的写法),默认为右对齐,如 % -d,表示左对齐
  2. 最小宽度 N N N:当实际宽度小于 N N N时,用指定的字符填充剩余部分(默认以空格填充),使其长度为 N N N并输出;当实际宽度大于 N N N时,按实际位数输出,如 % 010d,表示最小宽度为 10,不足部分用 0 填充
  3. 精度控制:这里精度表示保留小数点后几位,如 %.2f,表示保留小数点后两位

i. 输出整数

代码实现:

#include<stdio.h>
int main()
{
    int a=100;
    printf("%d\n", a);      //100
    printf("%5d\n", a);     //  100
    printf("%05d\n", a);    //00100
    printf("%.2d\n", a);    //100.00
    return 0;
}

ii. 浮点数

浮点数有两种类型: f l o a t 、 d o u b l e float、double floatdouble

  • f l o a t float float是单精度浮点数类型,通常在内存中占据 4 4 4个字节,它可以表示大约6到7位的有效数字
  • d o u b l e double double是双精度浮点数类型,通常在内存中占据 8 8 8个字节,它可以表示大约15到16位的有效数字

当使用 p r i n t f printf printf输出时,若不控制精度,均默认保留至小数点后 6 6 6

代码实现:

#include<stdio.h>
int main()
{
    float a=2.01;
    printf("%f\n", a);     //2.010000
    printf("%.3f\n", a);   //2.010
    printf("%10f\n", a);   //  2.010000
    printf("%10.3f\n", a); //     2.010

    double b=5.01;
    printf("%lf\n", b);    //5.010000
    printf("%.3lf\n", b);  //5.010
    return 0;
}

iii.字符 & 字符串

const char*char[] 都可以用来表示字符串:

  • const char* 是一个指向常量字符的指针,即指针指向的字符内容是不可更改的
  • char[] 是一个字符数组,可以通过索引修改字符串

均可以通过 % s \%s %s 得到整个字符串

代码实现:

#include<stdio.h>
int main()
{
    char a = 'A';
    printf("%c\n", a);  //A

    const char* str="Hello World!";
    char buf[]="Hello World!";
    printf("%s\n", str);    //Hello World!
    printf("%s\n", buf);    //Hello World!
    return 0;
}


2.scanf

s c a n f scanf scanf 函数称为格式输入函数,即按照格式字符串的格式,从键盘上把数据输入到指定的变量之中,其调用的基本格式为:

scanf("格式控制字符串",输入项地址列表);

其中,格式控制字符串的作用与 p r i n t f printf printf函数相同,地址表项中的地址给出各变量的地址,地址是由地址运算符 & 后跟变量名组成的

🔺为什么需要加上取址符 & ?
因为 s c a n f scanf scanf函数需要知道变量的内存地址才能将输入的值存储到正确的位置上,当我们使用 s c a n f scanf scanf函数时,我们需要将输入的值存储到一个变量中,而不是直接给出变量的名称,通过使用 &操作符,我们可以获取该变量的内存地址,从而告诉 s c a n f scanf scanf函数将输入的值存储到这个地址所对应的内存位置上

特别地,对于数组而言,可以不用加 &,因为数组名本身就是指向数组首地址的指针


s c a n f scanf scanf 的返回值:

s c a n f ( ) scanf() scanf() 函数返回成功读入的项目的个数,如果它没有读取任何项目(比如它期望接收一个数字而实际却输入的一个非数字字符时就会发生这种情况),scanf() 则会返回 0 0 0

当它检测到 文件末尾 (end of file) 时,它返回 E O F EOF EOF E O F EOF EOF 在是文件 stdio.h 中的定义好的一个特殊值,通常 #define 指令会将 E O F EOF EOF 的值定义为 − 1 -1 1,则可以结合 w h i l e while while 循环实现多行输入,通常有两种 c 的写法:

  1. while(scanf("%d",&a) != EOF)
  2. while(~scanf("%d",&a))

代码实现:

#include <stdio.h>
int main() {
   int a,b;
   while(scanf("%d %d", &a, &b) != EOF)
       printf("%d\n", a+b);

   return 0;
}

也就是说,若不按下 Ctrl+Z,循环就不会结束

W i n d o w s Windows Windows允许通过键盘模拟文件尾: C t r l + Z Ctrl+Z Ctrl+Z

在这里插入图片描述


i.整数

代码实现:

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

ii.浮点数

代码实现:

#include <stdio.h>
int main(){
    double c, d;
    scanf("%lf %lf", &c, &d);       //1 2
    printf("%.2lf,%.3lf\n", c, d);  //1.00,2.000
    return 0;
}

iii. 字符 & 字符串
  1. 输入单个字符

代码实现:

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

  1. 利用 %s 输入字符串

🔺注意:%s 输入遇到空格或者回车就会停下(截断)

#include<stdio.h>
int main(){
    char s[10];
    scanf("%s", s);
    printf("%s", s);
    return 0;
}

输出结果:

在这里插入图片描述


  1. 利用正则表达式输入字符串

[] 是正则表达式,表示只要不是回车就读入字符串(空格不会截断)

#include<stdio.h>
int main(){
    char s0[15];
    scanf("%[^\n]", s0);
    printf("%s", s0);
    return 0;
}

输出结果:

在这里插入图片描述



3.特殊用法

i. * 的应用

′ ∗ ′ '*' p r i n t f printf printf 中的应用

控制宽度和精度:假如在输出时,不想事先指定字段宽度 / / /精度,而是希望由程序来制定该值,则可以在字段宽度 / / /精度部分使用 * 代替数字来达到目的,同时需要在后面多增加一个参数来告诉函数宽度 / / /精度的值是多少,具体的说,如果转换说明符为%*d,那么参数列表中应该包括一个*的值和一个d的值,来控制宽度 / / /精度和变量的值

代码示例:

#include<stdio.h>
int main(void)
{
    printf("%0*d\n", 5, 10);       //00010
    printf("%.*f\n", 2, 10.12345); //10.12
    printf("%*.*f\n", 5, 1, 10.0); // 10.0
    return 0;
}

′ ∗ ′ '*' s c a n f scanf scanf 中的应用

忽略赋值* s c a n f scanf scanf 函数中通常用来指定忽略某个输入值的赋值,这在处理输入时非常有用,因为有时候我们可能只想跳过一些输入,而不需要将其赋值给特定的变量

例如:有以下的输入数据 “10 20”,但是我们只想读取第二个整数而不关心第一个整数,则可以使用 *

#include <stdio.h>
int main(){
    int num;
    scanf("%*d %d", &num);  //10 20
    printf("%d", num);      //20
    return 0;
}

ii. %n 的应用

% n \%n %n p r i n t f printf printf 中的应用

统计字符数 p r i n t f ( ) printf() printf() 中,%n 是一个特殊的格式说明符,它不打印某些内容,而是会将目前为止打印输出字符的数量存储到参数列表中指向的变量中

代码示例:

#include<stdio.h>
int main()
{
    int k=0;
    printf("hello %nworld", &k);      //输出 hello world
    printf("%d",k);                   //6
    return 0;
}

% n \%n %n s c a n f scanf scanf 中的应用

统计字符数 s c a n f ( ) scanf() scanf() 中,%n 会将目前为止读入字符的数量存储到参数列表中指向的变量中

代码示例:

#include <stdio.h>
int main() {
    char str[100];
    int count;
    scanf("%s%n", str, &count); //abcd
    printf("%d\n", count);      //4
    return 0;
}

iii. %[] 的应用

常见用法

  1. %[0-9]: 表示只读入’0’到’9’之间的字符
  2. %[a-zA-Z]: 表示只读入字母
  3. %[^\n]: 就表示读入除换行符之外的字符,^ 表示除…之外
  4. %k[^=]: 读入"="号前的至多 k k k个字符

当读取到范围之外的字符时,就会做截取,也就是之后的数据将不会放入字符串中


代码示例:

//1
#include <stdio.h>
int main() {
    char number[10];
    scanf("%[0-9]", number);    //123abc
    printf("%s\n", number);     //123

    return 0;
}

//2
#include <stdio.h>
int main() {
    char letters[20];
    scanf("%[a-zA-Z]", letters);    //abc121efg
    printf("%s\n", letters);        //abc

    return 0;
}

//3
#include<stdio.h>
int main(){
    char s0[15];
    scanf("%[^\n]", s0);    //123abc abc
    printf("%s", s0);       //123abc abc

    return 0;
}

//4
#include <stdio.h>

int main() {
    char str[20];
    scanf("%10[^=]", str);  //123=abc
    printf("%s\n", str);    //123

    return 0;
}


二.C++中的输入输出

现在来到 C++ 中,其输入输出通过头文件 #include <iostream> 来完成,其命名空间为 s t d std std

流( S t r e a m Stream Stream)是一个抽象概念,用于表示数据的序列,它可以是从一个地方到另一个地方的数据传输通道,流可以用于从文件、内存、网络或其他设备中读取数据,也可以用于向这些地方写入数据,而 C++ 的 I / O I/O I/O 就是发生在流:

  • 输入流( i s t r e a m istream istream):用于从数据源中读取数据,比如从键盘读取用户输入、从文件中读取数据、从网络连接中读取数据等
  • 输出流( o s t r e a m ostream ostream):用于向目标位置写入数据,比如将数据输出到屏幕、写入到文件、发送到网络等

1.cout

cout 是 C++ 标准库中的标准输出流对象

cout << "hello world" << endl;

<< 是输出运算符,左侧必须是 o s t r e a m ostream ostream 对象,右侧是要打印的值:此运算符将给定的值写到给定的 o s t r e a m ostream ostream 对象中,计算结果就是我们写入给定值的那个 o s t r e a m ostream ostream 对象

cout 是一个输出对象,输出语句本质上就是不断创造 o s t r e a m ostream ostream 对象的过程,第一个计算的结果是第二个的输入,从而形成链条,最终将所有信息输出到屏幕上,例如:

cout << "hello" << endl;
等价于
1.cout << "hello";
2.cout << endl;

第一个 << 给用户打印一条消息,这个消息是一个字符串字面值常量,在双引号之间的文本会被打印到标准输出;第二个 << 打印 endl,这是一个被称为操作符的特殊值,写入 endl 的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中


i. 缓冲区(buffer)

当程序向输出设备(比如屏幕、打印机)输出数据时,数据通常不是立即传递到设备上,而是先存储到缓冲区中,这样做的好处是可以减少向设备频繁传输数据的开销,而是利用缓冲区将数据一次性传输,从而提高效率,类似地,当数据从输入设备(比如键盘、网络)输入进来时,也会先存储到输入缓冲区中,程序可以逐步读取这些数据。

在 C++ 中,对于标准输出流 c o u t cout cout,也存在一个输出缓冲区,当程序使用 c o u t cout cout 进行输出时,数据首先被存储在输出缓冲区中,直到缓冲区满了或者遇到显式的刷新操作时,数据才会被真正输出到屏幕上:

  • 使用 std::flush 操纵符:手动刷新输出缓冲区
  • 输出末尾添加 std::endl :自动刷新缓冲区并插入换行符

ii. cout之格式化输出

通过 #include <iomanip> 头文件来实现格式化的输出:

  1. std::setw(int n): 设置域宽为 n n n,默认为右对齐
  2. std::setprecision(int n): 设置浮点数的精度为 n n n 位小数
  3. std::setfill(char c): 设置填充字符为 c c c
  4. std::left: 设置输出在设定的宽度内左对齐
  5. std::right: 设置输出在设定的宽度内右对齐
  6. std::boolalpha: 将布尔类型的输出从 0 / 1 0/1 0/1 改为 t r u e / f a l s e true/false true/false
  7. std::hex: 以十六进制形式输出值
  8. std::oct: 以八进制形式输出值
  9. std::dec: 以十进制形式输出值

代码示例:

#include <iostream>
#include <iomanip>

int main() {
    int n = 255;
    double pi = 3.1415926;

    std::cout << "Default: " << n << " " << pi << std::endl;
    std::cout << "setw: " << std::setw(10) << n << " " << std::setw(10) << pi << std::endl;
    std::cout << "setprecision: " << std::setprecision(4) << n << " " << std::setprecision(3) << pi << std::endl;
    std::cout << "setfill: " << std::setfill('*') << std::setw(10) << n << " " << std::setfill('#') << std::setw(10) << pi << std::endl;
    std::cout << "left/right: " << std::left << std::setw(10) << n << std::right << std::setw(10) << pi << std::endl;
    std::cout << "boolalpha: " << std::boolalpha << true << " " << false << std::endl;
    std::cout << "Hex/Oct/Dec: " << std::hex << n << " " << std::oct << n << " " << std::dec << n << std::endl;

    return 0;
}

输出结果:

在这里插入图片描述



2.cin

cin 是 C++ 标准库中的标准输入流对象,在查看输入流的时候, c i n cin cin 会自动跳过空白(空格,换行符,制表符)直到遇到非空白字符

int a, b;
cin >> a >> b;

>> 是输入运算符,其左侧为一个 i s t r e a m istream istream 运算对象,再接受一个变量作为右侧运算对象,可以连续读取多个数据,并将它们存储到不同的变量中

一些简单代码示例:

  1. 整数
#include <iostream>
using namespace std;
int main(){
    int a, b;
    cin >> a >> b;
    cout << a << ' ' << b << endl;
    return 0;
}

  1. 浮点数
#include <iostream>
using namespace std;
int main(){
    double c, d;
    cin >> c >> d;
    cout << fixed << setprecision(3) << c << ' ' << d << endl;  //保留三位有效数字
    return 0;
}

  1. 单个字符
#include <iostream>
using namespace std;
int main(){
    char ch;
    cin >> ch;
    cout << ch << endl;
    return 0;
}

  1. 字符串
#include <iostream>
using namespace std;
int main(){
    char str[10];
    cin >> str;   //cin输入字符串也是遇到空格或回车就会结束
    cout << str << endl;
    return 0;
}

🔺注意 c i n > > cin>> cin>> 接受一个字符串时,遇到 ‘空格’、‘ t a b tab tab’、'回车’就会结束,当需要输入包含空格的整行文本时,可以使用 std::getline 函数来读取输入流,而不是直接使用 >> 运算符,这样可以确保整行文本被完整地存储到字符串中

getline(cin, string)

  • 头文件:#include <string>
  • 第一个参数是输入流(比如 s t d : : c i n std::cin std::cin 或文件流),第二个参数是用来存储读取的文本的字符串

代码示例:

#include <iostream>
#include <string>
using namespace std;
int main(){
    string s;
    getline(cin, s);    //可以实现整行输入
    cout << s << endl;
    return 0;
}

i. cin.get()

cin.get(字符变量名)

  • 每次接受单个字符,逐个字符读取
  • 当读取的输入流有空格或回车时,会读取空格或回车,并将其视为普通字符,而不会将其作为流结束的标志来处理: A S C I I ASCII ASCII 中,空格 − 32 -32 32,回车 − 10 -10 10

代码示例:

#include <iostream>
using namespace std;
int main (){
    char a, b;
    cin.get(a);
    cin.get(b);

    cout<<a<<" "<<b<<endl;
    cout<<(int)a<<" "<<(int)b<<endl;
    return 0;
}

输出:

示例1:输入 a[回车]
a
a

97 10
结果得到的是字母 a 和 换行符(\n)

示例2:输入 a[空格]b[回车]
a b
a
97 32
结果得到的是字母 a 和 空格符

cin.get(字符数组名,接收字符数目,结束符)

  • 接收一定长度的字符串
  • 接受字符数目:如 cin.get(s, 5) 会读取最多 5 5 5 个字符到数组 s s s 中,并且在必要时加上空字符'\0' 以表示字符串的结束,也就是说,实际读取的长度会减 1 1 1,因为结尾的 '\0' 占了一位
  • 结束符:默认为回车 '\n',也就是说,可以接受空格,不接受回车,但不读取不代表丢弃,回车仍然在输入缓冲区内

代码示例:

#include <iostream>
using namespace std;
int main (){
    char ch1,ch2[10];
    cin.get(ch2,5);       //在不遇到结束符的情况下,最多可接收5-1=4个字符到ch2中,注意结束符为默认Enter
    cin.get(ch1);         //读取单个字符
    cout<<"ch2="<<ch2<<endl;
    cout<<ch1<<"="<<(int)ch1<<endl;
    return 0;
}

输出:

示例1:输入 a[回车]
a
ch2=a

=10
由于第二个就读取到了换行符,因此直接结束,之后换行符被第二个 cin.get() 读取

示例2:输入长度为 7 的字符串 abcdefg
abcdefg
ch2=abcd
e=101

cin.get()

  • 无参数,可用于舍弃输入流中的不需要的字符,或者舍弃回车 '\n',弥补 cin.get(字符数组名,字符数目,结束符) 的不足

代码示例:

#include <iostream>
using namespace std;
int main()
{
    char ch1,ch2[10];
    cin.get(ch2,5);
    cin.get();  //舍弃一个缓冲区中的字符
    cin.get(ch1);
    cout<<ch2<<endl;
    cout<<ch1<<"\n"<<(int)ch1<<endl;
    return 0;
}

输出:

示例1:输入长度为 7 的字符串
abcdefg
ch2=abcd
f=102
结果表明,第二个 cin.get() 跳过了字符 'e',使得第三个 cin.get() 读取到了 'f'

示例2:输入 1a[回车]bcdef
1a
bcdef
ch2=1a
b=98
同理,第二个 cin.get() 跳过了换行符


ii. cin.getline()

cin.getline(字符数组名,接收长度,结束符)cin.get(...)的用法极为类似,但存在几个🔺注意点:

  • c i n . g e t ( ) cin.get() cin.get() 当输入的字符串超长时,不会引起 c i n cin cin 函数的错误,后面若有 c i n cin cin 操作,会继续执行,只是直接从缓冲区中取数据,但是 c i n . g e t l i n e ( ) cin.getline() cin.getline() 当输入超长时,会引起 c i n cin cin 函数的错误,后面的 c i n cin cin 操作将不再执行

代码示例:

#include <iostream>
using namespace std;
int main()
{
    char ch1, ch2[10];
    cin.getline(ch2, 5);
    cin>>ch1;
    cout<<ch2<<endl;
    cout<<ch1<<"\n"<<(int)ch1<<endl;
    return 0;
}

输出结果:

在这里插入图片描述

可以看到,此时出现输入超长, c h 2 = 1234 ch2=1234 ch2=1234,此时缓冲区剩余:5[回车],但是结果得到了 0 0 0(g++环境下),说明 c i n cin cin 已失效!



  • c i n . g e t ( ) cin.get() cin.get() 每次读取一整行并把由 Enter键 生成的换行符 '\n' 留在输入队列中,然而 c i n . g e t l i n e ( ) cin.getline() cin.getline() 每次读取一整行后会将换行符'\n'丢弃 !

代码示例:

#include <iostream>
using namespace std;

int main() {
    cout << "Enter your name:";
    char name[15];
    cin.getline(name, 15);  //输入xjc(enter)
    cout << "name:" << name << endl;
    char ch;
    cin.get(ch);    // 输入123(enter) 注:因为cin.getline把最后一个换行符丢弃了,所以此处ch读取字符'1'
    cout << ch << "=" << (int)ch << endl;  //输出49  '1'的ASCII码值
    return 0;
}

输出结果:

在这里插入图片描述



iii. 流状态

流状态是顾名思义就是输入或输出流的状态, c i n cin cin c o u t cout cout 对象都包含了一个描述流状态的变量( i o s t a t e iostate iostate 类型),它由三个元素组成: e o f b i t , f a i l b i t , b a d b i t eofbit,failbit,badbit eofbitfailbitbadbit,其中每一个元素都由一位来表示( 1 1 1代表是, 0 0 0代表否)

成员描述
eofbit到达文件尾则此位设置为1
badbit如果流被破坏则此位设置为1
failbit如果输入未能读取预期的字符或输出操作没有写入预期字符,则此位设置为1
goodbit流状态正常,也代表所有位为 0 即表示 0
good()如果流正常则返回 true
eof()如果 eofbit 为 1 返回 true
bad()如果 badbit 为 1 返回 true
fail()如果 badbit 或 failbit 为 1 返回 true
rdstate()返回流状态
exceptions()返回一个位掩码,指出哪些标记将导致异常发生
exceptions(iostate ex)设置哪些状态将导致 clear() 引发异常
clear(iostate s)将流状态设置为 s,s 默认为 0 即goodbit
setstate(iostate s)设置与 s 中对应位的流状态,其他位保持不变,相当于用 s 与 当前流状态做 “或运算”

来看一个缓冲区未读取完,导致 f a i l b i t = 1 failbit=1 failbit=1 的例子:

#include <iostream>
using namespace std;

int main()
{
char ch, str[20];
    cin.getline(str, 5);
    cout<<"flag:"<<cin.good()<<endl;    // 查看goodbit状态,即是否有异常
    cin.clear();                        // 清除错误标志
    cout<<"flag:"<<cin.good()<<endl;    // 清除标志后再查看异常状态
    cin>>ch;
    cout<<"str:"<<str<<endl;
    cout<<"ch :"<<ch<<endl;

    system("pause");
    return 0;
}

输出结果:

在这里插入图片描述

可以看出,因输入缓冲区未读取完造成输入异常 cin.good()=false

通过cin.clear()可以清除输入流对象 c i n cin cin的异常状态,不影响后面的 cin>>ch 从输入缓冲区读取数据,因为 cin.getline 读取之后,输入缓冲区中残留的字符串是:5[回车],所以 c i n > > c h cin>>ch cin>>ch 5 5 5 读取并存入 c h ch ch,打印输入并输出 5 5 5

如果没有 cin.clear()cin>>ch 将读取失败, c h ch ch 为空

输出结果:

在这里插入图片描述



三.取消同步流

在算法题中,涉及到大量数据读入的时候,通常避免使用cin读入数据而改用scanf,原因是scanf相对速度更快

🚀解决方法:

  1. c i n cin cin 效率低的原因一是在于默认 C++ 中的 c i n cin cin (输入流对象) 与 C语言中的 s t d i n stdin stdin (输入流指针) 总是保持同步, c i n cin cin 会把要输出的东西先存入缓冲区,进而消耗时间,通过关闭同步,可以有效提高 c i n cin cin 效率,可以用 sync_with_stdio(0) 实现异步

  2. 默认情况下 c i n cin cin 绑定的是 c o u t cout cout,每次执行 << 的时候都要调用 f l u s h flush flush,当 cout 的缓冲区刷新的时候,cin 的缓冲区由于绑定的存在也同时进行了刷新,进而增加 I / O I/O I/O 负担,因此可以通过 tie(0) 解绑

关闭同步后, c i n cin cin 的速度将与 s c a n f scanf scanf 相差无几:

int main(){
    //取消同步流
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

    //其余操作不变
    int x;
    cin >> x;
    cout << x;

    system("pause");
    return 0;
}

🔺注意

  • 关闭同步之后请不要同时使用C与C++的读写方式,避免不必要的麻烦,如 printf(),scanf(),gets(),pus(),getchar() 不要与 cin,cout 共用
  • c o u t cout cout 中不要使用 e n d l endl endl,每次使用 e n d l endl endl,都要 f l u s h flush flush 缓冲区,造成大量时间耗费
    ch$ 为空

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发组件之Text

一、文本组件Text加载主要有两种方式&#xff1a; 1、直接写的文本 Text(你好&#xff0c;世界) 2、从本地资源读取的文本 Text($r(app.string.xxxx)) 二、文本国际化 其中&#xff0c;文本设置可以支持国际化。可以通过对本地文本读取支持国际化。在需要设置国际化的文本…

在AWS Lambda上部署EC2编译的FFmpeg工具——自定义层的方案

大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 环境准备2.1 创建EC2实例 3 编译FFmpeg3.1 连接EC2 4 编译5 上传S3存储桶5.1 创建S3桶5.2 创建IAM策略5.3 创建IAM角色5.4 EC2关联角色5.5 修改桶策略5.6 打包并上传 6 创建Lamb…

【vue3】尚硅谷vue3学习笔记

Vue3快速上手 1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/release…

记录 | ubuntu监控cpu频率、温度等

ubuntu监控cpu频率、温度等 采用 i7z 进行监控&#xff0c;先安装&#xff1a; sudo apt install i7z -ysudo i7z

vue3 自己写一个月的日历

效果图 代码 <template><div class"monthPage"><div class"calendar" v-loading"loading"><!-- 星期 --><div class"weekBox"><div v-for"(item, index) in dayArr" :key"index&q…

5G+AI开花结果,助力智慧安检落地

“请带包的乘客过机安检&#xff01;”&#xff0c;深圳地铁、腾讯共同打造的5GAI智慧安检辅助系统亮相福田枢纽站&#xff0c;进一步解放了人力&#xff0c;提高安检效率&#xff0c;为交通安全保驾护航&#xff0c;让智慧出行成为现实。 传统的安检设备均为人工肉眼辨识&…

【Vue+Python】—— 基于Vue与Python的图书管理系统

文章目录 &#x1f356; 前言&#x1f3b6;一、项目描述✨二、项目展示&#x1f3c6;三、撒花 &#x1f356; 前言 【VuePython】—— 基于Vue与Python的图书管理系统 &#x1f3b6;一、项目描述 描述&#xff1a; 本项目为《基于Vue与Python的图书管理系统》&#xff0c;项目…

Java第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类&#xff0c;用户只要创建这些类的对象&#xff0c;使用相应的方法&#xff0c;即使不具备有关的网络支持&#xff0c;也可 以编写出高质量的网络…

手把手带你创建HAL版本MDK工程模板

手把手带你创建HAL版本MDK工程模板 如何快速开发 STM32 项目&#xff1f;我们总不能每次开发一个项目就搭建一次工程&#xff0c;这样效率太低了。 通常我们会使用一个模板工程&#xff0c;需要开发新项目的时候拿出来添加一些对应的模块及业务代码&#xff0c;一个项目就开发…

BearPi Std 板从入门到放弃 - 先天篇(1)(阶段 : 智慧城市 - 智慧路灯)

简介 对前面几篇整合, 做个小小汇总试验, 使用BearPi E53_SC1扩展板主芯片: STM32L431RCT6串口: Usart1扩展板与主板连接: I2C : I2C1 (光照强度传感器&#xff1a;BH1750)LED: PB9步骤 创建项目 参考 BearPi Std 板从入门到放弃 - 引气入体篇&#xff08;1&#xff09;(由零创…

LabelImg的使用及注意事项

LabelImg是一款开源的图像标注工具&#xff0c;它主要用于标注目标检测、语义分割和图像分类等深度学习中需要的数据集。通过使用LabelImg&#xff0c;用户可以快速、准确地为图片中的目标添加标注信息&#xff0c;从而建立数据集。 使用步骤&#xff1a; 下载LabelImg&#x…

word中,文本框如何跨页?

我们经常使用word编辑一些文档&#xff0c;文档中往往会有一些比较大的文本框&#xff0c;需要跨多页&#xff0c;我们可以使用本文章中的方法&#xff0c;将文本框连接在一起&#xff0c;是的内容自动跨页。 在文字中插入两个文本框如下图&#xff1a; 将内容放到第一个文本框…

基于SpringBoot的大学活动平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着互联网技术的不断…

Kotlin:内置函数let、also、with、run、apply

前言 在Kotlin中&#xff0c;有一些用于扩展 & 方便开发者编码的内置函数&#xff0c;能大大提高开发者的开发效率。今天&#xff0c;我将主要讲解的是&#xff1a; let函数also函数with函数run函数apply函数 基础知识&#xff1a;接口回调中Lambda使用 在Kotlin中可使用…

Carla自动驾驶仿真六:pygame多个车辆摄像头画面拼接

此文章主要介绍carla前后左右摄像头画面拼接到pygame上 文章目录 前言一、要点分析二、完整代码三、拼接效果四、总结 前言 1、使用carla做仿真测试或者开发时&#xff0c;如果能够将车辆周边的画面拼接并渲染&#xff0c;可以直观地查看周围地环境&#xff0c;便于调试。本文…

SpringBoot 自动装配原理详解

什么是 SpringBoot 自动装配&#xff1f; 我们现在提到自动装配的时候&#xff0c;一般会和 Spring Boot 联系在一起。但是&#xff0c;实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上&#xff0c;通过 SPI 的方式&#xff0c;做了进一步优化。 Spr…

社区分享|简米Ping++基于MeterSphere开展异地测试协作

上海简米网络科技有限公司&#xff08;以下简称为“简米”&#xff09;是国内开放银行服务商&#xff0c;高新技术企业&#xff0c;中国支付清算协会会员单位。自2014年成立至今&#xff0c;简米长年聚焦金融科技领域&#xff0c;通过与银行、清算组织等金融机构合作&#xff0…

python爬虫学习-批量爬取图片

python爬虫学习-批量爬取图片 爬虫步骤爬取前十页图片到本地根据页码获取网络源码使用xpath解析网页解析网页并下载图片主函数如下 爬取的网站为站长素材&#xff08;仅做学习使用&#xff09; 爬取的目标网站为 https://sc.chinaz.com/tupian/qinglvtupian.html如果爬取多页&…

【ArcGIS Pro微课1000例】0051:创建数据最小几何边界范围(点、线、面数据均可)

本实例为专栏系统文章:创建点数据最小几何边界(范围),配套案例数据,持续同步更新! 文章目录 一、工具介绍二、实战演练三、注意事项一、工具介绍 创建包含若干面的要素类,用以表示封闭单个输入要素或成组的输入要素指定的最小边界几何。 工具界面及参数如下所示: 核心…

Python Reflex框架全攻略:手把手教你打造个性化全栈应用!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Reflex框架是一款专注于全栈开发的现代 JavaScript 框架&#xff0c;它强调响应式编程和简化复杂性&#xff0c;为开发者提供了构建动态且高效的全栈应用的工具。 Reflex框架是为了解决传统全栈开发中的一些挑战…