C++ 需要帮助实现一个将用户输入的输入和答案的输出保存在文本文件中的代码吗

C++ 需要帮助实现一个将用户输入的输入和答案的输出保存在文本文件中的代码吗,c++,computer-science,C++,Computer Science,我创建了一个代码,可以将十进制转换为浮点,将浮点转换为十进制。我所需要的只是添加一个代码,我不知道如何添加和在哪里添加它。但我需要实现一个代码,将用户的所有输入和答案的输出保存到一个文本文件(如记事本)中。以下是我的代码: #include <stdio.h> #include <math.h> /*************************/ void decimal_to_IEEE754() { /* declare local variables */

我创建了一个代码,可以将十进制转换为浮点,将浮点转换为十进制。我所需要的只是添加一个代码,我不知道如何添加和在哪里添加它。但我需要实现一个代码,将用户的所有输入和答案的输出保存到一个文本文件(如记事本)中。以下是我的代码:

#include <stdio.h>
#include <math.h>

/*************************/
void decimal_to_IEEE754()
{
   /* declare local variables */
   float decimal_number;
   int exponent = 0;
   int bit[32];
   for (int i = 0; i < 32; i++) bit[i] = 0;

   /* prompt for floating point decimal number */
   printf("\nEnter the decimal representation: ");
   scanf("%f", &decimal_number);
   if (decimal_number == 0)
   {
       printf("\n*** Sign: 0");
       printf("\n*** Biased exponent : 00000000");
       printf("\n*** Mantissa : 00000000000000000000000");
       printf("\n***The IEEE - 754 representation is : 0.000000");
       return;
   }
      
   /* Check for 0--if so, print result */
   /* Print sign: if number>0, sign is 0, else 1 */
   if (decimal_number < 0){
       printf("\n*** Sign: %d", 1);
       bit[31] = 1;
   }
   else{
       bit[31] = 0;
       printf("\n*** Sign: %d", 0);
   }

   /* take absolute value of number before generating significand */
   if (decimal_number < 0) decimal_number = -decimal_number;

   /* Normalize number:
   while number >2, divide by 2, increment exponent
   while number <1, multiply by 2, decrement exponent
   */
   while (decimal_number > 2)
   {
       decimal_number = decimal_number / 2;
       exponent = exponent + 1;
   }
   while (decimal_number < 1)
   {
       decimal_number = decimal_number * 2;
       exponent = exponent - 1;
   }

   /* Bias exponent by 127 and print each bit in binary with 8-iteration for-loop*/
   exponent = exponent + 127;
   printf("\n*** Biased exponent: ");
   int i = 23;
   while (exponent)
   {
       bit[i] = exponent % 2;
       exponent = exponent / 2;
       i++;
   }
   for (i = 30; i >=23; i--)
   {
       printf("%d", bit[i]);
   }
   /* Hide 1 and print significand in binary with 23-iteration for-loop*/
   decimal_number = decimal_number - 1;
   printf("\n*** Mantissa: ");
   for (i = 22; i >= 0;i--)
   {
       decimal_number = decimal_number * 2;
       if (decimal_number>=1)
       {
           bit[i] = 1;
           decimal_number = decimal_number - 1;
       }
       else
       {
           bit[i] = 0;
       }
       printf("%d", bit[i]);
   }

   /* Print IEEE-754 representation */
   printf("\n*** IEEE HEX: ");
   for (i = 31; i > 0; i = i - 4)
   {
             if (bit[i] == 1 && bit[i - 1] == 1 && bit[i - 2] == 1 && bit[i - 3] == 1) printf("F");
       else if (bit[i] == 1 && bit[i - 1] == 1 && bit[i - 2] == 1 && bit[i - 3] == 0) printf("E");
       else if (bit[i] == 1 && bit[i - 1] == 1 && bit[i - 2] == 0 && bit[i - 3] == 1) printf("D");
       else if (bit[i] == 1 && bit[i - 1] == 1 && bit[i - 2] == 0 && bit[i - 3] == 0) printf("C");
       else if (bit[i] == 1 && bit[i - 1] == 0 && bit[i - 2] == 1 && bit[i - 3] == 1) printf("B");
       else if (bit[i] == 1 && bit[i - 1] == 0 && bit[i - 2] == 1 && bit[i - 3] == 0) printf("A");
       else if (bit[i] == 1 && bit[i - 1] == 0 && bit[i - 2] == 0 && bit[i - 3] == 1) printf("9");
       else if (bit[i] == 1 && bit[i - 1] == 0 && bit[i - 2] == 0 && bit[i - 3] == 0) printf("8");
       else if (bit[i] == 0 && bit[i - 1] == 1 && bit[i - 2] == 1 && bit[i - 3] == 1) printf("7");
       else if (bit[i] == 0 && bit[i - 1] == 1 && bit[i - 2] == 1 && bit[i - 3] == 0) printf("6");
       else if (bit[i] == 0 && bit[i - 1] == 1 && bit[i - 2] == 0 && bit[i - 3] == 1) printf("5");
       else if (bit[i] == 0 && bit[i - 1] == 1 && bit[i - 2] == 0 && bit[i - 3] == 0) printf("4");
       else if (bit[i] == 0 && bit[i - 1] == 0 && bit[i - 2] == 1 && bit[i - 3] == 1) printf("3");
       else if (bit[i] == 0 && bit[i - 1] == 0 && bit[i - 2] == 1 && bit[i - 3] == 0) printf("2");
       else if (bit[i] == 0 && bit[i - 1] == 0 && bit[i - 2] == 0 && bit[i - 3] == 1) printf("1");
       else if (bit[i] == 0 && bit[i - 1] == 0 && bit[i - 2] == 0 && bit[i - 3] == 0) printf("0");
   }
   return;
}

