У меня есть файл, и я хочу прочитать какой-нибудь случайный ввод из файла, я не хочу использовать getline
или что-то в этом роде, сканирование работает, но оно читает некоторые случайные вещи, такие как ноль или другие символы. Я думаю, что проблема может быть в том, что я читаю один символ, и это может разрушить все это.
Вот код, чтобы увидеть, что я сделал:
#include <stdio.h>
#include <stdlib.h>
typedef struct queries
{
char type;
int node;
char *addr;
} Queries;
int main()
{
int i;
FILE *f;
f = fopen("queries.in", "r");
if (!f)
{
fprintf(stderr, "File queries.in was not opened correctly.\n");
exit(1);
}
int n_queries;
fscanf(f, "%d\n", &n_queries);
Queries *q = (Queries*)malloc(n_queries*sizeof(struct queries));
for (i = 0; i < n_queries; ++i)
{
fscanf(f, "%c ", &q[i].type);
if(q[i].type == 'q') fscanf(f, "%d %s\n", &q[i].node, q[i].addr);
else fscanf(f, "%d\n", &q[i].node);
}
for (i = 0; i < n_queries; ++i)
{
printf("%d %c ", i, q[i].type);
if(q[i].type == 'q') printf("%d %s\n", q[i].node, q[i].addr);
else printf("%d\n", q[i].node);
}
fclose(f);
}
А вот и ввод:
8
q 0 addr2
q 0 addr1
q 0 addr1
q 1 addr4
q 1 addr1
q 1 addr2
f 4
q 1 addr4
Хорошо ожидаемый результат:
8
q 0 addr2
q 0 addr1
q 0 addr1
q 1 addr4
q 1 addr1
q 1 addr2
f 4
q 1 addr4
Фактическая выработка:
0 q 0 (null)
1 a 0
2 d 0
3 d 0
4 r 2
5 q 0 (null)
6 a 0
7 d 0
Понятия не имею, что происходит