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

[c语言日寄]数据输入

在这里插入图片描述

【作者主页】siy2333
【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是进阶开发者,这里都能满足你的需求!
【食用方法】1.根据题目自行尝试 2.查看基础思路完善题解 3.学习拓展算法
【Gitee链接】资源保存在我的Gitee仓库:https://gitee.com/siy2333/study


文章目录

    • 前言
    • 题目引入
    • 知识点分析
      • 1\. scanf函数的基本用法
      • 2\. 格式说明符
      • 3\. 输入缓冲区
      • 4\. 输入验证
      • 5\. 输入多种数据类型
      • 6\. 输入字符串
      • 7\. 输入字符
    • 注意事项
      • 1\. 输入数据格式
      • 2\. 输入缓冲区溢出
      • 3\. 输入验证
      • 4\. 输入多种数据类型
      • 5\. 输入字符串
      • 6\. 输入字符
    • 拓展应用
      • 1\. 输入学生信息
      • 2\. 输入多个学生信息
      • 3\. 输入带空格的字符串
      • 4\. 输入带验证的数据
      • 5\. 输入带默认值的数据
    • 总结


前言

在C语言的世界里,数据输入是程序与用户交互的重要环节。无论是简单的计算器程序,还是复杂的系统软件,都需要从用户那里获取数据,然后进行处理和输出。今天,我们就通过一个简单的程序来深入探讨数据输入的实现方法、相关知识点以及一些拓展应用。


题目引入

下面是一个简单的C语言程序,它的功能是计算两个整数的和:

#include <stdio.h>int main()
{int a, b, sum;printf("请输入两个整数:");scanf("%d %d", &a, &b);sum = a + b;printf("两个整数的和为:%d\n", sum);return 0;
}

这个程序的运行过程如下:

  1. 程序首先通过printf函数提示用户输入两个整数。
  2. 用户在终端输入两个整数,例如3 5,然后按下回车键。
  3. 程序通过scanf函数读取用户输入的两个整数,并将它们分别存储到变量ab中。
  4. 程序计算两个整数的和,并将结果存储到变量sum中。
  5. 最后,程序通过printf函数输出计算结果。

这个程序的核心功能是通过scanf函数实现数据输入。scanf函数是C语言中用于从标准输入(通常是键盘)读取数据的标准函数。它可以根据用户指定的格式,读取不同类型的数据,并将它们存储到相应的变量中。

知识点分析

1. scanf函数的基本用法

scanf函数是C语言中用于输入数据的主要函数。它的基本语法如下:

int scanf(const char *format, ...);
  • format是一个格式字符串,用于指定输入数据的格式。例如,%d表示读取一个整数,%f表示读取一个浮点数,%s表示读取一个字符串。
  • ...是可变参数列表,用于指定存储输入数据的变量地址。

scanf函数返回成功读取的数据项数。例如,如果scanf函数成功读取了两个整数,它将返回2

在前面的程序中,scanf("%d %d", &a, &b);表示从标准输入读取两个整数,并将它们分别存储到变量ab中。%d是格式说明符,表示读取整数。&a&b是变量ab的地址,scanf函数需要这些地址来存储输入的数据。

2. 格式说明符

scanf函数支持多种格式说明符,用于读取不同类型的数据。以下是一些常见的格式说明符:

  • %d:读取一个十进制整数。
  • %f:读取一个单精度浮点数。
  • %lf:读取一个双精度浮点数。
  • %c:读取一个字符。
  • %s:读取一个字符串,直到遇到空白字符(空格、制表符或换行符)为止。
  • %u:读取一个无符号整数。
  • %x%X:读取一个十六进制整数。

例如,以下代码可以读取一个整数、一个浮点数和一个字符串:

int num;
float f;
char str[100];
scanf("%d %f %s", &num, &f, str);

3. 输入缓冲区

在C语言中,输入数据通常存储在输入缓冲区中。输入缓冲区是一个内存区域,用于临时存储从标准输入设备(通常是键盘)读取的数据。当用户输入数据并按下回车键时,数据被存储到输入缓冲区中,然后由scanf函数或其他输入函数读取。

