为什么在 C 中将文本从一个文件复制到另一个文件后,文件中会有额外的空格?
Why are there extra spaces in the file after copying text from one file to another in C?
char c, cp;
FILE *input_file, *output_file;
input_file = fopen("d:\input.txt","r");
output_file = fopen("d:\output.txt", "w");
if(input_file==NULL){
printf("cannot open the input.txt file.");
exit(0);
}
if(output_file == NULL){
printf("cannot open the output.txt file.");
exit(0);
}
cp = fgetc(input_file);
while(cp!=EOF){
fputc(cp,output_file);
cp=fgetc(input_file);
}
c = fgetc(output_file);
while(c!=EOF){
printf("%c",c);
c=fgetc(output_file);
}
fclose(input_file);
fclose(output_file);
getch();
这是我在复制文本文件时使用的代码。
在 input.txt 文件中我写了 "Hello how are you".
执行代码后,文本"Hello how are you"被复制到output.txt文件
但是复制的文本后面有一百多个空格。
在程序下面的代码不工作之后:
cp = fgetc(input_file);
while(cp!=EOF){
fputc(cp,output_file);
cp=fgetc(input_file);
}
上述代码下方的代码无效。
怎么了?请详细说明。我是C的初学者
您必须将 c
和 cp
定义为 int
而不是 char。 EOF
被定义为一个整数值,它可以与任何字符区分开来,例如由 fgetc()
读取,其中 returns 是无符号字符范围或 EOF 中的值,不一定是字符范围中的值。 (感谢@chux)。
所以如果 cp
是一个字符,while( cp != EOF )
可能不会变为真。
关于第二期:如果你想阅读你写的东西,你必须
- 打开 output.tx 模式 "w+"。 "w" 只允许写入,"w+" 也允许读取,但是像 "w" 一样,如果文件不存在则创建文件,如果存在则截断文件。有关更多选项和详细信息,请参阅 man page。
- 读写之间调用
rewind(output_file)
或fseek(output_file, 0, SEEK_SET)
。
您必须关闭输出文件才能提交更改并能够再次读取:
cp = fgetc(input_file);
while(cp!=EOF){
fputc(cp,output_file);
cp=fgetc(input_file);
}
fclose(output_file);
// .....
c = fgetc(output_file);
char c, cp;
FILE *input_file, *output_file;
input_file = fopen("d:\input.txt","r");
output_file = fopen("d:\output.txt", "w");
if(input_file==NULL){
printf("cannot open the input.txt file.");
exit(0);
}
if(output_file == NULL){
printf("cannot open the output.txt file.");
exit(0);
}
cp = fgetc(input_file);
while(cp!=EOF){
fputc(cp,output_file);
cp=fgetc(input_file);
}
c = fgetc(output_file);
while(c!=EOF){
printf("%c",c);
c=fgetc(output_file);
}
fclose(input_file);
fclose(output_file);
getch();
这是我在复制文本文件时使用的代码。 在 input.txt 文件中我写了 "Hello how are you".
执行代码后,文本"Hello how are you"被复制到output.txt文件 但是复制的文本后面有一百多个空格。 在程序下面的代码不工作之后:
cp = fgetc(input_file);
while(cp!=EOF){
fputc(cp,output_file);
cp=fgetc(input_file);
}
上述代码下方的代码无效。 怎么了?请详细说明。我是C的初学者
您必须将 c
和 cp
定义为 int
而不是 char。 EOF
被定义为一个整数值,它可以与任何字符区分开来,例如由 fgetc()
读取,其中 returns 是无符号字符范围或 EOF 中的值,不一定是字符范围中的值。 (感谢@chux)。
所以如果 cp
是一个字符,while( cp != EOF )
可能不会变为真。
关于第二期:如果你想阅读你写的东西,你必须
- 打开 output.tx 模式 "w+"。 "w" 只允许写入,"w+" 也允许读取,但是像 "w" 一样,如果文件不存在则创建文件,如果存在则截断文件。有关更多选项和详细信息,请参阅 man page。
- 读写之间调用
rewind(output_file)
或fseek(output_file, 0, SEEK_SET)
。
您必须关闭输出文件才能提交更改并能够再次读取:
cp = fgetc(input_file);
while(cp!=EOF){
fputc(cp,output_file);
cp=fgetc(input_file);
}
fclose(output_file);
// .....
c = fgetc(output_file);