当我写一个文件时,\ n来自哪里?

时间:2011-12-24 19:21:22

标签: c

我可能遗漏了一些明显的东西,但每当我写一个文件时,输入的文本都在文档的第二行打开时。造成这种情况的原因是什么?

#include <stdio.h>

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

    printf("Type the name of the file to write to followed by enter: \n\n");

    scanf("%[^\t\n]s", filename); 

    fp = fopen(filename, "w");

    printf("\n\nEnter the text you wish to write to this file: \n\n");

    while ((c = getchar()) != EOF)
    {
        putc(c, fp);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:4)

您已告诉scanf不要吃任何\n字符,因此当您使用 putc启动循环时,仍会有一个坐在输入缓冲区中 getchar

一个解决方案是在循环之前调用 putc getchar来吃掉\n

答案 1 :(得分:0)

因为scanf没有使用'\n'(或'\t')。

尝试使用标签指定文件名:"filename<TAB>first line<ENTER>":)


要摆脱ENTER,请使用

while ((ch = getchar()) != '\n' && ch != EOF) /* void */;
if (ch == EOF) /* no more input; abort or whatever */;