为什么不读取文件的最后一个数值?
Why aren't the last numeric values of the files being read?
这是一个从各个文件复制数据并显示它们的程序。简单的。但是代码的行为有点不同......
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
FILE *fptr, *fp;
int values[15], i, j;
fptr = fopen("Data1.txt", "r");
fp = fopen("Data2.txt", "r");
if(fptr == NULL) //to check for error
printf("\nError in opening Data1.txt!!\n");
if(fp == NULL)
printf("\nError in opening Data2.txt!!\n");
for(i = 0; (values[i] = getw(fptr)) != EOF; i++)
fflush(fptr);
printf("\ni value = %d\n\n", i);
for(; (values[i] = getw(fp)) != EOF; i++)
fflush(fp);
fclose(fp); //Closing both the files...
fclose(fptr);
printf("\ni value = %d\nValues: \n", i);
for(int a = 0; a <= i; a++)
putw(values[a], stdout);
fflush(stdout); //removing any unwanted characters
fptr = fopen("Data3.txt", "w"); //Opening Data3.txt file
fprintf(fptr, "%s", "The values which are present in Data1.txt and Data2.txt is as follows:\n");
fflush(fptr);
for(j = 0; j <= i; j++)
{
if(ferror(fptr) != 0)
{
printf("\nSome error has occured while printing the Data into Data1.txt file!!!\n");\
break;
}
putw(values[j], fptr);
fflush(fptr);
}
fclose(fptr);
printf("\nPlease go to the Data3.txt file to know more about the execution of the program...\nData has been recorded successfully\n");
return 0;
}
存储在Data1.txt中的值是
10 14 18 22 26 33
存储在Data2.txt中的值是
1 7 14 21 28 35
程序的输出是这样的...
i value = 4
i value = 7
Values:
10 14 18 22 26 31 7 14 21 28����
Please go to the Data3.txt file to know more about the execution of the program...
Data has been recorded successfully
并且 Data3.txt 文件包含
The values which are present in Data1.txt and Data2.txt is as follows:
10 14 18 22 26 31 7 14 21 28����
为什么最后的值没有被复制?
此外,复制的第一组数据的 i 值为 4,复制的第二组数据的 i 值为 7,而值的总数为 12。为什么会这样?
我尝试了 while 循环和 do-while 循环的变体,但没有任何效果。尝试在读取文件后对文件进行 fflush(),但这也行不通。
getw
和 putw
不适用于文本文件。它们相当于 fread
、fwrite
一个 int
对象 from/into 一个 二进制文件 。此外,它们已弃用并且存在主要以支持上个世纪编写的 C 源代码。
您想使用 fprintf
和 fscanf
。
这是一个从各个文件复制数据并显示它们的程序。简单的。但是代码的行为有点不同......
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
FILE *fptr, *fp;
int values[15], i, j;
fptr = fopen("Data1.txt", "r");
fp = fopen("Data2.txt", "r");
if(fptr == NULL) //to check for error
printf("\nError in opening Data1.txt!!\n");
if(fp == NULL)
printf("\nError in opening Data2.txt!!\n");
for(i = 0; (values[i] = getw(fptr)) != EOF; i++)
fflush(fptr);
printf("\ni value = %d\n\n", i);
for(; (values[i] = getw(fp)) != EOF; i++)
fflush(fp);
fclose(fp); //Closing both the files...
fclose(fptr);
printf("\ni value = %d\nValues: \n", i);
for(int a = 0; a <= i; a++)
putw(values[a], stdout);
fflush(stdout); //removing any unwanted characters
fptr = fopen("Data3.txt", "w"); //Opening Data3.txt file
fprintf(fptr, "%s", "The values which are present in Data1.txt and Data2.txt is as follows:\n");
fflush(fptr);
for(j = 0; j <= i; j++)
{
if(ferror(fptr) != 0)
{
printf("\nSome error has occured while printing the Data into Data1.txt file!!!\n");\
break;
}
putw(values[j], fptr);
fflush(fptr);
}
fclose(fptr);
printf("\nPlease go to the Data3.txt file to know more about the execution of the program...\nData has been recorded successfully\n");
return 0;
}
存储在Data1.txt中的值是
10 14 18 22 26 33
存储在Data2.txt中的值是
1 7 14 21 28 35
程序的输出是这样的...
i value = 4
i value = 7
Values:
10 14 18 22 26 31 7 14 21 28����
Please go to the Data3.txt file to know more about the execution of the program...
Data has been recorded successfully
并且 Data3.txt 文件包含
The values which are present in Data1.txt and Data2.txt is as follows:
10 14 18 22 26 31 7 14 21 28����
为什么最后的值没有被复制? 此外,复制的第一组数据的 i 值为 4,复制的第二组数据的 i 值为 7,而值的总数为 12。为什么会这样? 我尝试了 while 循环和 do-while 循环的变体,但没有任何效果。尝试在读取文件后对文件进行 fflush(),但这也行不通。
getw
和 putw
不适用于文本文件。它们相当于 fread
、fwrite
一个 int
对象 from/into 一个 二进制文件 。此外,它们已弃用并且存在主要以支持上个世纪编写的 C 源代码。
您想使用 fprintf
和 fscanf
。