Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读写文件内容10次_C_File - Fatal编程技术网

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
而导致循环中断,并且无法打印任何字符。事实上,您使用的是uninitialized
c
相比之下,它会导致代码中出现未定义的行为,如@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是的,你是对的,我甚至没有注意到。现在我在回答中添加了感谢。