/***********************************************************************/
void IEEE754_to_decimal()
{
   /* declare local variables */
   char IEEE_char[20];
   int bit[32];
   float fraction = 0.0;
   int exponent=0;
   float number;
   /* prompt for IEEE-754 representation */
   printf("\nEnter the IEEE-754 representation:");
   scanf("%s", IEEE_char);

   /* check for special cases: NaN
   if so, print and return */
   int j = 0;
   int NaN_flag=0;
   while (IEEE_char[j] && j < 20)
   {
       if (j >= 8) { NaN_flag = 1; break; }
       if (!((IEEE_char[j] >= 'A' && IEEE_char[j] <= 'F') || (IEEE_char[j]>='0' && IEEE_char[j]<='9')))
       {
           NaN_flag = 1; break;
       }
       j++;
   }

   if (NaN_flag == 1)
   {
       printf("\n*** Sign: -");
       printf("\n*** Special case: NaN");
       return;
   }

   /*binary bit calculation*/
   j = 31;
   for (int i = 0; i < 8; i++)
   {
       if (IEEE_char[i] == 'F'){ bit[j] = 1; bit[j - 1] = 1; bit[j - 2] = 1; bit[j - 3] = 1; }
       else if (IEEE_char[i] == 'E'){ bit[j] = 1; bit[j - 1] = 1; bit[j - 2] = 1; bit[j - 3] = 0; }
       else if (IEEE_char[i] == 'D'){ bit[j] = 1; bit[j - 1] = 1; bit[j - 2] = 0; bit[j - 3] = 1; }
       else if (IEEE_char[i] == 'C'){ bit[j] = 1; bit[j - 1] = 1; bit[j - 2] = 0; bit[j - 3] = 0; }
       else if (IEEE_char[i] == 'B'){ bit[j] = 1; bit[j - 1] = 0; bit[j - 2] = 1; bit[j - 3] = 1; }
       else if (IEEE_char[i] == 'A'){ bit[j] = 1; bit[j - 1] = 0; bit[j - 2] = 1; bit[j - 3] = 0; }
       else if (IEEE_char[i] == '9'){ bit[j] = 1; bit[j - 1] = 0; bit[j - 2] = 0; bit[j - 3] = 1; }
       else if (IEEE_char[i] == '8'){ bit[j] = 1; bit[j - 1] = 0; bit[j - 2] = 0; bit[j - 3] = 0; }
       else if (IEEE_char[i] == '7'){ bit[j] = 0; bit[j - 1] = 1; bit[j - 2] = 1; bit[j - 3] = 1; }
       else if (IEEE_char[i] == '6'){ bit[j] = 0; bit[j - 1] = 1; bit[j - 2] = 1; bit[j - 3] = 0; }
       else if (IEEE_char[i] == '5'){ bit[j] = 0; bit[j - 1] = 1; bit[j - 2] = 0; bit[j - 3] = 1; }
       else if (IEEE_char[i] == '4'){ bit[j] = 0; bit[j - 1] = 1; bit[j - 2] = 0; bit[j - 3] = 0; }
       else if (IEEE_char[i] == '3'){ bit[j] = 0; bit[j - 1] = 0; bit[j - 2] = 1; bit[j - 3] = 1; }
       else if (IEEE_char[i] == '2'){ bit[j] = 0; bit[j - 1] = 0; bit[j - 2] = 1; bit[j - 3] = 0; }
       else if (IEEE_char[i] == '1'){ bit[j] = 0; bit[j - 1] = 0; bit[j - 2] = 0; bit[j - 3] = 1; }
       else if (IEEE_char[i] == '0'){ bit[j] = 0; bit[j - 1] = 0; bit[j - 2] = 0; bit[j - 3] = 0; }
       j = j - 4;
   }

   /* Mask biased exponent and significand from number */
   for (int i = 0; i <= 22; i++)
   {
       fraction = (fraction + bit[i]) / ((float)2.0);
   }
   for (int i = 30; i >= 23; i--)
   {
       exponent = exponent * 2 + bit[i];
   }

   /* check for special cases: 0, -0, +infinity, -infinity,NaN
   if so, print and return */
   if (exponent == 255 && fraction == (float)0.0)
   {
       if (bit[31]) {
           printf("\n*** Sign: -");
           printf("\n*** Special case: -infinity");
       }
       else
       {
           printf("\n*** Sign: +");
           printf("\n*** Special case: +infinity");
       }
       return;
   }
   else if (exponent == 255 && fraction != (float)0.0)
   {
       printf("\n*** Sign: -");
       printf("\n*** Special case: NaN");
       return;
   }
   else if (exponent == 0 && fraction == (float)0.0)
   {
       if (bit[31]) {
           printf("\n*** Sign: -");
           printf("\n*** Special case: -0");
       }
       else
       {
           printf("\n*** Sign: +");
           printf("\n*** Special case: +0");
       }
       return;
   }
   /* Mask sign from number: if sign=0, print "+", else print "-" */
   printf("\n*** Sign: ");
   if (bit[31] == 1) printf("-");
   else            printf("+");


   /* If biased exponent=0, number is denormalized with unbiased exponent of -126,
   print denormalized number as fraction * 2^(-126), return */
   if (exponent == 0)
   {
       printf("\n*** denormalized number: %f*2^(-126)", fraction);
       return;
   }
   /* Unbias exponent by subtracting 127 and print */
   exponent = exponent - 127;
   printf("\n*** Unbiased exponent: %d", exponent);
   /* Add hidden 1 and print normalized decimal number */
   fraction = fraction + 1;
   printf("\n*** Normalized decimal: %f", fraction);
   /* Print decimal number */
   number = fraction*pow(2.0, (double)exponent);
   if (bit[31]) printf("\n*** Decimal: -%f", number);
   else         printf("\n*** Decimal: %f", number);

   return;

}