输入缓冲区的存在可能会导致一些问题。例如,如果用户输入的数据比预期的多,多余的字符可能会留在输入缓冲区中,影响后续的输入操作。为了避免这种情况,可以在每次输入后清空输入缓冲区。

以下是一个清空输入缓冲区的函数:

void clear_input_buffer()
{int c;while ((c = getchar()) != '\n' && c != EOF) { }
}

这个函数通过getchar函数逐个读取输入缓冲区中的字符,直到遇到换行符或文件结束符为止。这样可以清空输入缓冲区,避免多余的字符影响后续的输入操作。

4. 输入验证

在实际应用中,输入验证是非常重要的。用户可能会输入错误的数据类型或格式,导致程序运行出错。为了避免这种情况,可以在输入后对数据进行验证。

以下是一个简单的输入验证示例:

int num;
printf("请输入一个整数:");
while (scanf("%d", &num) != 1) {printf("输入无效,请重新输入一个整数:");clear_input_buffer();
}

在这个示例中,scanf("%d", &num)尝试从输入缓冲区读取一个整数。如果输入的数据不是整数,scanf函数将返回0,表示没有成功读取任何数据。在这种情况下,程序会提示用户重新输入,并清空输入缓冲区。

5. 输入多种数据类型

在实际应用中,程序可能需要同时输入多种数据类型。例如,一个程序可能需要用户输入一个整数、一个浮点数和一个字符串。在这种情况下,可以使用多个scanf函数,也可以使用一个scanf函数和多个格式说明符。

以下是一个示例:

int num;
float f;
char str[100];
printf("请输入一个整数、一个浮点数和一个字符串:");
scanf("%d %f %s", &num, &f, str);

在这个示例中,scanf("%d %f %s", &num, &f, str)尝试从输入缓冲区读取一个整数、一个浮点数和一个字符串。如果输入的数据格式正确,scanf函数将返回3,表示成功读取了三个数据项。

6. 输入字符串

在C语言中,字符串是一个以空字符\0结尾的字符数组。输入字符串时,需要注意以下几点:

  • 使用%s格式说明符时,scanf函数会读取一个字符串,直到遇到空白字符(空格、制表符或换行符)为止。因此,如果需要输入包含空格的字符串,可以使用%[^\n]格式说明符,它会读取一行字符串,直到遇到换行符为止。
  • 输入字符串时,需要确保字符串的长度不超过数组的大小,以避免缓冲区溢出。

以下是一个示例:

char str[100];
printf("请输入一个字符串:");
scanf("%[^\n]", str);

在这个示例中,scanf("%[^\n]", str)会读取一行字符串,直到遇到换行符为止。这样可以输入包含空格的字符串。

7. 输入字符

在C语言中,字符是一个单个的字符,使用%c格式说明符可以读取一个字符。需要注意的是,%c格式说明符会读取输入缓冲区中的下一个字符,包括空白字符。因此,如果需要读取一个非空白字符,可以在%c格式说明符前加一个空格,例如% c

以下是一个示例:

char ch;
printf("请输入一个字符:");
scanf(" %c", &ch);

在这个示例中,scanf(" %c", &ch)会跳过输入缓冲区中的空白字符,然后读取下一个非空白字符。

注意事项

1. 输入数据格式

在使用scanf函数时,需要确保输入的数据格式与格式说明符一致。如果输入的数据格式不正确,scanf函数将无法正确读取数据,可能会导致程序运行出错。

例如,如果程序需要输入一个整数和一个浮点数,格式说明符为%d %f,用户输入的数据应该是3 5.6,而不是3,5.63 5,6。如果输入的数据格式不正确,scanf函数将无法正确读取数据。

2. 输入缓冲区溢出

在输入字符串时,需要注意输入缓冲区溢出的问题。如果输入的字符串长度超过了数组的大小,可能会导致缓冲区溢出,从而引发安全问题。

