我正在尝试制作C代码,它会将字符串复制到double类型的矩阵中,所以我需要从两个输入中的一个输入字符串:stdin和.txt文件。这有可能成为一条线:
while(fgets(tmpbuffer, MAXLEN, stdin) != NULL)
和
while(fgets(tmpbuffer, MAXLEN, filepointer) != NULL)
在不复制整个功能的情况下工作?我的意思是......像
#define stdin filepointer
但取决于用户给出的参数(stdin上的1或0)?
答案 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;
}
。如果你的程序不想从中读取任何其他内容,这应该不是问题。