Мне нужно прочитать во входном файле в этом формате:
REGISTERS
R1 4
R7 12
MEMORY
8 19
16 25
NEXT SECTION...
Где «R1 4» означает, что регистр 1 имеет значение 4, например, или ячейка памяти 8 имеет значение 19. Я использовал 2 строки в каждой, но может быть любое произвольное количество регистров и предоставленных ячеек памяти. Для первой части моего проекта мне нужно прочитать входной файл и заполнить мои массивы правильными значениями (например, регистры [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", ®Num, ®Val) != 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;
}
Этот код не закончен для последующих разделов, но я тестировал только на части "Регистры", но безрезультатно. Когда я запускаю код, «режим» корректно обновляется, но я не думаю, что parseRegisters () вообще выполняется, потому что мои операторы printf (), которые я оставил там для проверки, ничего не выводят. Я также попытался распечатать весь массив Registers [] в main, чтобы увидеть, заполнен ли он, но он все еще пуст.