У меня есть функция, которая пытается прочитать каждую строку файла, а затем использовать sscanf для передачи значений в массив структур, создавая новую структуру для каждой строки файла, которая не является строка комментария, содержащая символ '#'. Это мой код:Пока петля застряла в ожидании ввода
typedef struct {
int row, col, C, D;
char program[80];
} agentDetails;
Мои структуры определены в файле заголовка, # включены в основной файл.
char currentLine[80];
char** agents;
int n=0;
agents = malloc(sizeof(char*)*4);
while (fgets(currentLine, sizeof currentLine, file) != NULL) {
if(!strchr(currentLine, '#')) {
agentDetails agents[n]; /*create new struct in array agents*/
sscanf(currentLine, "%d %d %c %s %s", &agents[n].row, &agents[n].col, &agents[n].C, agents[n].program, agents[n].D);
n++;
}
}
Это работает, однако, когда он достигает конца файла, он не выходит из цикла, он сидит там, ожидая ввода. Я попытался пройти через gdb, после последней строки он переходит к строке while (fgets ...), а затем ждет ввода.
Я знаю, что этот код работает, если я пытаюсь преобразовать значения в переменные, инициализированные внутри функции, это только кажется ошибкой, когда я использую массив структур. Что здесь происходит?
Я изменил код, чтобы он работает, смотрите ниже:
int n = 0;
int i = 0;
while (fgets(currentLine, sizeof currentLine, file) != NULL) {
if(!strchr(currentLine, '#')) {
n++;
}
}
rewind(file);
agentDetails agents[n];
while (fgets(currentLine, sizeof currentLine, file) != NULL) {
if(!strchr(currentLine, '#')) {
sscanf("same as above");
i++;
}
}
я не использую таНос, однако. Это проблема? Это вызовет проблемы?
как 'currentLine' объявлен? – phoxis
char currentLine [80]; – user2790954
Не должно быть запятой между агентами '& agents [n] .C [n] .program' в' sscanf'? – phoxis