为了避免缓冲区溢出,可以在%s格式说明符后加一个宽度限制,例如%99s,它会限制输入的字符串长度不超过99个字符。

以下是一个示例:

char str[100];
printf("请输入一个字符串:");
scanf("%99s", str);

在这个示例中,scanf("%99s", str)会限制输入的字符串长度不超过99个字符,避免缓冲区溢出。

3. 输入验证

在实际应用中,输入验证是非常重要的。用户可能会输入错误的数据类型或格式,导致程序运行出错。为了避免这种情况,可以在输入后对数据进行验证。

以下是一个简单的输入验证示例:

int num;
printf("请输入一个整数:");
while (scanf("%d", &num) != 1) {printf("输入无效,请重新输入一个整数:");clear_input_buffer();
}

在这个示例中,scanf("%d", &num)尝试从输入缓冲区读取一个整数。如果输入的数据不是整数,scanf函数将返回0,表示没有成功读取任何数据。在这种情况下,程序会提示用户重新输入,并清空输入缓冲区。

4. 输入多种数据类型

在实际应用中,程序可能需要同时输入多种数据类型。例如,一个程序可能需要用户输入一个整数、一个浮点数和一个字符串。在这种情况下,可以使用多个scanf函数,也可以使用一个scanf函数和多个格式说明符。

以下是一个示例:

int num;
float f;
char str[100];
printf("请输入一个整数、一个浮点数和一个字符串:");
scanf("%d %f %s", &num, &f, str);

在这个示例中,scanf("%d %f %s", &num, &f, str)尝试从输入缓冲区读取一个整数、一个浮点数和一个字符串。如果输入的数据格式正确,scanf函数将返回3,表示成功读取了三个数据项。

5. 输入字符串

在C语言中,字符串是一个以空字符\0结尾的字符数组。输入字符串时,需要注意以下几点:

  • 使用%s格式说明符时,scanf函数会读取一个字符串,直到遇到空白字符(空格、制表符或换行符)为止。因此,如果需要输入包含空格的字符串,可以使用%[^\n]格式说明符,它会读取一行字符串,直到遇到换行符为止。
  • 输入字符串时,需要确保字符串的长度不超过数组的大小,以避免缓冲区溢出。

以下是一个示例:

char str[100];
printf("请输入一个字符串:");
scanf("%[^\n]", str);

在这个示例中,scanf("%[^\n]", str)会读取一行字符串,直到遇到换行符为止。这样可以输入包含空格的字符串。

6. 输入字符

在C语言中,字符是一个单个的字符,使用%c格式说明符可以读取一个字符。需要注意的是,%c格式说明符会读取输入缓冲区中的下一个字符,包括空白字符。因此,如果需要读取一个非空白字符,可以在%c格式说明符前加一个空格,例如% c

以下是一个示例:

char ch;
printf("请输入一个字符:");
scanf(" %c", &ch);

在这个示例中,scanf(" %c", &ch)会跳过输入缓冲区中的空白字符,然后读取下一个非空白字符。

拓展应用

1. 输入学生信息

假设我们需要输入一个学生的信息,包括学号、姓名、年龄和成绩。我们可以定义一个结构体来存储学生的信息,然后使用scanf函数输入这些信息。

以下是一个示例:

#include <stdio.h>
#include <string.h>struct student {int id;char name[50];int age;float score;
};int main() {struct student stu;printf("请输入学生信息(学号 姓名 年龄 成绩):");scanf("%d %s %d %f", &stu.id, stu.name, &stu.age, &stu.score);printf("学生信息如下:\n");printf("学号:%d\n", stu.id);printf("姓名:%s\n", stu.name);printf("年龄:%d\n", stu.age);printf("成绩:%.2f\n", stu.score);return 0;
}

在这个示例中,我们定义了一个student结构体,它包含学生的学号、姓名、年龄和成绩。然后,我们使用scanf函数输入这些信息,并将它们存储到结构体变量stu中。最后,我们使用printf函数输出学生的信息。

