我可能遗漏了一些明显的东西,但每当我写一个文件时,输入的文本都在文档的第二行打开时。造成这种情况的原因是什么?
#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;
}
答案 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 */;