iT邦幫忙

0

設程式裡定義有下列的變數
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
請看清楚上面的紅字 不要穿越了

看更多先前的討論...收起先前的討論...
dragonH iT邦超人 5 級 ‧ 2020-06-19 01:32:59 檢舉
>設程式裡定義有下列的變數
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

我幫你寄信問你們老師
問作業是一回事, 點進去看是 C 語言的, 發問卻是用 C++ .
發問還這麼傲氣
大家都當過學生,紅字日期基本上老師都會口頭當面講,你自己要記得這個HOMEWORK什麼時候要交,很多老師準備一堆教材,跟日期有關的,不一定會改
簡單說,你這就HOMEWORK還要講啥,搞不好是去年的,你沒交,老師今年雕你不交不准畢業,建議自己想,問同學,還是能得到答案的,是否理解,就看你自己了
淺水員 iT邦大師 6 級 ‧ 2020-06-19 09:50:59 檢舉
我覺得題目說不清楚,有以下兩個問題:
1. 一個 int 要用幾位元去儲存?
2. 要用 big-endian 還是 little-endian 儲存?
九號 iT邦新手 5 級 ‧ 2020-07-13 15:36:13 檢舉
同學 你連自己學的是c語言還是c++都搞不清楚
傻眼欸XD
你拿C++去繳給老師 也是0分你知道嗎
明年你可以再好好跟學弟妹上一次課 別怕
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
小碼農米爾
iT邦高手 1 級 ‧ 2020-06-19 19:37:56
最佳解答

好久沒有寫了,複習一下
不過不知道這個是不是你要的


1. 使用 read 和 write 讀寫

  • open() 用法:

name: 檔案名稱
flags: 相關旗標
return: 檔案描述符

int open(const char *name, int flags)
  • read() 用法:

fd: 檔案描述符
buf: 資料緩衝區
count: 每次讀取的位元組數
return: 讀出的位元組數

ssize_t read(int fd, void *buf, size_t count)
  • write() 用法:

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

2. 使用 fread 和 fwrite 讀寫

  • fopen() 用法:

filename: 檔案名稱
mode: 訪問模式
return: 檔案指標

FILE *fopen(const char *filename, const char *mode)
  • fread() 用法:

ptr: 資料緩衝區
size: 要被讀取的每個元素的大小
nmemb: 元素數目
stream: 檔案指標
return: 成功讀取的元素數目

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
  • fwrite() 用法:

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

3. 使用 fstream (C++ 寫法)

  • fstream.open() 用法:

filename: 檔案名稱
openmode: 訪問模式

void open (const char* filename, ios_base::openmode mode)
  • fstream.read() 用法:

s: 資料緩衝區
n: 讀取的字元數量

istream& read (char* s, streamsize n)
  • fstream.write() 用法:

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

最後祝你畢業順利 ╰( ̄▽ ̄)╭

/images/emoticon/emoticon09.gif

/images/emoticon/emoticon16.gif

0
ch_lute
iT邦新手 5 級 ‧ 2020-06-19 09:52:08

老實講這些題目的程度絕對都是課本範例等級的,想畢業的大學生應該都會讓自己有能力寫出來,除了口頭想畢業實際上不想畢業的之外。
資料結構的課本內容你拿來問還情有可原,這單純基本語法課是在問什麼意思的?
文憑真的沒用,沒拿到這張畢業證書真的沒關係,你不會因為這張證書就能直接做軟工的工作,做別行也不會因為這張證書幫你加分。
除了一些有畢業門檻的員工甄試,銀行、公務員之類的。
你可以先繼續打混,等到想拿文憑的時候直接去研究所2年,反正很多碩班只要求修業幾年,沒要求畢業證書(就像大學沒要求高中畢業證書一樣),到時候直接拿碩士文憑,也不用多花半年一年在這邊搞大學文憑。

這個請會的同學指導一下就可以了,真的是很基本.

ch_lute iT邦新手 5 級 ‧ 2020-06-19 10:00:16 檢舉

幾年前修課的時候助教很嚴格,功課是帶隨身碟過去找他DEMO,程式跑正確也不一定會有80分,跑完還看Code口試問答。Orz

九號 iT邦新手 5 級 ‧ 2020-07-13 15:37:45 檢舉

他ID還叫 只求畢業的大學生
我相信他畢業後馬上就面臨失業了

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-06-19 09:56:04

拿以下去改
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; 
} 

其實題目是C,發問的人,C 跟 C++ 分不清.

ch_lute iT邦新手 5 級 ‧ 2020-06-19 10:05:00 檢舉

我覺得海綿大是故意給C++的XD

我要發表回答

立即登入回答