C 读写文件内容10次
我有一个文本文件C 读写文件内容10次,c,file,C,File,我有一个文本文件“hello.txt”,我需要读取该文件并将其写入stdout10次,我该怎么做 我目前正在做的工作如下:- #include<stdio.h> main(){ int c,i; FILE *fp; for(i=0;i<10;++i) { fp = fopen("hello.txt","r"); for(;c!=EOF;c= getc(fp),putchar(c)); fclose(fp); } return 0; } #包括
“hello.txt”
,我需要读取该文件并将其写入stdout
10次,我该怎么做
我目前正在做的工作如下:-
#include<stdio.h>
main(){
int c,i;
FILE *fp;
for(i=0;i<10;++i) {
fp = fopen("hello.txt","r");
for(;c!=EOF;c= getc(fp),putchar(c));
fclose(fp);
}
return 0;
}
#包括
main(){
int c,i;
文件*fp;
对于(i=0;i错误在于,在第一次迭代结束时,变量c
的值变为EOF,在所有下一次迭代中,由于循环的条件c!=EOF
,循环中断,无法打印任何字符。事实上,相比之下,您使用的是未初始化的c
,这会导致代码中出现未定义的行为,如@notice和回答你的问题
您应该在每个for循环开始时(重新)初始化c
替换:
for(;c!=EOF;c= getc(fp),putchar(c));
作者:
此外,如果您想一次又一次地读取文件,那么更好的方法是使用函数,您需要在循环结束时将文件指针倒回文件的开头,类似于:
fp = fopen("hello.txt", "r");
for(i = 0; i < 10; ++i) {
for(c = getc(fp); c != EOF; c = getc(fp), putchar(c));
rewind(fp);
}
fclose(fp);
fp=fopen(“hello.txt”、“r”);
对于(i=0;i<10;++i){
对于(c=getc(fp);c!=EOF;c=getc(fp),putchar(c));
倒带(fp);
}
fclose(fp);
注意:为了使代码可读,请在;
和之后使用空格,
错误在于,在第一次迭代结束时,变量c
的值变为EOF,并且在所有下一次迭代中,由于循环的条件c!=EOF
而导致循环中断,并且无法打印任何字符。事实上,您使用的是uninitializedc
相比之下,它会导致代码中出现未定义的行为,如@notice以及您的问题
#include<stdio.h>
main(){
int c,i;
FILE *fp;
for(i=0;i<10;++i) {
fp = fopen("hello.txt","r");
while ((c = getc(fp)) != EOF) {
putchar(c);
}
fclose(fp);
}
return 0;
}
您应该在每个for循环开始时(重新)初始化c
替换:
for(;c!=EOF;c= getc(fp),putchar(c));
作者:
此外,如果您想一次又一次地读取文件,那么更好的方法是使用函数,您需要在循环结束时将文件指针倒回文件的开头,类似于:
fp = fopen("hello.txt", "r");
for(i = 0; i < 10; ++i) {
for(c = getc(fp); c != EOF; c = getc(fp), putchar(c));
rewind(fp);
}
fclose(fp);
fp=fopen(“hello.txt”、“r”);
对于(i=0;i<10;++i){
对于(c=getc(fp);c!=EOF;c=getc(fp),putchar(c));
倒带(fp);
}
fclose(fp);
注意:要使代码可读,请在
和之后使用空格,
#包括
#include<stdio.h>
main(){
int c,i;
FILE *fp;
for(i=0;i<10;++i) {
fp = fopen("hello.txt","r");
while ((c = getc(fp)) != EOF) {
putchar(c);
}
fclose(fp);
}
return 0;
}
main(){
int c,i;
文件*fp;
对于(i=0;i#包括
main(){
int c,i;
文件*fp;
对于(i=0;i您必须在再次读取文件之前初始化c
。在您的代码中,一次c
是EOF
它将永远保持它,并且不会进入for
循环
c = 0;
for(;c!=EOF;c= getc(fp),putchar(c));
在再次读取文件之前,您必须初始化c
。在您的代码中,一旦c
是EOF
它将永远保持它,并且不会进入for
循环
c = 0;
for(;c!=EOF;c= getc(fp),putchar(c));
一个好的做法是尝试和调试程序以发现错误。当第一次进入循环时,代码已经进入未定义的行为,因为c
是针对EOF
进行测试的,在此之前没有进行初始化。读取未初始化的变量会引发未定义的行为。一个好的做法是尝试和调试program查找错误。当代码第一次进入循环时,代码已经进入未定义的行为,因为在此之前没有初始化,c
是针对EOF
进行测试的。读取未初始化的变量会引发未定义的行为。@GrijeshChauhan-Nope-最后一行需要context@GrijeshChauhan-没有-最后一个李ne需要上下文不是真的吹毛求疵:重新初始化
最好是(重新)初始化
。请查看我对OP的评论。@alk是的,你是对的,我甚至没有注意到。现在我在回答中添加了谢谢。不是真的吹毛求疵:重新初始化
最好是(重新-)草签
。请查看我对OP的评论。@alk是的,你是对的,我甚至没有注意到。现在我在回答中添加了感谢。