設程式裡定義有下列的變數
intarr[]={12,4,5,6};
int a=12,b=16;
A. 試利用write() 函數將這些變數的值以二進位的模式寫入檔案hw12_12.bin中。
B. 試利用read() 函數將hw12_12.bin檔案中的內容取出,並顯示在螢幕上。
C. 請使用fwrite()函數,將變數的值改以二進位檔案的格式寫入檔案hw12_14.bin中。
請使用fread() 函數將檔案hw12_14.bin的內容取出,並顯示在螢幕上。
記得別傳這個https://www.pws.stu.edu.tw/shchen/Handout/C_Language_flag4e_ch12_Homework.pdf
請看清楚上面的紅字 不要穿越了
好久沒有寫了,複習一下
不過不知道這個是不是你要的
name: 檔案名稱
flags: 相關旗標
return: 檔案描述符
int open(const char *name, int flags)
fd: 檔案描述符
buf: 資料緩衝區
count: 每次讀取的位元組數
return: 讀出的位元組數
ssize_t read(int fd, void *buf, size_t count)
fd: 檔案描述符
buf: 要寫入的資料
count: 每次寫入的位元組數
return: 寫入的位元組數
ssize_t write(int fd, const void *buf, size_t count)
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int arr[] = {12, 4, 5, 6};
int a = 12, b = 16;
int f;
//----- 寫入 -----
//開啟檔案
f = open("hw12_12.bin", O_CREAT|O_WRONLY|O_BINARY);
//寫入資料
write(f, arr, sizeof(arr));
write(f, &a, sizeof(a));
write(f, &b, sizeof(b));
//關閉檔案
close(f);
//----- 寫入 -----
//----- 讀取 -----
//開啟檔案
f = open("hw12_12.bin", O_CREAT|O_RDONLY|O_BINARY);
int temp;
//讀取資料
while (read(f, &temp, sizeof(temp)) == sizeof(temp))
{
printf("%d ", temp);
}
//關閉檔案
close(f);
//----- 讀取 -----
system("pause");
return 0;
}
//結果
12 4 5 6 12 16
filename: 檔案名稱
mode: 訪問模式
return: 檔案指標
FILE *fopen(const char *filename, const char *mode)
ptr: 資料緩衝區
size: 要被讀取的每個元素的大小
nmemb: 元素數目
stream: 檔案指標
return: 成功讀取的元素數目
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: 要寫入的資料
size: 要被寫入的每個元素的大小
nmemb: 元素數目
stream: 檔案指標
return: 成功寫入的元素數目
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int arr[] = {12, 4, 5, 6};
int a = 12, b = 16;
FILE *fp;
//----- 寫入 -----
//開啟檔案
fp = fopen("hw12_14.bin", "wb");
//寫入資料
fwrite(arr, 1, sizeof(arr), fp);
fwrite(&a, 1, sizeof(a), fp);
fwrite(&b, 1, sizeof(b), fp);
//關閉檔案
fclose(fp);
//----- 寫入 -----
//----- 讀取 -----
//開啟檔案
fp = fopen("hw12_14.bin", "rb");
int temp;
//讀取資料
while (fread(&temp, 1, sizeof(temp), fp) == sizeof(temp))
{
printf("%d ", temp);
}
//關閉檔案
fclose(fp);
//----- 讀取 -----
system("pause");
return 0;
}
//結果
12 4 5 6 12 16
filename: 檔案名稱
openmode: 訪問模式
void open (const char* filename, ios_base::openmode mode)
s: 資料緩衝區
n: 讀取的字元數量
istream& read (char* s, streamsize n)
s: 要寫入的資料
n: 寫入的字元數量
ostream& write (const char* s, streamsize n)
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
int arr[] = {12, 4, 5, 6};
int a = 12, b = 16;
fstream file;
//----- 寫入 -----
//開啟檔案
file.open("hw12_16.bin", ios::out|ios::binary);
//寫入資料
file.write((char *)arr, sizeof(arr));
file.write((char *)&a, sizeof(a));
file.write((char *)&b, sizeof(b));
//關閉檔案
file.close();
//----- 寫入 -----
//----- 讀取 -----
//開啟檔案
file.open("hw12_16.bin", ios::in|ios::binary);
int temp;
//讀取資料
while (file.peek() != EOF)
{
file.read((char *)&temp, sizeof(temp));
printf("%d ", temp);
}
//關閉檔案
file.close();
//----- 讀取 -----
system("pause");
return 0;
}
//結果
12 4 5 6 12 16
最後祝你畢業順利 ╰( ̄▽ ̄)╭
老實講這些題目的程度絕對都是課本範例等級的,想畢業的大學生應該都會讓自己有能力寫出來,除了口頭想畢業實際上不想畢業的之外。
資料結構的課本內容你拿來問還情有可原,這單純基本語法課是在問什麼意思的?
文憑真的沒用,沒拿到這張畢業證書真的沒關係,你不會因為這張證書就能直接做軟工的工作,做別行也不會因為這張證書幫你加分。
除了一些有畢業門檻的員工甄試,銀行、公務員之類的。
你可以先繼續打混,等到想拿文憑的時候直接去研究所2年,反正很多碩班只要求修業幾年,沒要求畢業證書(就像大學沒要求高中畢業證書一樣),到時候直接拿碩士文憑,也不用多花半年一年在這邊搞大學文憑。
拿以下去改
1.C read/write
2.C fread/fwrite
只要補上 int array 的部份應該就可以了
=================== 底下是 C++ 的部份,應該可以忽略
我改這裡
只寫出 A, B 兩個部份
其他部份就看緣份了
#include <iostream>
#include <fstream>
using namespace std;
class Contestant {
public:
// Instance variables
int arr[];
int a;
int b;
};
int Contestant::write_to_file()
{
ofstream file_obj;
file_obj.open("hw12_12.bin", ios::app);
Contestant obj;
obj.arr = {12, 4, 5, 6};
obj.a = 12;
obj.b = 16;
file_obj.write((char*)&obj, sizeof(obj));
return 0;
}
int Contestant::output_to_screen()
{
ifstream file_obj;
file_obj.open("hw12_12.bin", ios::in);
Contestant obj;
file_obj.read((char*)&obj, sizeof(obj));
cout << obj.arr << endl;
cout << obj.a << endl;
cout << obj.b << endl;
return 0;
}
int main()
{
Contestant object;
object.write_to_file();
object.output_to_screen();
return 0;
}