C语言怎么读取3个字节的整型数据

问题描述

C语言怎么读取3个字节的整型数据

 编写一程序P319.C实现以下功能
  有一存储很多商品数据的二进制文件sp36.dat,每件商品的属性先后包括:品名(17字节的字符串)、规格(12字节的字符串)、数量(3字节的整数)、单价(float实数)。从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔),若无则显示没有相应品名的商品。
  单击此处下载程序运行时测试用的商品数据文件sp36.dat并保存到程序P319.C所在的文件夹且文件名保持不变。编程可用素材:printf("Please input shang pin pin ming:")...、printf("ncha zhao qing kuang:n")...、printf("mei you shang pin :...。
  ▲ 提示:使用fread,sizeof(结构体)的方法肯定不对,应单项属性逐个fread!
  程序的运行效果应类似地如图1和图2所示,图1中的Please input shang pin pin ming:xuebi中的xuebi和图2中的Please input shang pin pin ming:kele中的kele是从键盘输入的内容。

这里怎么读取3个字节的整型数据啊?

解决方案

问题在于sp36.dat文件的规格不清楚,还不到提解决方案的时候。
硬要提解决方案的话,首先必须揣测一下sp36.dat文件的规格。

问:sp36.dat文件中,怎么存储“数量”这个“整数”的?

也就是说,要揣测一下,写文件时用的什么方法。

(1)如果是转化为字符串后写入文件的,即用的“格式化输出”办法:

{
    int shuliang = 17;
    fprintf(fp, "%03d", shuliang);
}

则分配一个至少4个字节的字符数组,依次读取三个字符,后面写个0构成标准的csz,然后atoi()即可:

{
    char szShuliang[4];
    fread(szShuliang, 1, 4, fp);
    szShuliang[3] = 0;
    int shuliang = atof(szShuliang);
}

(2)如果写文件时用的以下方式:

{
    int shuliang = 17;
    fwrite(&shuliang, 1, 3, fp);
}

则可以按以下方式读取:

{
    int shuliang;
    fread(&shuliang, 1, 3, fp);
}

一般不出以上两种方式,试一下吧。


当然,也可能设计者比较牛逼一点,在第一种方案的基础上,换用整数的十六进制表达;或者在第二种方案的基础上,规定用“大端”或“小端”编码以让数据文件的格式独立于硬件平台。这就需要揣测者多一番判断和处置了。总之,具体情况具体分析吧:-)

解决方案二:

scanf("%3d",&shuju)

时间: 2024-10-31 23:23:46

C语言怎么读取3个字节的整型数据的相关文章

C语言的整型数据

2.3.1整型常量整型常量及整常数.它可以是十进制.八进制.十六进制数字表示的整数值.十进制常数的形式是:d i g i t ss这里d i g i t s可以是从0到9的一个或多个十进制数位,第一位不能是0.八进制常数的形式是:0 d i g i t ss在此,d i g i t s可以是一个或多个八进制数(0-7之间),起始0是必须的引导符.十六进制常数是下述形式:0 x h d i g i t s0 X h d i g i t s这里h d i g i t s可以是一个或多个十六进制数(从

文件读取-c语言,用fgets将文件的数据读取后,如何对返回的数据进行操作,例如排序

问题描述 c语言,用fgets将文件的数据读取后,如何对返回的数据进行操作,例如排序 代码如下,我做法是 将fgets(readline, N, fp) 返回的readline 用atoi函数转为整型后赋给数组list,然后对list数组中的数据进行排序. 但实际运行下来,没有得到想要的结果,从printf结果看,atoi函数未能将readline 中的值转为整型,请各位大虾不吝指教,如何才能拿到fgets返回的readline的值,然后进行排序? #define N 256 #define S

《C语言程序设计》一2.2 常量、数据的存储与数据类型

2.2 常量.数据的存储与数据类型 2.2.1 基本数据类型 数据是程序加工.处理的对象,也是加工.处理的结果,所以数据是程序设计中所要涉及和描述的主要内容.程序所能处理的基本数据对象被划分成一些组,或者说是一些集合.属于同一集合的各数据对象都具有同样的性质,程序设计语言中具有这样性质的数据集合称为数据类型. 所有数据都属于某种类型.一个数据的类型决定了这个数据在内存中的存储形式.取值范围和能够对它进行的操作. C/C++ 中的数据类型大致可以分为两大类:第一类是基本数据类型,基本数据类型是系统

c语言-C中读取文件的字节值 求指教

问题描述 C中读取文件的字节值 求指教 #include #include #include #include using namespace std; int main() { FILE *fp=fopen("/home/nagainpkm/pwdSoftKeyboard/softkbd_example.apk", "r+"); int ch; if ( fp == NULL) { perror("Open file softkbd_example.ap

char-c语言文件读取汉字及汉字编码的问题

问题描述 c语言文件读取汉字及汉字编码的问题 先贴程序#define _CRT_SECURE_NO_WARNINGS #include using namespace std;int main(void){ char ch; FILE *f; int i = 0; int count = 0; f = fopen(""test.txt""r+""); while ((ch = getc(f)) != EOF) { fseek(f i SEEK_S

求指点-c语言数读取据库用sqlite3_prepare

问题描述 c语言数读取据库用sqlite3_prepare int g_XLZTA_Array[255][9] ; /************************************************ 功能:从数据库里读信令状态 输入:无 输出:无 返回:无 ************************************************/ int getPD_Key_StateByState(int State) { char sql[128] = { 0 };

c 文件读写-在C语言中读取闻见为UTF-8的汉字,英文混合的文件,又甚么函数可以不出现乱码

问题描述 在C语言中读取闻见为UTF-8的汉字,英文混合的文件,又甚么函数可以不出现乱码 注意:是函数! 我要提取其中的汉字信息,如何是分配的内存不会有乱码 memset fgets fread fseek这几个函数除外的函数 解决方案 搜一下, utf8转unicode 解决方案二: 这应该和编译的文本有关,我编写java时也遇到这情况 解决方案三: dos窗口的编码好像是默认的编码,所以如果现实utf-8字符好像会出问题,可以读取出来再写到文件里,看看是否是要读的数据,如果是,说明是编码问题

c语言-C语言scanf读取单个字符出错

问题描述 C语言scanf读取单个字符出错 { char a; scanf_s("%c", &a); printf("%c", a); } 编译报warning: 警告 C4477 'scanf_s' : format string '%d' requires an argument of type 'int *', but variadic argument 1 has type 'char *' 并且得不到正确的结果. 使用getchar()没有问题,求

c语言-C语言文件读取的问题。

问题描述 C语言文件读取的问题. #include int main() { int n; FILE *fp; FILE *qw; int i; int j; qw=fopen("out.txt","w"); fp=fopen("Din.txt","r"); fscanf(fp,"%d",&n); if (fp==NULL) { printf("n文件打开失败!n"); } fo