在文件处理C程序运行后,为什么输出不符合预期?

时间:2018-02-12 09:00:34

标签: c file-handling

这是一个代码,通过从一个文件中获取输入并在另一个文件中输出来执行数字的平方。

#include<stdio.h>
#include<stdlib.h>

void main() {
   FILE *fp1, *fp2;
   char ch;
   fp1 = fopen("new.txt", "w");
   fputs("This is the new file 12",fp1);
   fclose(fp1);
   fp1 = fopen("new.txt", "r");
   fp2 = fopen("new1.txt", "w");

   while ((ch=fgetc(fp1))!=EOF)
   {
         if(isdigit(ch))
         {
            fputc((int)(ch*ch), fp2);
         }

   }

   printf("File copied Successfully!");
   fclose(fp1);
   fclose(fp2);
}

new1.txt的预期内容为144

new1.txt文件的实际内容是aÄ

1 个答案:

答案 0 :(得分:0)

你这样做的方式是错误的。您没有将整个数字相乘。 所以你需要先找到文件中的整个数字。一种简单的方法是将所有char存储在一个数组中并保持长度:

 while ((ch=fgetc(fp1))!=EOF)
 {
    if(isdigit(ch))
    {
        storeDigit[gotDigit] = ch;  // keep ref
        gotDigit += 1; // keep length       
    }
 }

然后你可以用strtol函数重建整数:

int digit = (int) strtol(storeDigit, NULL, 10);

现在你可以计算这个数字的平方,然后用前面的数组转换char数组中的int结果:

digit = digit * digit;
sprintf(storeDigit, "%d", digit);

要完成,只需将结果写入文件:

int i = 0;
while(storeDigit[i] != '\0')
{
    fputc(storeDigit[i], fp2);
    i++;
}