输入一个整数,将此整数保存到文件中,以记事本打开,显示同样的内容

原理:

1.首先说明,输出的内容是一个一个的字符。而不再是整数。以输入98341为例。

2.如果将int i=98341,通过fwrite()函数写到文件中,必然会是乱码。因为,文件中存储的是整数98341的二进制码。而以文本打开,是以ASCII码格式解析的。这样,解析出来的值对应相应的字符,因此会是乱码。

3.如果想要正确显示,需要在写入文件前,进行数字与字符ASCII码的转换,保证存储的是,文本文件可以解析的ASCII码。测试程序如下,可读性不好,只是做实验。


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

//用于统计,要除10,100,1000?用于逐位进行转换。9变成‘9’,8变成‘8’等等。
int multi(int num)
{
 int mult=1;
 for(int i=1; i<num; i++)
  mult=mult*10;
 return mult;
}

// 转换函数

void change(int num)
{
    FILE *fp;
 int i=0;
 if((fp=fopen("test.txt","w+"))==NULL)
 {
     printf("open fail!\n");
  return ;
 }

//统计输入的数的位数,98341的count为5,以后很有用。
 int count=0;

  i=num;
 while(i)
 {
      count++;
      i=i/10;
 }


 char a[10]="";// 初始化为空串


 int k = multi(count);  // k返回10000
 int t=1; //用于循环结束判断
 int j=0;
 while(t)
 {
     a[j]=num/k+48; //转换为ASCII码
     t=num/10;
    num=num%k; // 去除最高位
    j++;
    k=k/10; 
 }
  fwrite( a,sizeof(char)*count,1,fp); // 写入fp指向的文件
 fclose(fp);
}

void main()
{
  int num;
 printf("input the int number:\n");
 scanf("%d",&num);
 change(i);
 system("pause");

}

 

输出为:98341

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值