📅  最后修改于: 2023-12-03 15:20:54.399000             🧑  作者: Mango
这是一个使用C编程语言编写的程序,用于回收Unox口琴标签。Unox公司希望不再浪费大量的标签,因此开始回收使用过的标签。此程序可以处理收集到的标签并将其回收。
程序实现了以下功能:
此程序使用了下列C函数:
printf()
: 显示消息和标签编号。scanf()
: 接收用户输入的标签编号和命令。atoi()
: 将字符串转换为数字。isalnum()
: 判断字符是否为字母或数字。realloc()
: 调整动态数组的大小。memset()
: 初始化内存数据。fopen()
: 打开文件。fprintf()
: 将标签写入文件。fclose()
: 关闭文件。fgets()
: 从文件中读取标签数据。malloc()
: 为链表节点分配内存。strcpy()
: 将字符串复制到链表节点中。free()
: 释放链表节点内存。下面是此程序的代码片段:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int is_valid(char* tag) {
// 判断标签是否合法
}
int main() {
char input[20], *tag;
int total_tags = 0, i = 0, *tags = NULL;
FILE* fp;
struct node {
char tag[10];
struct node* next;
} *head = NULL, *p = NULL;
while (1) {
printf("Enter a tag number or 'quit': ");
scanf("%s", input);
if (strcmp(input, "quit") == 0) {
break;
}
if (!is_valid(input)) {
printf("Invalid tag number.\n");
continue;
}
tag = strdup(input);
tags = (int*)realloc(tags, sizeof(int) * (i + 1));
tags[i++] = atoi(tag);
total_tags++;
free(tag);
}
printf("You entered %d tags.\n", total_tags);
fp = fopen("tags.txt", "w");
for (i = 0; i < total_tags; i++) {
fprintf(fp, "%d\n", tags[i]);
}
fclose(fp);
fp = fopen("tags.txt", "r");
p = head = (struct node*)malloc(sizeof(struct node));
memset(head, 0, sizeof(struct node));
while (fgets(input, 20, fp) != NULL) {
if (input[strlen(input) - 1] == '\n') {
input[strlen(input) - 1] = '\0';
}
strcpy(p->tag, input);
p->next = (struct node*)malloc(sizeof(struct node));
memset(p->next, 0, sizeof(struct node));
p = p->next;
}
fclose(fp);
printf("Tags read from file:\n");
p = head;
while (p->next != NULL) {
printf("%s\n", p->tag);
p = p->next;
}
p = head;
while (p->next != NULL) {
struct node* temp = p->next;
free(p);
p = temp;
}
free(p);
free(tags);
return 0;
}
此代码实现了标签的读写和处理功能,同时还包括了链表的创建和使用。