tôi cần phải viết như một định nghĩa trong C/C++sử dụng #define trong C/C++
#define scanf(fscanf(inf,
để thay thế mỗi scanf(
với fscanf(inf,
văn học
Nhưng tôi không biết làm thế nào ...
Cảm ơn
tôi cần phải viết như một định nghĩa trong C/C++sử dụng #define trong C/C++
#define scanf(fscanf(inf,
để thay thế mỗi scanf(
với fscanf(inf,
văn học
Nhưng tôi không biết làm thế nào ...
Cảm ơn
Bạn muốn sử dụng Variadic macro.
Trong trường hợp của bạn, tôi tin rằng bạn muốn:
#define scanf(...) fscanf(inf,__VA_ARGS__)
Lưu ý rằng đây không phải là di động. –
Điều này có thể hoạt động. –
@Brian: nó nằm trong bản nháp C++ 0x và được hỗ trợ bởi GNU, Intel và Microsoft, vì vậy ít nhất là trên x86, tôi cho rằng nó đủ di động cho hầu hết các mục đích – Christoph
Bạn không thể thay thế một ngoặc đơn. Nếu bạn đang sử dụng Visual C++, thì bạn có thể sử dụng macro Variad để thực hiện những gì bạn muốn:
#define scanf(format, ...) fscanf(inf, format, __VA_ARGS__)
Trình biên dịch khác có thể có cơ sở tương tự nhưng tôi không quen thuộc với chúng.
Đó là tiêu chuẩn C99. §6.10.3.1 –
Làm tôi ngạc nhiên. Cảm ơn bạn đã làm rõ. –
C99 tiêu chuẩn theo như tôi biết. – ShinTakezou
không thể theo cách bạn đã thử tất nhiên.
bạn phải làm những việc như
#define scanf(S, ...) fscanf(inf, S, __VA_ARGS__)
Xem ví dụ here
CHỈNH SỬA: GNU cpp cũng hỗ trợ các macro variadic; nó là VA_ARGS đứng trước dấu gạch dưới kép và kết thúc với dấu gạch dưới kép ... Tôi phải nghiên cứu đánh dấu thoát ở đây ...
Văn bản xung quanh có dấu gạch chéo ngược để tạo mã nội tuyến. Đó là cách tốt nhất để viết '__VA_ARGS__' ở giữa đoạn văn. ;) –
Chỉ cần viết tất cả mã của bạn bằng cách sử dụng fscanf và xác định tên tệp bằng macro như sau:
#ifdef USE_SCANF
#define SCANF_FILE(file) stdin
#else
#define SCANF_FILE(file) file
#endif
fscanf(SCANF_FILE(blah), "%d", &a);
tôi cần phải viết như một định nghĩa trong C++
không, bạn không. Những gì bạn thực sự muốn làm là chuyển hướng stdin
.
freopen(inf, "r", stdin);
Chỉ cần nói không với việc sử dụng macro đó. –
@Brian Đó là sự tò mò hơn việc sử dụng ... – Betamoo
C hoặc C++, và trình biên dịch gì? –