C/C++之输入输出

文章目录

    • 一.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);      //100printf("%5d\n", a);     //  100printf("%05d\n", a);    //00100printf("%.2d\n", a);    //100.00return 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.010000printf("%.3f\n", a);   //2.010printf("%10f\n", a);   //  2.010000printf("%10.3f\n", a); //     2.010double b=5.01;printf("%lf\n", b);    //5.010000printf("%.3lf\n", b);  //5.010return 0;
}

iii.字符 & 字符串

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

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

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

代码实现:

#include<stdio.h>
int main()
{char a = 'A';printf("%c\n", a);  //Aconst 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 2printf("%d,%d\n", a, b);    //1,2return 0;
}

ii.浮点数

代码实现:

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

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

代码实现:

#include<stdio.h>
int main(){char e, f;scanf("%c %c", &e, &f);     //a bprintf("%c,%c\n", e, f);    //a,breturn 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);       //00010printf("%.*f\n", 2, 10.12345); //10.12printf("%*.*f\n", 5, 1, 10.0); // 10.0return 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 20printf("%d", num);      //20return 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 worldprintf("%d",k);                   //6return 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); //abcdprintf("%d\n", count);      //4return 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);    //123abcprintf("%s\n", number);     //123return 0;
}//2
#include <stdio.h>
int main() {char letters[20];scanf("%[a-zA-Z]", letters);    //abc121efgprintf("%s\n", letters);        //abcreturn 0;
}//3
#include<stdio.h>
int main(){char s0[15];scanf("%[^\n]", s0);    //123abc abcprintf("%s", s0);       //123abc abcreturn 0;
}//4
#include <stdio.h>int main() {char str[20];scanf("%10[^=]", str);  //123=abcprintf("%s\n", str);    //123return 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
a97 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中,注意结束符为默认Entercin.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.mzph.cn/news/210101.shtml

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

相关文章

Proteus仿真--串口发送数据到2片8×8点阵屏滚动显示

本文介绍2片88点阵屏滚动显示设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 仿真运行视频 Proteus仿真--1602LCD显示电话拨号键盘按键实验&#xff08;仿真文件程序&#xff09; 附完整Proteus仿真资料代码资料 链接&#xff1a;https://pan.baidu…

使用C语言操作kafka ---- librdkafka

1 安装librdkafka git clone https://github.com/edenhill/librdkafka.git cd librdkafka git checkout v1.7.0 ./configure make sudo make install sudo ldconfig 在librdkafka的examples目录下会有示例程序。比如consumer的启动需要下列参数 ./consumer <broker> &…

一对一聊天程序

