在 C 中的文件处理中没有读取正确的值

Not reading correct value in file handling in C

我的第一个 post :) 我写了一个小程序,我从文本文件中读取值并按原样打印它,然后打印它的等效二进制值 但是我遇到的问题是我打印的值与文件中的值不同 例如。我的文本文件中有 23,当我尝试读取它并打印我得到的值时 1 任何人都知道我缺少什么或我错在哪里。 我正在 post 编写我的代码 提前谢谢你

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





char number_read = 0;
char number = 0;
char number_of_ones = 0;
char remainder_value = 0;
char binary = 0;
char base = 0;



    int main()

{
    FILE *fp;


    fp = fopen ("File.txt","r");

     while(1)
   {
      number_read = fgetc(fp);

      if( feof(fp) )
      { 
         break ;
      }

      printf("\nnumber is=%c", number_read);

      while (number_read>0)
      {
        remainder_value = number_read % 2;
        /*  To count no.of 1s */
        if (remainder_value == 1)
        {
            number_of_ones++;
        }

        binary = binary + remainder_value * base;
        number_read = number_read/2;
        base = base * 10;

      }


    }       
    fprintf("\nINPUT number is = %d\n", number); 
    fprintf("\nIt's in the binary number is = %d\n", binary); 
    fprintf("\nNo.of 1's in the binary number is = %d\n", number_of_ones); 

   fclose(fp);

   return 0;
}

在您的案例中传递给 fprintf 函数的参数是错误的。将部分更改为以下内容:

fprintf(fp,"\nINPUT number is = %d\n", number); 
fprintf(fp,"\nIt's in the binary number is = %d\n", binary); 
fprintf(fp,"\nNo.of 1's in the binary number is = %d\n",number_of_ones); 

所以添加 fp 作为 fprintf 的第一个参数。

而要获取字符number_read的整数值,利用C中提供的atoi函数。(参考this。)

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

char number_read = 0;
int number = 0;
int number_of_ones = 0;
int remainder_value = 0;
int binary = 0;
int base = 1;

int main(){
FILE *fp = fopen("File.txt", "r");

    while (1){
        number_read = fgetc(fp);

        if (feof(fp)){
            break;
        }
        base = 1;
        number_of_ones = remainder_value = binary = 0;

        printf("\nnumber is=%c\n", number_read);
        number = number_read-48;

        while (number>0){
            remainder_value = number % 2;
            /*  To count no.of 1s */
            if (remainder_value == 1){
                number_of_ones++;
            }

            binary = binary + remainder_value * base;
            number = number/ 2;
            base = base * 10;
            if (number == 1){
                binary = binary + 1 * base;
                number = 0;
            }
        }
        printf("\nINPUT number is = %d\n", number_read-48);
        printf("\nIt's in the binary number is = %d\n", binary);
        printf("\nNo.of 1's in the binary number is = %d\n", number_of_ones);

    }
return 0;
}

@Garryp,

我没有触及程序的逻辑,我不明白为什么你将基数保持为 0 或将所有数字变量保留为 char,这可以使用 int 变量本身轻松实现。您实际遇到的唯一问题是文件操作,请查找更新后的代码。 还有为什么不必要地使用 "number" 变量?

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

int number_read = 0;
char number = 0;
int number_of_ones = 0;
int remainder_value = 0;
int binary = 0;
int base = 1;

int main()

{
FILE *fp,*fp1;
char buff[5];

fp = fopen("C:\Users\50022314\Desktop\mytest.txt", "r+");
fp1 = fopen("C:\Users\50022314\Desktop\mytest1.txt", "a+");
while (fgets(buff, sizeof(buff), fp) != NULL)
{
    number_read = atoi(buff);
    printf("\nnumber is=%d", number_read);
    while (number_read > 0)
    {
        remainder_value = number_read % 2;
        /*  To count no.of 1s */
        if (remainder_value == 1)
        {
            number_of_ones++;
        }

        binary = binary + remainder_value * base;
        number_read = number_read / 2;
        base = base * 10;

    }


    fprintf(fp1, "\nINPUT number is = %d\n", number);
    fprintf(fp1, "\nIt's in the binary number is = %d\n", binary);
    fprintf(fp1, "\nNo.of 1's in the binary number is = %d\n", number_of_ones);
}
fclose(fp);
fclose(fp1);
return 0;
}

您好,感谢您回答我的 post 我检查了我做错了什么,这是我的代码,运行良好 我 post 编辑了以供将来作为 stack follower 的参考

还需要添加一些额外的功能 我正在尝试将文件中的数字的十进制转换为二进制 我必须避免空格、空行和行尾空格,然后打印数字。我仍在努力。任何人提供提示或代码将不胜感激。谢谢大家

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define BUFFER 5



char number_read = 0;
char number_of_ones = 0;
char remainder_value = 0;
char binary = 0;
char base = 0;
char buff[BUFFER];



int main()

{
    FILE *fp;                 //file pointer fp
    fp = fopen("File.txt","r+");

  while (fgets(buff, sizeof(buff), fp) != NULL)
  {
      number_read = atoi(buff);                   //ASCII to integer
      printf("\nnumber is=%d", number_read);
      while (number_read > 0)
       {
         remainder_value = number_read % 2;
         /*  To count no.of 1s */
         if (remainder_value == 1)
           {
            number_of_ones++;
           }

          binary = binary + remainder_value * base;
          number_read = number_read / 2;
          base = base * 10;
       }
         printf("\nNo.of 1's in It's binary representation is = %d\n",number_of_ones); 
         number_of_ones = 0;
  }

   fclose(fp);
   return 0;
}