Я должен записать такой определять в C/C++
#define scanf( fscanf(inf,
для замены каждого scanf(
с fscanf(inf,
литературный
Но я не знаю как...
Спасибо
Вы хотите использовать макрос Variadic .
В вашем случае, я полагаю, вы хотите:
#define scanf(...) fscanf(inf,__VA_ARGS__)
Просто напишите весь свой код, используя fscanf, и определите имя файла с помощью макроса вроде этого:
#ifdef USE_SCANF
#define SCANF_FILE(file) stdin
#else
#define SCANF_FILE(file) file
#endif
fscanf(SCANF_FILE(blah), "%d", &a);
не возможно так, как вы пытались, конечно.
нужно делать что-то вроде
#define scanf(S, ...) fscanf(inf, S, __VA_ARGS__)
Смотрите, например, здесь
EDIT: GNU cpp тоже поддерживает вариативные макросы; это VA_ARGS, которому предшествует двойное подчеркивание и который заканчивается двойным подчеркиванием... Я должен изучить разметку экранирования здесь...
Мне нужно написать такое определение на C ++
Нет, не надо. На самом деле вам нужно перенаправить stdin
.
freopen(inf, "r", stdin);
Вы не можете заменить скобку. Если вы используете Visual C++, то вы можете использовать переменный макрос для достижения желаемого:
#define scanf( format, ... ) fscanf( inf, format, __VA_ARGS__ )
Другие компиляторы могут иметь подобные возможности, но я с ними не знаком.