2. 输入多个学生信息

假设我们需要输入多个学生的信息,并将它们存储到一个结构体数组中。我们可以使用循环来实现这个功能。

以下是一个示例:

#include <stdio.h>
#include <string.h>struct student {int id;char name[50];int age;float score;
};int main() {struct student students[3];printf("请输入3个学生的信息(学号 姓名 年龄 成绩):\n");for (int i = 0; i < 3; i++) {printf("学生%d:", i + 1);scanf("%d %s %d %f", &students[i].id, students[i].name, &students[i].age, &students[i].score);}printf("学生信息如下:\n");for (int i = 0; i < 3; i++) {printf("学生%d:\n", i + 1);printf("学号:%d\n", students[i].id);printf("姓名:%s\n", students[i].name);printf("年龄:%d\n", students[i].age);printf("成绩:%.2f\n", students[i].score);}return 0;
}

在这个示例中,我们定义了一个student结构体数组students,它包含3个学生的信息。然后,我们使用循环输入每个学生的信息,并将它们存储到结构体数组中。最后,我们使用循环输出每个学生的信息。

3. 输入带空格的字符串

在实际应用中,用户可能需要输入包含空格的字符串,例如地址或描述信息。在这种情况下,可以使用%[^\n]格式说明符来读取一行字符串。

以下是一个示例:

#include <stdio.h>
#include <string.h>struct student {int id;char name[50];int age;char address[100];
};int main() {struct student stu;printf("请输入学生信息(学号 姓名 年龄 地址):\n");scanf("%d %s %d %[^\n]", &stu.id, stu.name, &stu.age, stu.address);printf("学生信息如下:\n");printf("学号:%d\n", stu.id);printf("姓名:%s\n", stu.name);printf("年龄:%d\n", stu.age);printf("地址:%s\n", stu.address);return 0;
}

在这个示例中,我们定义了一个student结构体,它包含学生的学号、姓名、年龄和地址。然后,我们使用scanf函数输入这些信息,并将它们存储到结构体变量stu中。其中,%[^\n]格式说明符用于读取地址信息,它会读取一行字符串,直到遇到换行符为止。

4. 输入带验证的数据

在实际应用中,输入验证是非常重要的。用户可能会输入错误的数据类型或格式,导致程序运行出错。为了避免这种情况,可以在输入后对数据进行验证。

以下是一个示例:

#include <stdio.h>
#include <string.h>struct student {int id;char name[50];int age;float score;
};int main() {struct student stu;printf("请输入学生信息(学号 姓名 年龄 成绩):\n");while (scanf("%d %s %d %f", &stu.id, stu.name, &stu.age, &stu.score) != 4) {printf("输入无效,请重新输入学生信息(学号 姓名 年龄 成绩):\n");clear_input_buffer();}printf("学生信息如下:\n");printf("学号:%d\n", stu.id);printf("姓名:%s\n", stu.name);printf("年龄:%d\n", stu.age);printf("成绩:%.2f\n", stu.score);return 0;
}

在这个示例中,scanf("%d %s %d %f", &stu.id, stu.name, &stu.age, &stu.score)尝试从输入缓冲区读取一个整数、一个字符串、一个整数和一个浮点数。如果输入的数据格式不正确,scanf函数将返回一个小于4的值,表示没有成功读取所有数据项。在这种情况下,程序会提示用户重新输入,并清空输入缓冲区。

5. 输入带默认值的数据

在实际应用中,有些数据可能有默认值。如果用户没有输入这些数据,程序可以使用默认值。例如,假设学生的年龄有默认值18,如果用户没有输入年龄,程序可以使用默认值18

以下是一个示例:

