根据If制作宏

时间:2016-02-02 21:30:50

标签: c macros

我正在尝试制作C代码,它会将字符串复制到double类型的矩阵中,所以我需要从两个输入中的一个输入字符串:stdin和.txt文件。这有可能成为一条线:

while(fgets(tmpbuffer, MAXLEN, stdin) != NULL)

while(fgets(tmpbuffer, MAXLEN, filepointer) != NULL)

在不复制整个功能的情况下工作?我的意思是......像

#define stdin filepointer

但取决于用户给出的参数(stdin上的1或0)?

2 个答案:

答案 0 :(得分:7)

当然!考虑将整个事物包装在一个带有FILE*参数的函数中:

void do_something(FILE* fp) {
    while (fgets(tmpbuffer, MAXLEN, fp) != NULL) {
        ...
    }
}

现在,您可以根据需要致电do_something(stdin)do_something(filepointer)

答案 1 :(得分:2)

请勿使用宏。

而不是复制代码,你真正想要做的是意识到//Output if (pid == 0) before FT_OpenEx before FT_Write before FT_Read 只是一个stdin指针。所以你的代码看起来应该是这样的。

FILE *

请注意,此代码可能会FILE * fp = stdin; if (filename != NULL) /* or whatever the condition */ { fp = fopen(filename, "r"); if (fp == NULL) { fprintf(stderr, "error: cannot open file '%s' for reading: %s\n", filename, strerror(errno)); return EXIT_FAILURE; } } /* Read from fp … */ if (fclose(fp) != 0) { fprintf(stderr, "error: cannot close file: %s\n", strerror(errno)); return EXIT_FAILURE; } 。如果你的程序不想从中读取任何其他内容,这应该不是问题。