我正在尝试基于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
循环是一个无限循环.要改变的两件事:
而不是做出假设,请阅读文档.
用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)
归档时间: |
|
查看次数: |
179 次 |
最近记录: |