#include <stdio.h> #include <stdlib.h> #include <string.h> #define BLUE "\033[34m" #define CYAN "\033[36m" #define GREEN "\033[32m" #define RED "\033[31m" #define RESET "\033[0m" #define YELLOW "\033[33m" const char* logo = " ____ __\n / __ )____ _/ /_____ _\n / __ / __ `/ __/ __ `/ \n / /_/ / /_/ / /_/ /_/ / \n/_____/\\__,_/\\__/\\__,_/ \n"; const char* welcome = "欢迎使用模拟 QQ 登录界面\n"; const char* tip_user = "请输入用户名:"; const char* tip_pwd = "请输入密码:"; const char* success = "登录成功!\n"; const char* failure = "用户名或密码错误,登录失败!\n"; int main() { char username[20], password[20], buffer[256]; printf(CYAN "%s" RESET, logo); printf(BLUE "%s" RESET, welcome); printf(YELLOW "%s" RESET, tip_user); fgets(buffer, sizeof(buffer), stdin); sscanf(buffer, "%s", username); printf(YELLOW "%s" RESET, tip_pwd); fgets(buffer, sizeof(buffer), stdin); sscanf(buffer, "%s", password); if (strcmp(username, "qquser") == 0 && strcmp(password, "qqpassword") == 0) { printf(GREEN "%s" RESET, success); } else { printf(RED "%s" RESET, failure); } return 0; }
时间: 2023-07-13 18:08:03 浏览: 81
这段代码是一个模拟 QQ 登录界面的程序,使用了 C 语言编写。它会先输出一个 QQ 的 Logo,然后打印欢迎信息和提示用户输入用户名和密码。接着,使用 fgets() 函数从标准输入中读取用户输入的字符串,并使用 sscanf() 函数将其存储到相应的变量中。最后,通过 strcmp() 函数比较用户名和密码是否正确,如果输入正确则输出登录成功的信息,否则输出登录失败的信息。程序中使用了 ANSI Escape Code 来控制输出文本的颜色,让界面看起来更加美观。
相关问题
帮我优化代码#include <stdio.h> #include <stdlib.h> #include <string.h> #define BLUE "\033[34m" #define CYAN "\033[36m" #define GREEN "\033[32m" #define RED "\033[31m" #define RESET "\033[0m" #define YELLOW "\033[33m" const char* logo = " ____ __\n / __ )____ _/ /_____ _\n / __ / __ `/ __/ __ `/ \n / /_/ / /_/ / /_/ /_/ / \n/_____/\\__,_/\\__/\\__,_/ \n"; const char* welcome = "欢迎使用模拟 QQ 登录界面\n"; const char* tip_user = "请输入用户名:"; const char* tip_pwd = "请输入密码:"; const char* success = "登录成功!\n"; const char* failure = "用户名或密码错误,登录失败!\n"; int main() { char username[20], password[20], buffer[256]; printf(CYAN "%s" RESET, logo); printf(BLUE "%s" RESET, welcome); printf(YELLOW "%s" RESET, tip_user); fgets(buffer, sizeof(buffer), stdin); sscanf(buffer, "%s", username); printf(YELLOW "%s" RESET, tip_pwd); fgets(buffer, sizeof(buffer), stdin); sscanf(buffer, "%s", password); if (strcmp(username, "qquser") == 0 && strcmp(password, "qqpassword") == 0) { printf(GREEN "%s" RESET, success); } else { printf(RED "%s" RESET, failure); } return 0; }
你的代码已经很简洁了,但是可以进行一些小优化:
1. 定义字符串常量时,可以使用 const char[] 来代替 const char*,这样更加安全。
2. 可以使用 fgets() 函数来获取用户输入,因为它可以避免缓冲区溢出的问题。
3. 在读取用户输入时,可以使用 sscanf() 函数来避免输入格式的错误。
4. 可以使用 strcmp() 函数来比较字符串是否相等,这样更加简洁。
下面是优化后的代码:
```c
#include <stdio.h>
#include <string.h>
#define BLUE "\033[34m"
#define CYAN "\033[36m"
#define GREEN "\033[32m"
#define RED "\033[31m"
#define RESET "\033[0m"
#define YELLOW "\033[33m"
const char logo[] =
" ____ __\n"
" / __ )____ _/ /_____ _\n"
" / __ / __ `/ __/ __ `/ \n"
" / /_/ / /_/ / /_/ /_/ / \n"
"/_____/\\__,_/\\__/\\__,_/ \n";
const char welcome[] = "欢迎使用模拟 QQ 登录界面\n";
const char tip_user[] = "请输入用户名:";
const char tip_pwd[] = "请输入密码:";
const char success[] = "登录成功!\n";
const char failure[] = "用户名或密码错误,登录失败!\n";
int main() {
char username[20], password[20], buffer[256];
printf(CYAN "%s" RESET, logo);
printf(BLUE "%s" RESET, welcome);
printf(YELLOW "%s" RESET, tip_user);
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%s", username);
printf(YELLOW "%s" RESET, tip_pwd);
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%s", password);
if (strcmp(username, "qquser") == 0 && strcmp(password, "qqpassword") == 0) {
printf(GREEN "%s" RESET, success);
} else {
printf(RED "%s" RESET, failure);
}
return 0;
}
```
Linux C控制向/sys/class/leds/blue/brightness这个GPIO端口写入1和0来实现呼吸灯的程序
以下是一个基于Linux C的呼吸灯程序,使用/sys/class/leds/blue/brightness控制GPIO端口,实现灯的呼吸效果:
```c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#define LED_PATH "/sys/class/leds/blue/brightness"
#define LED_MAX_BRIGHTNESS 255
int main()
{
int led_fd = open(LED_PATH, O_WRONLY);
if (led_fd < 0) {
printf("Failed to open LED file descriptor.\n");
return -1;
}
// Enable breathing effect
int breathing = 1;
int brightness = 0;
int delta = 5;
while (breathing) {
char buffer[8];
sprintf(buffer, "%d\n", brightness);
write(led_fd, buffer, strlen(buffer));
if (brightness <= 0) {
delta = 5;
} else if (brightness >= LED_MAX_BRIGHTNESS) {
delta = -5;
}
brightness += delta;
usleep(10000); // Sleep for 10 milliseconds
}
close(led_fd);
return 0;
}
```
该程序使用open()函数打开/sys/class/leds/blue/brightness文件并返回一个文件描述符。它使用write()函数向该文件写入一个代表灯亮度的字符串。程序启用呼吸效果,即循环增加和减少LED亮度,从而实现呼吸灯效果。最后,程序使用close()函数关闭文件描述符。
相关推荐
![image/gif](https://img-home.csdnimg.cn/images/20210720083352.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)