即使使用fprintf将输入传递给文件指针,为什么输入没有写入文件?

Kav*_*edi 0 c io printf

我正在尝试基于C的一些问题并陷入这个特殊问题.根据我的说法,old.out文件应该用scanf输入的任何内容写入,因为fprintf将输入分配给文件指针,但令我惊讶的是,我看到没有任何内容写入old.out,因为后面的while循环不是没有执行.这是怎么回事?是否与我对fprintf功能的误解有关?我已粘贴下面的代码.

#include<stdio.h>
main()
{
    FILE *fp;
    char a;
    fp=fopen("old.out","w");
    if(fp==0)
        printf("File opening error");
    else
    {
        for(scanf("%c",&a);a!=EOF;scanf("%c",&a))
            fprintf(fp,"%c",a);
        fclose(fp);
        fp=fopen("old.out","r");
        while(!feof(fp))
            putchar(getc(fp));
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

小智 6

scanf()不会将其参数设置为何时无法EOF读取更多字符.所以你的for循环是一个无限循环.要改变的两件事:

  1. 而不是做出假设,请阅读文档.

  2. fgets()而不是scanf().(忘了scanf(),毕竟,它没有做你认为它做的事情,那里有很多更好,更友好的功能,特别是初学者.)


"好的,好吧,但是我可以把代码藏起来吗?"

您可以:

#include <stdio.h>
#include <limits.h>
#include <assert.h>

int main()
{
    char buf[LINE_MAX];
    fgets(buf, sizeof(buf), stdin);

    FILE *fp = fopen("old.out", "w");
    assert(fp);
    fputs(buf, fp);
    fclose(fp);

    fp = fopen("old.out", "r");
    assert(fp);
    if (fgets(buf, sizeof(buf), fp))
        puts(buf);
    fclose(fp); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)