В большинстве случаев использование feof()
является ошибкой - и эта программа прекрасно демонстрирует это в этом основном цикле:
char temp[1048576];
do {
if (!strcmp(argv[1], "serifb"))
transpose(fgets(temp, 1048576, stdin), 119808 - 'A', 119834 - 'a', 120782 - '0');
else if (!strcmp(argv[1], "serifi"))
transpose(fgets(temp, 1048576, stdin), 119860 - 'A', 119886 - 'a', 0);
else if (!strcmp(argv[1], "serifbi"))
transpose(fgets(temp, 1048576, stdin), 119912 - 'A', 119938 - 'a', 0);
else if (!strcmp(argv[1], "sans"))
transpose(fgets(temp, 1048576, stdin), 120224 - 'A', 120250 - 'a', 120802 - '0');
else if (!strcmp(argv[1], "sansb"))
transpose(fgets(temp, 1048576, stdin), 120276 - 'A', 120302 - 'a', 120812 - '0');
else if (!strcmp(argv[1], "sansi"))
transpose(fgets(temp, 1048576, stdin), 120328 - 'A', 120354 - 'a', 0);
else if (!strcmp(argv[1], "sansbi"))
transpose(fgets(temp, 1048576, stdin), 120380 - 'A', 120406 - 'a', 0);
else if (!strcmp(argv[1], "mono"))
transpose(fgets(temp, 1048576, stdin), 120432 - 'A', 120458 - 'a', 120822 - '0');
else if (!strcmp(argv[1], "fullwidth"))
transposeBlock(fgets(temp, 1048576, stdin), '!', '~', 65281 - '!');
else return help();
} while(!feof(stdin));
В конце файла fgets()
вернет NULL
, итогда следующий вызов feof()
вернет true.Таким образом, правильный подход - проверить возвращаемое значение вашей входной функции - и поскольку вы все равно выполняете этот тест, нет необходимости вызывать feof()
(если вы не хотите отличить ошибку файла от конца файла).
char temp[1048576];
while (fgets(temp, sizeof temp, stdin) != NULL) {
if (!strcmp(argv[1], "serifb"))
transpose(temp, 119808 - 'A', 119834 - 'a', 120782 - '0');
else if (!strcmp(argv[1], "serifi"))
transpose(temp, 119860 - 'A', 119886 - 'a', 0);
else if (!strcmp(argv[1], "serifbi"))
transpose(temp, 119912 - 'A', 119938 - 'a', 0);
else if (!strcmp(argv[1], "sans"))
transpose(temp, 120224 - 'A', 120250 - 'a', 120802 - '0');
else if (!strcmp(argv[1], "sansb"))
transpose(temp, 120276 - 'A', 120302 - 'a', 120812 - '0');
else if (!strcmp(argv[1], "sansi"))
transpose(temp, 120328 - 'A', 120354 - 'a', 0);
else if (!strcmp(argv[1], "sansbi"))
transpose(temp, 120380 - 'A', 120406 - 'a', 0);
else if (!strcmp(argv[1], "mono"))
transpose(temp, 120432 - 'A', 120458 - 'a', 120822 - '0');
else if (!strcmp(argv[1], "fullwidth"))
transposeBlock(temp, '!', '~', 65281 - '!');
else return help();
}