2

我正在尝试stdout将我自己的程序读入 2 个这样的数组

#include<stdio.h>

int main ()
{
    char arr[100]={0};
    char arr2[100]={0};

    printf("Hello world\n"); // This writes to stdout

    fgets( arr, 80, stdout );

    fseek ( stdout, 0, SEEK_SET );

    fgets ( arr2, 80, stdout );
    printf ("First array is %s\n", arr );
    printf ("Second array is %s\n", arr2 );

    return 0;

}

输出不是我所期望的。那是两个数组都是空的,而不是Hello World我预期的包含。

我浏览了这篇文章,它建议处理管道来完成我想要的,但没有告诉我为什么上面的代码不起作用?

编辑:虽然很高兴知道使上述工作正常进行的替代方案,但我对阅读stdout同一程序所涉及的问题更加好奇

4

3 回答 3

5

并非每个文件都是可查找、可读或可写的。Stdout 通常是一种无法回读的类型。

最有可能stdout的是管道。在这种情况下,您的程序拥有可写端,而其他人拥有可读端。管道实现只是传输数据而不保留它;一旦它在另一端被读取,就无法取回它。

如果您想要一个可以回读的文件,请创建一个常规临时文件或您自己的管道,并使用fprintf/fscanf代替printf/ scanf。或者,freopen在 stdout 上执行以将其重新分配给另一个文件/管道,然后printf对该新文件进行操作。

于 2012-05-18T06:53:56.167 回答
0

这是正确的代码:

#include<stdio.h>

int main ()
{
char arr[100]={0};
char arr2[100]={0};
int i,j;

printf("Hello world\n"); // This writes to stdout

fgets( arr, 80, stdin );

fgets ( arr2, 80, stdin );
printf("\n");
for(i=0; i<80; i++){
    printf ("%c", arr[i]);
}
for(j=0; j<80; j++){
    printf ("%c", arr2[j]);
}

return 0;
}

1) fgets 必须从 stdin 读取,而不是从 stdout :)
2) 你不能用 打印所有数组printf array,你必须forcicle迭代它

于 2012-05-18T07:01:15.690 回答
0

我建议您使用 gotoxy,它是一个非常简单的命令,您可以在其中放置标准输出位置的坐标。

COORD coord={0,0};
void gotoxy(int x,int y){
   coord.X=x;coord.Y=y;
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
于 2013-12-17T17:03:55.970 回答