#include <stdio.h>
#include <string.h>struct student {int id;char name[50];int age;float score;
};int main() {struct student stu;printf("请输入学生信息(学号 姓名 [年龄] 成绩):\n");scanf("%d %s", &stu.id, stu.name);if (scanf("%d", &stu.age) != 1) {stu.age = 18; // 默认年龄为18clear_input_buffer();}scanf("%f", &stu.score);printf("学生信息如下:\n");printf("学号:%d\n", stu.id);printf("姓名:%s\n", stu.name);printf("年龄:%d\n", stu.age);printf("成绩:%.2f\n", stu.score);return 0;
}

在这个示例中,我们首先使用scanf("%d %s", &stu.id, stu.name)读取学生的学号和姓名。然后,我们尝试使用scanf("%d", &stu.age)读取学生的年龄。如果用户没有输入年龄,scanf函数将返回0,表示没有成功读取年龄。在这种情况下,程序会将年龄设置为默认值18,并清空输入缓冲区。最后,我们使用scanf("%f", &stu.score)读取学生的成绩。

总结

数据输入是C语言程序与用户交互的重要环节。scanf函数是C语言中用于输入数据的主要函数,它可以根据用户指定的格式,读取不同类型的数据,并将它们存储到相应的变量中。在实际应用中,需要注意输入数据格式、输入缓冲区溢出和输入验证等问题。通过合理使用scanf函数和相关技术,可以实现高效、安全和友好的数据输入功能。

关注窝,每三天至少更新一篇优质c语言题目详解~

[专栏链接QwQ] :⌈c语言日寄⌋CSDN
[关注博主ava]:siy2333
感谢观看~ 我们下次再见!!

相关文章:

[c语言日寄]数据输入

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...

CMake-环境变量介绍

文章目录 作用域获取环境变量初始化查看特殊的环境变量 环境变量类似普通变量&#xff0c;但也有些不同&#xff0c;如下&#xff1a; 作用域 在一个CMake进程中环境变量具有全局作用域 获取环境变量 使用ENV操作符获取环境变量&#xff0c;例如$ENV{<name>}&#xff…...

数据预处理流程与关键步骤解析

数据预处理流程图&#xff08;Markdown格式&#xff09;&#xff1a; #mermaid-svg-b3mhJcpFWaJ9qMZ8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-b3mhJcpFWaJ9qMZ8 .error-icon{fill:#552222;}#mermaid-svg-b3m…...

字节DAPO算法:改进DeepSeek的GRPO算法-解锁大规模LLM强化学习的新篇章(代码实现)

DAPO算法&#xff1a;解锁大规模LLM强化学习的新篇章 近年来&#xff0c;大规模语言模型&#xff08;LLM&#xff09;在推理任务上的表现令人瞩目&#xff0c;尤其是在数学竞赛&#xff08;如AIME&#xff09;和编程任务中&#xff0c;强化学习&#xff08;RL&#xff09;成为…...

计算机操作系统(四) 操作系统的结构与系统调用

计算机操作系统&#xff08;四&#xff09; 操作系统的结构与系统调用 前言一、操作系统的结构1.1 简单结构1.2 模块化结构1.3 分层化结构1.4 微内核结构1.5 外核结构 二、系统调用1.1 系统调用的基本概念1.2 系统调用的类型 总结&#xff08;核心概念速记&#xff09;&#xf…...

Docker安装,并pullMySQL和redis

卸载原Docker 您的 Linux 发行版可能提供非官方的 Docker 软件包&#xff0c;这可能与 Docker 提供的官方软件包冲突。在安装 Docker Engine 正式版之前&#xff0c;您必须先卸载这些软件包。 sudo dnf remove docker \ docker-client \ docker-client-latest \ docker-common…...

第三天 开始Unity Shader的学习之旅之第二天的补充

Unity Shader的学习笔记 第三天 开始Unity Shader的学习之旅之第二天的补充 文章目录 Unity Shader的学习笔记前言一、Unity 提供的内置文件和变量1. 内置的包含文件2. UnityCG.cginc中的常用结构体 二、Unity 提供的Cg/HLSL语义1. 从应用阶段传递模型数据给顶点着色器时Unity…...

DeepSeek技术架构解析:MoE混合专家模型

一、前言 2025年初&#xff0c;DeepSeek V3以557万美元的研发成本&#xff08;仅为GPT-4的1/14&#xff09;和开源模型第一的排名&#xff0c;在全球AI领域掀起波澜。其核心创新之一——混合专家模型&#xff08;Mixture of Experts, MoE&#xff09;的优化设计&#xff0c;不…...

【正点原子】AI人工智能深度学习(RV1126/RK3568/RK3588)-第1期 准备篇

1.1SDK编译后的目录 1、真正的根文件系统镜像存放目录 2、非必须&#xff0c;负责系统升级等&#xff0c;kerneldtbramdisk组成的根文件系统 1.2文件系统分区 1.3开机自启动 1.6设置静态ip地址 1.8RKMedia框架/编译测试SDK自带RKMedia例程 出厂系统以下内容都是默认…...

PCB沉金和镀金的区别

本文通过多方面角度对比两者的区别。 一.成本和工艺复杂度 沉金&#xff1a;成本较高&#xff0c;制作过程中消耗的金盐多。工艺的参数控制上较严格&#xff0c;需防止“黑盘效应”。 黑盘效应&#xff1a;是指在PCB&#xff08;印刷电路板&#xff09;的化学镀镍金&#xf…...

靶场(十五)---小白心得思路分析---LaVita

启程&#xff1a; 扫描端口&#xff0c;发现开放22&#xff0c;80端口&#xff0c;发现ws.css可能存在exp&#xff0c;经查发现无可利用的exp PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5deb11u2 (protocol 2.0) | ssh-hostkey: | 3072 c9…...

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek 通义万相制作AI视频流程 4.1 D…...

Pi型隶属函数(Π-shaped Membership Function)的详细介绍及python示例

我们前文已经深度解读了三角形、梯形、高斯、S型和Z型隶属函数&#xff0c;现在转向Pi型。当然我们先简要回顾不同隶属函数的特点和曲线效果。了解每种隶属函数的特性是为了更好的应用。 一、回顾五种隶属函数的特点 1.从每种隶属函数的结构和特点角度对比。三角形隶属函数&am…...

MySQL 入门大全:常用函数

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

轻量级TLS反向代理工具TLS-reverse-proxy:打造安全通信桥梁

在数字化浪潮席卷全球的今天&#xff0c;数据隐私与传输安全已成为企业及个人的核心关切。TLS&#xff08;传输层安全协议&#xff09;作为互联网通信的"隐形卫士"&#xff0c;承担着保护数据在传输过程中不被窃取或篡改的重要使命。然而&#xff0c;对于许多传统服务…...

SpringBoot3实战(SpringBoot3+Vue3基本增删改查、前后端通信交互、配置后端跨域请求、数据批量删除(超详细))(3)

目录 一、从0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分页查询的详细教程。(博客链接) 二、实现前端与后端通信对接数据。(axios工具) &#xff08;1&#xff09;安装axios。(vue工程目录) &#xff08;2&#xff09;封装请求工具类。(request.js) <1&…...

AF3 Rotation 类解读

Rotation 类(rigid_utils 模块)是 AlphaFold3 中用于 3D旋转 的核心组件,支持两种旋转表示: 1️⃣ 旋转矩阵 (3x3) 2️⃣ 四元数 (quaternion, 4元向量) 👉 设计目标: 允许灵活选择 旋转矩阵 或 四元数 封装了常用的 旋转操作(组合、逆旋转、应用到点上等) 像 torch.…...

JVM垃圾回收笔记02-垃圾回收器

文章目录 前言1.串行(Serial 收集器/Serial Old 收集器)Serial 收集器Serial Old 收集器相关参数-XX:UseSerialGC 2.吞吐量优先(Parallel Scavenge 收集器/Parallel Old 收集器)Parallel Scavenge 收集器Parallel Old 收集器相关参数-XX:UseParallelGC ~ -XX:UseParallelOldGC-…...

Linux上位机开发实战(编写API库)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们自己编写linux上位机软件的时候&#xff0c;尽量都是通过框架库的形式来开发。这就是所谓的低耦合&#xff0c;高内聚。相似的功能、模块和算法…...

深入浅出JVM性能优化:从理论到实践

一、JVM架构与内存模型深度解析 1.1 JVM运行时数据区全景图 方法区&#xff08;元空间&#xff09;&#xff1a;存储类信息、常量池等元数据堆内存&#xff1a;对象实例存储核心区域 Young Generation&#xff08;新生代&#xff09; Eden区&#xff08;对象诞生地&#xff0…...

Redis Sentinel 详解

Redis Sentinel 详解 1. 什么是 Redis Sentinel&#xff1f;有什么用&#xff1f; Redis Sentinel&#xff08;哨兵&#xff09; 是 Redis 官方提供的高可用性解决方案&#xff0c;主要用于监控、通知和自动故障转移。当 Redis 主节点&#xff08;master&#xff09;发生故障…...

器件功耗模型原理

器件功耗模型原理 谷歌提供了一套通用的器件耗电模型和配置方案&#xff0c;先对器件进行耗电因子拆解&#xff0c;建立器件功耗模型&#xff0c;得到一个器件耗电的计算公式。通过运行时统计器件的使用数据&#xff0c;代入功耗模型&#xff0c;就可以计算出器件的功耗。例如…...

拥抱成长型思维:解锁持续进步的人生密码

我强烈推荐4本可以改变命运的经典著作&#xff1a; 《寿康宝鉴》在线阅读白话文《欲海回狂》在线阅读白话文《阴律无情》在线阅读白话文《了凡四训》在线阅读白话文 一、什么是成长型思维&#xff1f; 成长型思维&#xff08;Growth Mindset&#xff09;由斯坦福大学心理学家卡…...

Ubuntu上查看GPU使用情况并释放内存

先用nvidia-smi查看GPU当前使用情况 再用fuser 命令查找对应显卡上占用 GPU 的进程 最后查到了用kill -9强制杀掉进程&#xff08;PID&#xff09;即可...

解决思科交换机无法访问局域网外设备

问题背景 有时&#xff0c;我们需要远程连接来管理一台思科交换机&#xff0c;例如使用SSH协议。然而交换机运作在链路层&#xff0c;这就需要交换机有一个网络层地址&#xff0c;来接纳基于IP协议的远程访问请求。于是&#xff0c;我们依靠设置一个带有IP地址的交换机虚拟接口…...

Unity Shader编程】之透明物体渲染

以下是针对您提出的关于 Unity Shader 渲染 Pass 的查看方法、多个 Pass 的影响、Pass 的含义&#xff0c;以及 Unity 渲染物体的流程和处理多个透明/半透明/不透明物体的详细解答。 1. Unity Shader 渲染 Pass 的查看方法 查看 Pass 的方法 通过 Shader 代码&#xff1a; 打开…...

fopen和open 等区别是什么?文件描述符与文件描述指针区别

FILE *fp fopen(path, "w"); int fd open(path,) 1.区别 函数定义所属库返回类型fopen高级文件操作函数&#xff0c;提供缓冲机制标准 C 库 (stdio.h)FILE*&#xff08;文件指针&#xff09;open低级文件操作函数&#xff0c;直接调用系统接口Unix/Linux 系统调用…...

什么是张量计算

以下是对张量计算的详细介绍&#xff0c;结合数学、物理学及计算机科学等多领域视角&#xff1a; 一、张量的基本定义与性质 1. 张量的数学定义 张量是向量空间及其对偶空间的笛卡尔积上的多重线性映射&#xff0c;可视为多维数组或几何对象。其核心特征在于&#xff1a; 坐…...

【1】Java 零基础入门学习(小白专用)

【1】Java 零基础入门学习 &#x1f4da;博客主页&#xff1a;代码探秘者 ✨专栏&#xff1a;《JavaSe从入门到精通》 其他更新ing… ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;作者水…...

[c语言日寄]枚举类型

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...