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命名空間