package untitled1.src;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.*;public class MyServer extends JFrame{private ServerSocket server; // 服务器套接字pri…

【漏洞复现】华脉智联指挥调度平台/xml_edit/fileread.php文件读取漏洞

Nx01 产品简介 深圳市华脉智联科技有限公司&#xff0c;融合通信系统将公网集群系统、专网宽带集群系统、不同制式、不同频段的短波/超短波对讲、模拟/数字集群系统、办公电话系统、广播系统、集群单兵视频、视频监控系统、视频会议系统等融为一体&#xff0c;集成了专业的有线…

第一课【习题】HarmonyOS应用/元服务上架

元服务发布的国家与地区仅限于“中国大陆” 编译打包的软件包存放在项目目录build > outputs > default下 创建应用时&#xff0c;应用包名需要和app.json5或者config.json文件中哪个字段保持一致&#xff1f; 发布应用时需要创建证书&#xff0c;证书类型选择什么…

web前端实现LED功能、液晶显示时间、数字

MENU 效果演示html部分JavaScript部分css部分 效果演示 html部分 <div id"app"><!-- 页面 --><div class"time-box"><!-- 时 --><div class"house-box"><bit-component :num"houseTem"></bit…

使用cmake构建Qt6.6的qt quick项目,添加应用程序图标的方法

最近&#xff0c;在学习qt的过程中&#xff0c;遇到了一个难题&#xff0c;不知道如何给应用程序添加图标&#xff0c;按照网上的方法也没有成功&#xff0c;后来终于自己摸索出了一个方法。 1、准备一张图片作为图标&#xff0c;保存到工程目录下面&#xff0c;如logo.ico。 …

mybatis的快速入门以及spring boot整合mybatis(二)

需要用到的SQL脚本&#xff1a; CREATE TABLE dept (id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT ID, 主键,name varchar(10) NOT NULL UNIQUE COMMENT 部门名称,create_time datetime DEFAULT NULL COMMENT 创建时间,update_time datetime DEFAULT NULL COMMENT 修改…

低多边形建筑3D模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

树莓派CSI摄像头在新系统(23年12月)中的不用设置了,没有开关,也没有raspistill

网上都是老信息&#xff0c;用的raspistill命令&#xff0c;至少新系统没有这个东西了&#xff0c;也不会在sudo raspi-config里面也没有摄像头的开关了。 ls /dev/video* 能看到摄像头video0&#xff0c;但是vcgencmd get_camera supported0&#xff0c; detected0&#xff0…

CPU的三大调度

计算机系统中的调度可以分为不同层次&#xff0c;包括作业调度、内存调度和进程调度。这三种调度分别负责管理和优化计算机系统中不同层次的资源分配和执行顺序。 高级调度&#xff1a;作业调度&#xff08;Job Scheduling&#xff09;&#xff1a; 作业调度是指对提交到计算…

了解c++11中的新增

一&#xff0c;统一的初始化列表 在引入c11后&#xff0c;我们得出计划都可以用初始化列表进行初始化。 C11 扩大了用大括号括起的列表 ( 初始化列表 ) 的使用范围&#xff0c;使其可用于所有的内置类型和用户自 定义的类型&#xff0c; 使用初始化列表时&#xff0c;可添加等…

Vue学习计划-Vue2--VueCLi(二)vuecli脚手架创建的项目内部主要文件分析

1. 文件分析 1. 补充&#xff1a; 什么叫单文件组件&#xff1f; 一个文件中只有一个组件 vue-cli创建的项目中&#xff0c;.vue的文件都是单文件组件&#xff0c;例如App.vue 2. 进入分析 1. package.json: 项目依赖配置文件&#xff1a; 如图&#xff0c;我们说主要的属性…

性能测试经典面试题(带答案)!

概述一下性能测试流程&#xff1f; 1.分析性能需求。挑选用户使用最频繁的场景来测试。确定性能指标&#xff0c;比如&#xff1a;事务通过率 为100%&#xff0c;TOP99%是5秒&#xff0c;最大并发用户为1000人&#xff0c;CPU和内存的使用率在70%以下2.制定性能测试计划&…

Ubuntu20.04使用cephadm部署ceph集群

文章目录 Requirements环境安装Cephadm部署Ceph单机集群引导&#xff08;bootstrap&#xff09;建立新集群 管理OSD列出可用的OSD设备部署OSD删除OSD 管理主机列出主机信息添加主机到集群从集群中删除主机 部署Ceph集群 Cephadm通过在单个主机上创建一个Ceph单机集群&#xff0…

【EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)

第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&#xff09; 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第二届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2023&…

Verilog基础:寄存器输出的两种风格

相关文章 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 Verilog中的寄存器操作一般指的是那些对时钟沿敏感而且使用非阻塞赋值的操作。例如状态机中的状态转移&#xff0c;实际上就是一种寄存器操作&#xff0c;因为这相…

听GPT 讲Rust源代码--src/tools(10)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_is_empty_from_len.rs 在Rust源代码中&#xff0c;rust-analyzer是一个Rust语言的IDE插件和代码分析器。其中&#xff0c;generate_is_empty_from_len.rs是rust-analyzer中的一个处理程序&#x…

CentOS7安装Docker,DockerCompose

安装docker 1、卸载docker 查看是否有旧版本docker docker info首先检测我们虚拟机是否已经安装过Docker&#xff0c;如果安装则需卸载。代码中“\”符号为换行符&#xff0c;相当于一行内容分为多行&#xff0c;这是检测docker的各种组件 yum remove docker \docker-clien…

VGG模型

概念&#xff1a; CNN感受野 在卷积神经网络中&#xff0c;决定某一层输出结果中的一个元素所对应的输入层的区域大小&#xff0c;被称作感受野&#xff08;receptive field&#xff09;。通俗的解释是&#xff0c;输出feature map上的一个单元对应输入层上的区域大小。 VGG…