【发布时间】:2017-11-26 18:40:31
【问题描述】:
我在写入文件时遇到问题,这是代码:
#include <stdio.h>
int main(int argc,char* argv[])
{
if(argc!=2)
{
printf("\x1B[31mError::%s takes exactly one argument!\n\x1B[0m",argv[0]);
return 1;
}
char string[100];
FILE* file=fopen(argv[1],"w");
if(file==NULL)
{
printf("\x1B[31mFile is invalid!\x1B[0m\n");
return 1;
}
while(!feof(stdin))
{
scanf("%s",string);
fprintf(file,"%s\n",string);
}
fclose(file);
return 0;
}
它应该使用scanf输入并写入文件,直到我输入文件结尾字符(ctrl+Z),当它完成运行时,我打开的文件是空的。这个代码结构在deitel & deitel这本书里也有建议,你知道这里有什么问题吗? 另外,我想知道如何每次都用scanf而不是一个单词来使用整个短语..如果我这样做 scanf("%[^\n]",string) 程序变得混乱,一旦我写了一些东西,它就会进入一个循环,一遍又一遍地写同样的东西,文件会变得像 1.7Gb 一样大..帮助!
【问题讨论】:
-
使用
while (!feof(fp))总是错误的。 -
ctrl+Z 是 SIGTSTP 将强制停止进程执行,数据不会保存到文件中。
-
原来 eof 键因操作系统而异,它是 ctrl+D 而不是 Z 谢谢,但我也想知道为什么 scanf("%[^\n]",string) 会不工作?