用C语言编译如果输入的学号与输入的密码一样则flag=1的代码
时间: 2023-06-17 20:03:27 浏览: 68
以下是用C语言编写的判断输入的学号与密码是否相同的代码,如果相同则将flag设置为1:
```c
#include <stdio.h>
#include <string.h>
int main() {
char student_id[20];
char password[20];
int flag = 0;
printf("请输入学号:\n");
scanf("%s", student_id);
printf("请输入密码:\n");
scanf("%s", password);
if (strcmp(student_id, password) == 0) {
flag = 1;
}
if (flag == 1) {
printf("输入的学号与密码相同\n");
} else {
printf("输入的学号与密码不同\n");
}
return 0;
}
```
以上代码中,使用了`strcmp()`函数来比较输入的学号和密码是否相同。如果相同,则将flag设置为1,否则flag为0。最后根据flag的值输出相应的提示信息。
相关问题
使用系统调用open read write,完成一个C语言程序:该程序接收两个参数,参数1作为要读写的文件,参数2作为标志位,标识是读还是写。功能完成对参数1所示文件的读写,该文件的内容为 “学号 MYFILE”,其中学号填为自己的学号。
以下是一个使用系统调用`open`、`read`和`write`来完成文件读写的C语言程序,可以实现您的需求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define MAX_BUF_SIZE 1024
int main(int argc, char *argv[]) {
char *filename = argv[1]; // 获取要读写的文件名
int flag = atoi(argv[2]); // 获取标志位,0为读,1为写
int fd = open(filename, flag == 0 ? O_RDONLY : O_WRONLY | O_CREAT, 0644); // 打开文件
if (fd == -1) {
perror("open");
exit(1);
}
char buf[MAX_BUF_SIZE];
memset(buf, 0, MAX_BUF_SIZE);
if (flag == 0) { // 读取文件内容
if (read(fd, buf, MAX_BUF_SIZE) == -1) {
perror("read");
exit(1);
}
printf("读取文件内容:%s\n", buf);
} else { // 写入文件内容
sprintf(buf, "学号 %s", "MYFILE"); // 将学号填写到缓冲区中
if (write(fd, buf, strlen(buf)) == -1) {
perror("write");
exit(1);
}
printf("写入文件成功!\n");
}
close(fd); // 关闭文件
return 0;
}
```
您可以将上面的代码保存到一个名为`file_rw.c`的文件中,然后使用以下命令进行编译:
```
gcc -o file_rw file_rw.c
```
编译成功后,您可以使用以下命令来运行程序并进行文件读写:
```
./file_rw file.txt 1
```
其中,`file.txt`为您要读写的文件名,`1`表示进行写操作。如果您想进行读操作,可以将最后一个参数改为`0`。
内核编程 1. 添加一个系统调用, 该系统调用接受两个参数:参数1:以整型数表示的自己学号的后3位;参数2:flag,取值为0或1,若为0,该系统调用的返回值为参数1的个位。若为1。该系统调用的返回值为参数1的十位。给出具体操作步骤
添加一个系统调用需要以下具体步骤:
1. 编写系统调用的源代码
在内核源代码树中,打开一个新的源文件,例如`my_syscall.c`,在文件中编写系统调用的函数代码,例如:
```
#include <linux/syscalls.h>
#include <linux/kernel.h>
SYSCALL_DEFINE2(my_syscall, int, num, int, flag)
{
if (flag == 0) {
return num % 10;
} else if (flag == 1) {
return (num / 10) % 10;
} else {
return -EINVAL;
}
}
```
其中,`SYSCALL_DEFINE2`是一个宏定义,用于定义一个两个参数的系统调用。`num`表示学号后3位,`flag`表示标志位,根据标志位的不同,返回不同的结果。
2. 修改系统调用表
在内核源代码树中,打开`arch/x86/entry/syscalls/syscall_64.tbl`文件,添加以下内容:
```
__NR_my_syscall 333 sys_my_syscall
```
其中,`__NR_my_syscall`表示系统调用的编号,`333`是一个未使用的编号,`sys_my_syscall`表示系统调用的名字。
3. 编译内核源代码
使用`make`命令编译内核源代码,生成新的内核映像文件。
4. 安装内核映像文件
使用`make install`命令安装新的内核映像文件。
5. 测试系统调用
在用户空间编写测试程序,例如:
```
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>
int main(void)
{
int num = 123;
int flag = 0;
int result = syscall(__NR_my_syscall, num, flag);
printf("result = %d\n", result);
return 0;
}
```
编译并运行测试程序,可以看到输出结果为3。
需要注意的是,内核编程需要具备一定的C语言和操作系统的基础知识,同时需要谨慎编写代码,以免对系统造成损害。建议在进行内核编程之前先学习一些相关的操作系统和编程知识。
阅读全文