题主您好,本回答参考AIGC,并由本人整理提供,如问题解决,望采纳;如仍有疑问,请评论回复。
好的,我理解你的问题。你在使用一个高铁订票系统时遇到了错误,并且希望查询余票和订票功能能够正常工作。以下是一些可能的解决方法和思路:
1. 检查代码逻辑
首先,确保你的代码逻辑是正确的。特别是涉及到文件读写的部分,需要仔细检查文件路径、文件格式以及读写操作是否正确。
2. 调试信息
在关键位置添加调试信息,以便更好地了解程序运行过程中的状态。例如,可以在读取文件、处理数据和写入文件的地方打印一些调试信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 假设这是你的数据结构定义
typedef struct {
char train_number[10];
char departure[20];
char destination[20];
int first_class;
int second_class;
} Train;
// 假设这是你的函数声明
void queryTickets(const char* filename);
void bookTicket(const char* filename, const char* train_number, int class, int num);
int main() {
queryTickets("trains.txt");
bookTicket("trains.txt", "G123", 1, 2);
return 0;
}
void queryTickets(const char* filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Error opening file");
return;
}
Train train;
while (fscanf(file, "%s %s %s %d %d", train.train_number, train.departure, train.destination, &train.first_class, &train.second_class) != EOF) {
printf("Train Number: %s, Departure: %s, Destination: %s, First Class: %d, Second Class: %d\n",
train.train_number, train.departure, train.destination, train.first_class, train.second_class);
}
fclose(file);
}
void bookTicket(const char* filename, const char* train_number, int class, int num) {
FILE *file = fopen(filename, "r+");
if (file == NULL) {
perror("Error opening file");
return;
}
Train train;
long pos;
int found = 0;
while (fscanf(file, "%s %s %s %d %d", train.train_number, train.departure, train.destination, &train.first_class, &train.second_class) != EOF) {
if (strcmp(train.train_number, train_number) == 0) {
found = 1;
pos = ftell(file) - sizeof(train); // 回退到当前记录的开始位置
break;
}
}
if (!found) {
printf("Train not found\n");
fclose(file);
return;
}
if (class == 1 && train.first_class >= num) {
train.first_class -= num;
} else if (class == 2 && train.second_class >= num) {
train.second_class -= num;
} else {
printf("Not enough tickets available\n");
fclose(file);
return;
}
fseek(file, pos, SEEK_SET);
fprintf(file, "%s %s %s %d %d\n", train.train_number, train.departure, train.destination, train.first_class, train.second_class);
fclose(file);
}
3. 检查文件路径和权限
确保你的程序有正确的文件路径和读写权限。如果文件路径不正确或者没有权限,会导致文件无法打开或读写失败。
4. 确认文件格式
确保你的文件格式与程序预期的一致。例如,每行的数据应该按照特定的格式存储,否则 fscanf
会解析失败。
5. 使用调试工具
可以使用调试工具(如 gdb)来逐步执行程序,查看变量的值和程序的执行流程,找出问题所在。
6. 参考作者的演示视频
根据你提供的视频链接,可以对照视频中的操作步骤,检查你的代码是否遗漏了某些步骤或逻辑。
通过以上方法,你应该能够找到并解决程序中的错误。如果仍然有问题,请提供更多详细的错误信息和代码片段,以便进一步帮助你解决问题。