如何在c中将文本文件连接到标准输出

如何在c中将文本文件连接到标准输出,c,stdout,printf,C,Stdout,Printf,我在自学c语言,我被困在一个练习问题上: 编写一个使用fprintf打印到stdout的程序。请注意,stdout不是一个文件名,而是一个总是被打开的现有文件 问题是我已经设置好了一切,但我不知道如何附加text.txt文件,以便在每次运行时打开它。我正在使用Xcode 这是我到目前为止的代码,它是基于本书的大纲: #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char s[ 100 ];

我在自学c语言,我被困在一个练习问题上:

编写一个使用fprintf打印到stdout的程序。请注意,stdout不是一个文件名,而是一个总是被打开的现有文件

问题是我已经设置好了一切,但我不知道如何附加text.txt文件,以便在每次运行时打开它。我正在使用Xcode

这是我到目前为止的代码,它是基于本书的大纲:

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;
char  s[ 100 ];

fp = fopen( "text.txt", "r" );

if (!fp)

    fprintf( stderr, "I couldn't open the file.\n" );

else
{
    fgets( s, 100, fp );

    printf( "%s", s );
}

printf( "\n\nPress [ENTER] to exit the program.\n" );
getchar();

return 0;
}
#包括
#包括
int main()
{
文件*fp;
chars[100];
fp=fopen(“text.txt”,“r”);
如果(!fp)
fprintf(stderr,“我无法打开文件。\n”);
其他的
{
fgets(s,100,fp);
printf(“%s”,s);
}
printf(“\n\n按[ENTER]退出程序。\n”);
getchar();
返回0;
}
任何洞察都将不胜感激!我知道我在某个地方跳过了一步。呃。

首先

fp = fopen( "text.txt", "r" );
您可能需要以读取模式打开文件

下一个

将写入流stdout(正因为stdout是,所以将“我总是将输出附加到的文件”称为stdout可能不是一个好主意)。如果希望将相同的输出发送到fp,则需要

fprintf(fp,"%s", s );

提示:您上面编写的程序已经使用
fprintf
打印到stderr,这也是一个“始终打开的现有文件”


作为旁注,在将
text.txt
文件指针与
fp.close()一起使用后,应将其关闭。

您知道需要知道的一切,但不知道。:)查看如何显示有关无法打开文件的错误消息。查看如何将输出发送到名为
stderr
的“始终打开的现有文件”?您可以对
stdout
执行相同的操作(例如,而不是使用
printf
)。您是否正在尝试重新布线
stdout
,因此我敲打您的文本文件而不是默认的输出流(实际上包含重定向而不依赖shell)?如果是,请参阅。它可以做你想做的。@prprcupoffee-hmm。。。我不确定我是否知道你的意思。你是说我的if和else语句应该切换,所以printf是第一个?我只是想我必须把我的文本文件放到文件夹中,它会自动连接到运行时打开,但是输出会反复给我stderr消息。我只是想知道如何打开它,而不是给我错误消息。(对不起,我编码太慢了!)@pixelspinch您试图加载的文件“text.txt”必须在当前工作目录中。从Xcode运行时,默认的工作目录是build文件夹,这几乎肯定不是您想要的。如果没有限定的路径名,数据文件所在的文件夹必须是当前工作目录。可以帮助您了解如何在Xcode中设置它。只需确保您的数据文件位于您建立为启动工作目录的文件夹中。@WhozCraig谢谢Craig!我会尝试一下,看看我是否能说服它工作。这改进了它,非常感谢!然而,我仍然不知道我在运行时实际打开的文本文件是什么。它会开吗?我以前从来没有写过这样的动作。你有没有注意到fopen手册页的链接?引用:
a-打开以进行追加(在文件末尾写入)。如果文件不存在,则创建该文件。流位于文件的末尾。
因此您可以指定一些文件名,如果文件存在,则输出将附加到该文件,如果该文件不存在(例如,因为您删除了它,或者是程序第一次运行),则将创建该文件。只要试一下,观察一下它的行为,一旦你看到它在起作用,它就会非常清楚发生了什么。
printf( "%s", s );
fprintf(fp,"%s", s );