gpt4 book ai didi

c - 我的代码有什么问题吗?解析输入文本文件 (C)

转载 作者:行者123 更新时间:2023-11-30 16:32:32 25 4
gpt4 key购买 nike

我需要读入以下格式的输入文件:

REGISTERS
R1 4
R7 12
MEMORY
8 19
16 25
NEXT SECTION...
例如,其中“R1 4”表示寄存器 1 的值为 4,或者内存位置 8 的值为 19。我在每行中使用了 2 行,但可以提供任意数量的寄存器和内存位置。对于项目的第一部分,我需要读入输入文件并用正确的值填充数组(例如 Registers[1] = 4)。这是我到目前为止所拥有的:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int parseFile(FILE *filePtr, int *registers, int *memory);
void parseRegisters(const char *line, int *registers);
void parseMemory(const char *line, int *memory);

void main() {
int Registers[32];
int Memory[1000];
int returnVal;

FILE* fileIn;
fileIn = fopen("input.txt", "r");
if (fileIn == NULL) {
printf("Unable to find input file\n");
return;
}

returnVal = parseFile(fileIn, Registers, Memory);

fclose(fileIn);
}


int parseFile(FILE *filePtr, int *registers, int *memory) {
if (filePtr == NULL) {
return 0;
}

char line[64];

int mode = 0;

while (fgets(line, sizeof line, filePtr) != NULL) {
if (strcmp(line, "REGISTERS\n") == 0) {
mode = 1;
continue;
}

else if (strcmp(line, "MEMORY\n") == 0) {
mode = 2;
continue;
}

else {
continue;
}


switch (mode) {
case 1:
parseRegisters(line, registers);
break;
case 2:
parseMemory(line, memory);
break;
case 0: //will come back later for sections after MEMORY
break;
default:
break;
}
}
return 1;
}

void parseRegisters(const char *line, int *registers) {
int regNum, regVal;
printf("test");

if (sscanf(line, "R%d %d", &regNum, &regVal) != 2)
{
printf("Invalid format for REGISTER section\n");
return;
}

registers[regNum] = regVal;
printf("%d %d", regNum, regVal); //was using to test if variables correctly set
return;
}


void parseMemory(const char *line, int *memory) {
int memLoc, memVal;

if (sscanf(line, "%d %d", &memLoc, &memVal) != 2) {
printf("Invalid format for MEMORY section\n");
return;
}

memory[memLoc] = memVal;
return;
}

此代码在后面的部分中尚未完成,但我一直在“寄存器”部分进行测试,但无济于事。当我运行代码时,“mode”已正确更新,但我认为 parseRegisters() 甚至不会执行,因为我留在那里测试它的 printf() 语句不会打印任何内容。我还尝试在 main 中打印整个 Registers[] 数组,看看它是否确实被填充,但它仍然是空的。

最佳答案

...“我认为 parseRegisters() 甚至不会执行”...

首先,你应该使用断点一步一步地执行代码,然后你才能确定代码是否会被执行。

其次,确保文件路径正确。在您的情况下,该文件必须位于 *.exe 所在的同一文件夹中或项目文件夹中。

第三,继续意味着您跳过下面的代码并再次开始循环。 -> 删除它们...

关于c - 我的代码有什么问题吗?解析输入文本文件 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50094845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com