C语言——关机小程序(有system()和strcmp()函数的知识点)

目录

📝学 / 练前预警:

  • 我们前面学习了C语言的选择和循环结构,操作符等基础知识,通过这些知识我们可以写一个关机小游戏了,如果有忘记或者没学习的可以打开下面的链接来进行学习
    C语言学习专栏🔗
  • 下面我们会写关机小程序,它涉及到以下几点:
    • cmd中进行系统的关机和取消关机(Windows的)
    • C语言程序中通过调用 系统函数system()来进行关机和取消关机
    • 学习关机和取消关机的代码
    • 学习字符比较函数 strcmp()
  • 最后我们就可以写一个完整的关机小游戏的代码了
  • 下面的关机小程序代码中这不是唯一的写法 ,我们也可以利于前面学习的goto来进行改写goto学习🔗

✍️关机小程序敲前知识学习

下列的知识学习要注意这一点:

  • 平台相关性这些是 Windows 特有的命令。 在 Linux 或 macOS 上,关机命令是不同的(例如 shutdown -h now 或 sudo poweroff)。

1️⃣cmd中关机和停止关机

我们按住win+R,再输入cmd就可以打开cmd了

  • 我们可以通过**cmd来进行操作**(通过这些命令其实是 windows 系统的命令,这些是 Windows 特有的命令。
  • shutdown -s -t 60这是一个 Windows 的关机命令。
    • shutdown主命令,用于关闭、重启或注销计算机。
    • -s关闭参数。代表"shutdown",即关闭计算机。
    • -t 60时间参数 。代表"timeout",设置执行操作前的等待时间(单位为秒)-t 60 表示在 60 秒后执行关机操作。
  • shutdown -a这是一个取消关机的命令。
    * -a中止参数。 代表"abort",用于 中止系统关闭。
  • 拓展:
    • shutdown -r -t 60重新启动计算机。
    • -r: 代表"restart",-t 60 表示计算机将在 60 秒后自动重新启动。
    • shutdown -s -t 0立即关机(等待时间为0秒)。
  • 在cmd中输入shutdown -s -t 60后会弹出来下面这个窗口,提醒你60秒后关机
  • 在cmd中输入shutdown -a后会自动取消关机,如果怕取消失败可以再次输入,相当于验证吧

2️⃣C语言中调用函数来关机

  • 权限:执行这些命令通常需要管理员权限。如果你的 C 程序没有以管理员身份运行,system("shutdown ...") 可能会失败。
  • 安全警告:在程序中嵌入关机命令时要非常小心 ,尤其是在循环或条件判断 中,否则可能导致电脑在用户不知情的情况下被关闭。
  • c 语言 程序中,你可以通过 system() 函数来调用这些系统命令,这个函数在<stdlib.h>头文件中
    • system("shutdown -s -t 60");:执行关机命令
    • system("shutdown -a");:执行取消关机命令

💻关机小程序

上面我们学习大致的语法,下面我们来写一个代码,要求如下:

  • 开始就是要在五分钟后关机
    • system("shutdown -s -t 300");
  • 取消关机要在屏幕打印"取消关机" ,并且提示 关机取消了,结束程序
  • 如果屏幕打印的不是 取消关机,则一直重复输入,直到输入为取消关机或五分钟后自动关机
  • 提示:
    • 判断是否为取消关机这一字符串可以通过strcmp() 函数来进行判断,需要头文件<string.h>

💥strcmp() 函数学习

strcmp() 是 C 语言标准库中的一个字符串比较函数,用于比较两个字符串是否相等

  • 函数原型:int strcmp(const char *str1, const char *str2);
  • 头文件:#include <string.h>
  • 函数功能:比较两个字符串 str1 和 str2 的内容(按字典顺序比较)。
  • 这个函数会有返回值,后面的关机小程序 中可以通过这个来进行条件判断是否该函数返回值为0
返回值 含义
<0 str1 小于 str2
==0 str1 等于str2
>0 str1 大于 str2
  • 英文字符和特殊字符:
  • "按字典顺序比较" 解释:
  • "字典顺序":就是英文字典中单词的排列顺序,也叫做字母顺序或词典顺序。(简单理解: 就像查英文字典一样,从A到Z依次比较。)
  • 比较规则(逐字符比较),strcmp() 的比较过程:
    • 从左到右逐个字符比较
    • 遇到第一个不同的字符就停止比较
    • 根据这两个字符的 ASCII 码值决定大小关系
  • 例子:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "hello";
    char str3[] = "world";
    char str4[] = "apple";
    
    // 比较相等的字符串
    int result1 = strcmp(str1, str2);
    printf("str1 vs str2: %d\n", result1);  // 输出: 0
    
    // 比较不相等的字符串
    int result2 = strcmp(str1, str3);
    printf("str1 vs str3: %d\n", result2);  // 输出: 负数
    
    // 比较大小
    int result3 = strcmp(str3, str4);
    printf("str3 vs str4: %d\n", result3);  // 输出: 正数
    
    return 0;
}
  • 中文字符:
  • strcmp() 对于中文字符的比较是不可靠的,因为它基于 ASCII 码值 , 而 中文是用多字节编码的
  • 下列代码除了两个字符串相等的情况下 ,输出结果可能是随机
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    // 中文字符比较示例
    printf("中文比较测试:\n");
    printf("苹果 vs 香蕉: %d\n", strcmp("苹果", "香蕉"));    // 结果不可预测(虽然编译器会出现值,但这个是不可预测的)
    printf("苹果 vs 苹果: %d\n", strcmp("苹果", "苹果"));    // 应该返回0
    printf("中国 vs 美国: %d\n", strcmp("中国", "美国"));    // 结果不可预测

    return 0;
}

