Я использую цикл for, который я хочу повторять число раз, равное количеству символов, отсканированных scanf. Тем не менее, кажется, работает слишком много раз. Код был изначально написан для печати во фразу «Мы в 2019 году», что он и делает, но теперь мне нужно использовать его для чего-то другого. Я добавил в строке: printf ("% i", i);
чтобы увидеть, сколько раз он проходил через цикл for. Кажется, он запускается 8 раз для каждого запуска цикла while, независимо от того, как долго было отсканировано слово.
#include <stdio.h>
#include <stdlib.h>
int main() {
char* word = malloc(sizeof(char) * (46)); // create a char array
FILE* fp;
fp = fopen("file.txt", "w+");
fputs("We are in 2019", fp);
rewind(fp); // sets to start of file
while(fscanf(fp, "%s", word) != EOF) {
for(int i = 0; i < sizeof(word) / sizeof(word[0]); i++) {
printf("%c", word[i]);
printf("%i", i);
}
printf("\n");
}
fclose(fp);
return (0);
}
Вывод:
W0e1234567
a0r1e234567
i0n1234567
200112934567
Итак, я вижу, что он выполняет цикл for 8 раз для каждого запуска для каждого цикла while.
Я неправильно понимаю, как работает fscanf? я думал, что он остановился на пустом месте и сохранил только предыдущие символы ... например сначала он сканирует «Мы», затем сохраняет его как массив из 3 символов в «словах», затем сканирует «находятся» в массиве из 4 символов в «словах» и так далее. Что на самом деле происходит?