为什么不能立即注意到fputc和fputs输出?
我正在编写一个C程序,但没有看到为什么不能立即注意到fputc和fputs输出?,c,C,我正在编写一个C程序,但没有看到fputc或fputs调用的结果。我需要帮助理解为什么会发生这种情况 #include <stdio.h> int main(void) { FILE *stream; int file_state; int input1=0; stream = fopen("data3.txt", "w"); if (stream == NULL) puts("file open error"); puts("input dat
fputc
或fputs
调用的结果。我需要帮助理解为什么会发生这种情况
#include <stdio.h>
int main(void)
{
FILE *stream;
int file_state;
int input1=0;
stream = fopen("data3.txt", "w");
if (stream == NULL)
puts("file open error");
puts("input data");
while (input1 != EOF)
{
input1=fgetc(stdin);
putchar(input1);
//fputc(input1, stdout);
//fprintf(stream, "tee");
//fputc('A', stream);
//fputs("sass", stream);
}
file_state=fclose(stream);
if(file_state==EOF)
puts("file close error");
return 0;
}
它输出(打印)到终端。
但是,所有注释行都不起作用
fputc(input1, stdout);
同时在终端上打印一个空行
程序创建了一个文件,但似乎是完全空的。有什么问题吗?您是否在文件打开时查看其内容?注意,文件写入是缓冲的,因此在关闭/刷新流之前,您可能无法看到数据 如果是这种情况,您可以尝试调用
fflush(stream)
作为循环中的最后一行。当然,也可以等到文件关闭
还要注意的是,如果用Ctrl-C结束程序,数据可能永远不会被写入
stdout
的不同之处在于,此流通常是行缓冲的,这意味着每当您输出新行字符时,流将自动刷新,而普通流则不是。可能是您遇到了问题,因为某些字符串不是以“\0”结尾的空字符串
stream = fopen("data3.txt\0", "w\0");
if (stream == NULL)
puts("file open error\0");
puts("input data\0");
while (input1 != EOF)
{
input1=fgetc(stdin);
putchar(input1);
//fputc(input1, stdout);
//fprintf(stream, "tee\0");
//fputc('A', stream);
//fputs("sass\0", stream);
}
file_state=fclose(stream);
if(file_state==EOF)
puts("file close error\0");
return 0;
您应该检查输出函数的返回值非常感谢!这帮了大忙@SML-不客气!但请记住,如果您发现答案令人满意,则应将其标记为已接受。字符串文字总是以null结尾。
stream = fopen("data3.txt\0", "w\0");
if (stream == NULL)
puts("file open error\0");
puts("input data\0");
while (input1 != EOF)
{
input1=fgetc(stdin);
putchar(input1);
//fputc(input1, stdout);
//fprintf(stream, "tee\0");
//fputc('A', stream);
//fputs("sass\0", stream);
}
file_state=fclose(stream);
if(file_state==EOF)
puts("file close error\0");
return 0;