所以使用这个函数建议用英文字符而非中文字符,可以自己将下面的代码优化


代码练习:

c 复制代码
#include<stdio.h>
#include<stdlib.h>		// 包含 system() 函数
#include<string.h>		// 包含strcmp() 函数
/*
* 关机小程序是可以通过对系统的控制来进行电脑的关机以及停止关机
* 相当于一个小游戏,五分钟内循环输入字符串,直到遇到关机的条件退出或者五分钟后关机结束
*/
int main()
{
	char input[20] = { 0 };		//字符数组初始化
	system("shutdown -s -t 300");		//5分钟后关机
	printf("如果要取消关机,则需要输入:取消关机\n");
	while (1)
	{
		printf("请输入:");
		scanf("%s", input);		//输入字符串保存至数组中
		if (strcmp(input, "取消关机") == 0)		//字符串比较,如果两个字符串相等,则返回0,需要头文件string.h
		{
			system("shutdown -a");
			printf("取消关机了\n");
			break;				//取消关机后就跳出循环
		}
		else
			printf("输入的信息不是取消关机的条件\n\n");
	}
	return 0;
}
  • 在运行代码时,还是会弹出这个提示框:
  • 这个自行输入的情况:

✒️小结:

以上就是关机小程序的练习,其中我们学习了调用系统函数system()和字符比较函数strcmp()

  • 感谢大家的阅读!🌹🌹
相关推荐
试试勇气3 小时前
Linux学习笔记(九)--Linux进程终止与进程等待
linux·笔记·学习
淮北4943 小时前
立创EDA学习(一、新建项目与自定义元件)
学习
Json____4 小时前
学习springBoot框架-开发一个酒店管理系统,来熟悉springboot框架语法~
spring boot·后端·学习
_Hansen_4 小时前
【C】利用GCC扩展属性进行格式化字符串的静态检查
c语言·产品安全
云知谷9 小时前
【C++基本功】C++适合做什么,哪些领域适合哪些领域不适合?
c语言·开发语言·c++·人工智能·团队开发
递归不收敛11 小时前
大语言模型(LLM)入门笔记:嵌入向量与位置信息
人工智能·笔记·语言模型
冷雨夜中漫步11 小时前
高级系统架构师笔记——数据库设计基础知识(5)Armstrong公理系统、无损连接和有损连接
笔记·系统架构
deng-c-f12 小时前
Linux C/C++ 学习日记(28):KCP协议(四):如何实现更复杂的业务:将连接状态的管理进行封装,用户只需实现发送、接收、断开的处理逻辑。
学习·网络编程·kcp
im_AMBER13 小时前
算法笔记 05
笔记·算法·哈希算法