int main()
{
   /* declare local variables */
   int selection=0;
   /* until user chooses to quit, prompt for choice and select appropriate function */
   while (selection != 3)
   {
       printf("\nFloating-point conversion:");
       printf("\n1) Decimal to IEEE-754 conversion");
       printf("\n2) IEEE-754 to Decimal conversion");
       printf("\n3) Exit");
       printf("\nEnter selection: ");
       scanf("%d", &selection);
       switch (selection)
       {
           case 1:
           {
                      decimal_to_IEEE754();
                      break;
           }
           case 2:
           {
                      IEEE754_to_decimal();
                      break;
           }
           case 3:
           {
                      break;
           }
       }
   }
   printf("\n*** Program Terminated Normally");
   return 0;
}
#包括
#包括
/*************************/
无效小数\u至\u IEEE754()
{
/*声明局部变量*/
浮点数;
int指数=0;
整数位[32];
对于(int i=0;i<32;i++)位[i]=0;
/*浮点十进制数提示*/
printf(“\n输入十进制表示:”);
scanf(“%f”和小数);
如果(十进制数==0)
{
printf(“\n***符号:0”);
printf(“\n***有偏指数:00000000”);
printf(“\n***尾数:00000000000000000000000”);
printf(“\n***IEEE-754表示为:0.000000”);
返回;
}
/*检查0——如果是,打印结果*/
/*打印符号:如果数字>0,则符号为0,否则为1*/
如果(十进制数<0){
printf(“\n***符号:%d”,1);
位[31]=1;
}
否则{
位[31]=0;
printf(“\n***符号:%d”,0);
}
/*在生成有效位之前获取数字的绝对值*/
如果(十进制数<0)十进制数=-十进制数;
/*标准化编号:
当数字>2时,除以2,增加指数
而数字2)
{
十进制数=十进制数/2;
指数=指数+1;
}
while(十进制数<1)
{
十进制数=十进制数*2;
指数=指数-1;
}
/*偏差指数为127,并以二进制形式打印每个位,循环迭代次数为8次*/
指数=指数+127;
printf(“\n***有偏指数:”);
int i=23;
while(指数)
{
位[i]=指数%2;
指数=指数/2;
i++;
}
对于(i=30;i>=23;i--)
{
printf(“%d”,位[i]);
}
/*隐藏1并以二进制形式打印有效位,循环迭代次数为23次*/
十进制数=十进制数-1;
printf(“\n***尾数:”);
对于(i=22;i>=0;i--)
{
十进制数=十进制数*2;
如果(十进制数>=1)
{
位[i]=1;
十进制数=十进制数-1;
}
其他的
{
位[i]=0;
}
printf(“%d”,位[i]);
}
/*打印IEEE-754表示*/
printf(“\n***IEEE十六进制:”);
对于(i=31;i>0;i=i-4)
{
如果(位[i]==1&&bit[i-1]==1&&bit[i-2]==1&&bit[i-3]==1)printf(“F”);
如果(位[i]==1和位[i-1]==1和位[i-2]==1和位[i-3]==0)printf(“E”);
如果(位[i]==1&&bit[i-1]==1&&bit[i-2]==0&&bit[i-3]==1)printf(“D”);
如果(位[i]==1&&bit[i-1]==1&&bit[i-2]==0&&bit[i-3]==0)printf(“C”);
如果(位[i]==1&&bit[i-1]==0&&bit[i-2]==1&&bit[i-3]==1)printf(“B”);
如果(位[i]==1&&bit[i-1]==0&&bit[i-2]==1&&bit[i-3]==0)printf(“A”);
如果(位[i]==1&&bit[i-1]==0&&bit[i-2]==0&&bit[i-3]==1)printf(“9”);
如果(位[i]==1&&bit[i-1]==0&&bit[i-2]==0&&bit[i-3]==0)printf(“8”);
如果(位[i]==0和位[i-1]==1和位[i-2]==1和位[i-3]==1)printf(“7”);
如果(位[i]==0和位[i-1]==1和位[i-2]==1和位[i-3]==0)printf(“6”);
如果(位[i]==0&&bit[i-1]==1&&bit[i-2]==0&&bit[i-3]==1)printf(“5”);
如果(位[i]==0&&bit[i-1]==1&&bit[i-2]==0&&bit[i-3]==0)printf(“4”);
如果(位[i]==0&&bit[i-1]==0&&bit[i-2]==1&&bit[i-3]==1)printf(“3”);
如果(位[i]==0和位[i-1]==0和位[i-2]==1和位[i-3]==0)printf(“2”);
如果(位[i]==0&&bit[i-1]==0&&bit[i-2]==0&&bit[i-3]==1)printf(“1”);
如果(位[i]==0&&bit[i-1]==0&&bit[i-2]==0&&bit[i-3]==0)printf(“0”);
}
返回;
}
/***********************************************************************/
无效IEEE754到十进制()
{
/*声明局部变量*/
char IEEE_char[20];
整数位[32];
浮点数=0.0;
int指数=0;
浮点数;
/*IEEE-754表示的提示*/
printf(“\n输入IEEE-754表示:”);
scanf(“%s”,IEEE_char);
/*检查特殊情况:NaN
如果是,请打印并返回*/
int j=0;
int NaN_标志=0;
而(IEEE_char[j]&&j<20)
{
如果(j>=8){NaN_flag=1;break;}

如果(!((IEEE_char[j]>='A'和&IEEE_char[j]='0'和&IEEE_char[j]您可以使用C中可用的文件I/O操作

    #include<stdlib.h>




    int main()
    {
       /* declare local variables */
       int selection=0;
       /* until user chooses to quit, prompt for choice and select appropriate function */

       // Setup File pointer
       FILE* outputfile;      // File pointer for input file

       outputfile   = fopen ("fileout.txt", "w+");    // open a file with filename as fileout.txt in read/write mode


       while (selection != 3)
       {
           printf("\nEnter selection: ");
           scanf("%d", &selection);
           fprintf(outputfile,"%d\t",selection);   // write the input value to file with tab charecter for seperation
           switch (selection)
           {
               case 1:
               {
                          decimal_to_IEEE754(outputfile);
                          break;
               }
               case 2:
               {
                          IEEE754_to_decimal(outputfile);
                          break;
               }
               case 3:
               {
                          break;
               }
           }
       }

       fclose(outputfile);   // close te file


       printf("\n*** Program Terminated Normally");
       return 0;
    }
在函数内部,您可以使用相同的函数调用将输出值写入到文件中,使用与打印它们相同的逻辑

在IEEE754_到_十进制()


要将字符值写入文件,可以在decimal_to_IEEE754()内的fprintf函数中使用'%c'而不是'%f'.

记事本不是文本文件,它是另一个类似Word或写字板的应用程序。由于您使用的是C语言I/O流,请查找
fprintf
file
fputs
。您可以将
文件*
传递给函数,并使用
fprintf
,而不是
printf
  void decimal_to_IEEE754(FILE* outputfile);
void IEEE754_to_decimal(FILE* outputfile);
fprintf(outputfile,"%f\n",number); //  value followed by newline at end