c语言序列化
⑴ c语言:如何将l录入信息用文件保存下来,而不是用数据库。
程序中还有一些错误,更正下。
#include<stdio.h>
#define n 3
void main()
{
int i;
FILE *fp;//文件指针
struct staff
{
long int num;
char name[20];
char sex;
char addr[20];
int IDnum;
int borndate;
}staffs[n];
for(i=0;i<n;i++)
{
printf("请输入员工编号");
scanf("%d",&staffs[i].num);
printf("\n请输入员工姓名");
scanf("%s",&staffs[i].name);
printf("\n请输入员工性别");
scanf("\n%c",&staffs[i].sex);//字符用%c匹配
printf("\n请输入员工身份证号");
scanf("%d",&staffs[i].IDnum);
printf("\n请输入员工出生日期");
scanf("%d",&staffs[i].borndate);
printf("轿告\n请输入员工住址");
scanf("%s",&staffs[i].addr);
printf("\闭弊明n");
//for(i=0;i<n;i++)多余
{printf("员工编号%d\n",staffs[i].num);
printf("员工姓名%s\n",staffs[i].name);
printf("员工性别%c\n",staffs[i].sex);
printf("员工身份证号%d\n",staffs[i].IDnum);
printf("员工出生日期%d\n",staffs[i].borndate);
printf("员工住址%s\n",staffs[i].addr);
}
}
fp=fopen("out.dat","wb");//在当前程序运行目录下自动建立out.dat文件,并用二进制写方式打开文件
if(fp==NULL)
{
printf("打开文件出错\n");
return ;
}
//用fread读取与fwrite匹配
if(fwrite(staffs,sizeof(staff),3,fp)!=3)//直接写入3个记录
{
printf("写文件出错\n"卜胡);
return ;
}
fclose(fp);
printf("写入完毕!\n");
}
⑵ c语言可以读取文件内容 自动创建变量吗
答案罩郑指肯定是可以的,一个简单的实现方法如下。
第一步定义一个结构体,成员如下:
struct Data
{
char type; //假设i-int, d-double, c-char建议用缩写便于后面判断
void *ptr;
struct Data *next;
}
第二步建立结构体链表,打开文件读取文件内容,如果文件不规律可以读取物配每行,自己这个扫描函数;像数据库它是规律的,数据类型后面跟着值,首先读丛空取数据类型,然后根据数据类型用malloc申请适当内存存放数据,申请回来的内存赋值给ptr,文件值写入ptr指向的内存。按这种方式读取完全部。返回链表头head。
第三步使用值,首先使用switch case判断type类型,假设类型为i整形,那值为*((int)(ptr))。其它的类似就可以了。
⑶ 我们这个学期的课程设计作业、要用C语言写、大牛帮我看看这个“序列化功能实现存盘”是什么
#include<stdio.h>
intmain(void)
{
doublef;///总运费
doubles;///路程
doublep;///基本运费
doublew;///货物重
doubled;///折扣
scanf("%lf%lf%lf",&p,&w,&s);
if(s<250)d=0;
乱凳elseif(250<=s&&s<1000)d=0.02;
elseif(1000<=s&&哗绝旅s<2000)d=0.05;
elsed=0.08;
f=p*w宏扰*s*(1-d);
printf("%lf ",f);
return0;
}
⑷ C++能将对象写到文件吗
可以,fwrite跟C一样的,但只能是文件不能是目录。
C语搏搜伏言是一基携种结构化语言。它层次清晰,便于按模块漏橡化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。
相关信息
C语言是当今最流行的程序设计语言之一,它的功能丰富、表达力强、使用灵活方便、应用面广、目标程序高、可植入性好,既有高级语言的特点,又有低级语言的许多特点,适合作为系统描述语言,既可以用来编写系统软件,也可以用来编写应用软件。
C语言诞生后,许多原来用汇编语言编写的软件,现在都可以用C语言编写了(如UNIX操作系统),而学习和适用C语言要比学习和适用汇编语言容易得多。C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。
⑸ 有没有简单的序列化std:string的办法
string作为类型使用是 c++中的,c语言中没有消缓。
对于c++,string类型在头文件:#include using namespace std;中
其中c++中string类封装了很多关于字拿雹模符串的操作,包括重载运算符,即能直接以==,!=比较字符串,还有取子符等操作。
想了解更多的话,博客园中这篇不错:
而且你也可以在网络首页肆穗直接输入 c++ string查找资料。
⑹ c#中什么叫序列化操作
在C#中序列化操作简单点来理解就是把内存的东西写到硬盘中,当然也可以写到内存中,谨者而哗晌雹反序列化就是从硬盘中把信息读到内存中。 下面以 BinaryFormatter序列化类Book作为例子说明下什么是序列化。定义类Book: [Serializable]
public class Book
{
string name;
float price;
string author; public Book(string bookname, float bookprice, string bookauthor)
{
name = bookname;
price = bookprice;
author = bookauthor;
}
} 在类的上面增加了属性:Serializable.(如果不加这个属性,将抛出SerializationException异常). 通过这个属性将Book标志为可以序列化的.当然也有另一种方式使类Book可以序列化,那就是实行ISerializable接口了.在这里要注意了:Serializable属性是不能被继承的咯!!! 如果你不想序列乱帆化某个变量,该怎么处理呢?很简单,在其前面加上属性[NonSerialized] .比如我不想序列化 string author; 那我只需要 [NonSerialized] string author; 好了,现在请看怎么实现序列化: 我们使用namespace: using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; 首先创建Book实例,like this: Book book = new Book("Day and Night", 30.0f, "Bruce"); 接着当然要创建一个文件了,这个文件就是用来存放我们要序列化的信息了. FileStream fs = new FileStream(@"C:\book.dat", FileMode.Create); 序列化的实现也很简单,like this: BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, book); 很简单吧!现在我列出整个原代码,包括反序列化. static void Main(string[] args)
{
Book book = new Book("Day and Night", 30.0f, "Bruce"); using(FileStream fs = new FileStream(@"C:\book.dat", FileMode.Create))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, book);
} book = null; using(FileStream fs = new FileStream(@"C:\book.dat", FileMode.Open))
{
BinaryFormatter formatter = new BinaryFormatter();
book = (Book)formatter.Deserialize(fs);//在这里要注意咯,他的返回值是object
}
}
⑺ “c#”中什么叫序列化操作
End Of File,氏饥在电脑的术语缩写通常为 EOF,在作业系统决定资料源无纳汪更多的资料可读取。资料源通常称为档案或串流。
在 C语言,或更精确地说成 C标准函式库,档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集洞核仔) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF 会在编译原始码前展开实际值给预处理器。
⑻ 利用C语言实现形如ABD#G###CE##F##(#表示空)二叉树的反序列化。
你的程序有诸多问题,你的程序运行时候应该也会报错的吧?这个写法不是很通用,不过我还是按照你的源码修改成了你想要的结果。结构上基本一致,可实现基本已经面目全非了。我用字符串代替了手工输入,你要是喜欢手工输入,你可以把我那个注释掉,用你自己的…… 以下是修改后可用的代码: import java.util.*; class Node { Node left; Node Right; char data;// 节点数据 void print() { System.out.println(data + ""); } public Node() { this.left = null; this.Right = null; } public Node(char data) { this.left = null; this.Right = null; this.data = data; } } class BTree { static Node root = new Node();// 为根节点分配空间 static char ch[];// 输入的字符串 static int i = 0; static Node CreateTree()// 先序建立二叉树 { Node node = null; if (ch[i] == '#') { node = null; i++; }else { node = new Node(); node.data = ch[i]; i++; node.left = CreateTree(); node.Right = CreateTree(); } return node; } static public void preorder(Node node)// 先序遍历二叉树 { if (node != null) { node.print(); preorder(node.left); preorder(node.Right); } else { System.out.println("Tree node is empty"); } } } public class Tree { public static void main(String args[]) { Scanner reader = new Scanner(System.in); BTree.ch = new char[16]; BTree.ch[0] = 'a'; // 读取输入字符数组,以*结尾 BTree.ch = "ABC##DE#G##F###".toCharArray(); //for (int i = 0; (BTree.ch[i] = reader.next().charAt(0)) != '*'; i++){} BTree.root = BTree.CreateTree(); BTree.preorder(BTree.root); } }
⑼ C语言文件输出时,输入数据后为什么会出现乱码
if(fwrite(&stud[i],sizeof(struct
studentType),1,fp)!=1)
简单看了下,这行有问题,往文件里写的时候是把一个字符串写进去,stud[i]是一个struct,强行把它序列化的陵链话,内存中的存没卖储不是连续的,这样写就会写入一些没用的数据,导致出错。考虑一下怎么把struct序列枯汪逗化,再看看struct的中的字节是怎么对齐的,建议而已
⑽ C语言中如何序列化一个字符串
var a=new {ID=1,Name="name",OtherInfo="other"耐物兆};
string strJson=new JavaScriptSerializer().Serialize(a);
需要添加System.Web.Extensions.dll库文件引用昌租
需要引蚂坦用System.Web.Script.Serialization命名空间