史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2007-12-17, 10:45 PM   #1
a19870504
註冊會員
榮譽勳章

勳章總數
UID - 283728
在線等級: 級別:2 | 在線時長:15小時 | 升級還需:6小時級別:2 | 在線時長:15小時 | 升級還需:6小時
註冊日期: 2007-10-25
文章: 34
精華: 0
現金: 56 金幣
資產: 56 金幣
預設 討論 - 請問資料流開啟檔案判斷是否成功

書上這一部份小弟又沒用了 我看不懂他的意思 對不起請容我在發問

fstream FileInput(FileNameIn, ios::in)
if (!FileInput)
{
cout << "檔案" << FileNameIn
<< "開啟失敗! << endl;
exit(1);
}

可以請問一下為什麼判斷是否成功的條件式會是 !FileInput
! 不是相反地意思嗎?? (就是除了它以外)
書上的說明我也看不懂 什麼成功ture會傳回1 不明白他的語意
奇摩知識也找不到 請賜教
a19870504 目前離線  
送花文章: 0, 收花文章: 6 篇, 收花: 14 次
回覆時引用此帖
舊 2007-12-17, 11:01 PM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設

這一行 fstream FileInput(FileNameIn, ios::in)
一下子做了兩件事
1. 宣告一個 fstream型態的 物件變數,其名稱是 FileInput
2. 開啟 FileNameIn檔案

利用 FileInput來判讀是否為 0 (檔案開啟失敗 的話 FileInput會等於 0)
if (!FileInput) 翻譯過來就是
如果 FileInput等於零 則失敗

此帖於 2007-12-18 01:50 PM 被 mini 編輯. 原因: 訂正
mini 目前離線  
送花文章: 2013, 收花文章: 8002 篇, 收花: 26806 次
回覆時引用此帖
舊 2007-12-18, 07:28 AM   #3 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 283728
在線等級: 級別:2 | 在線時長:15小時 | 升級還需:6小時級別:2 | 在線時長:15小時 | 升級還需:6小時
註冊日期: 2007-10-25
文章: 34
精華: 0
現金: 56 金幣
資產: 56 金幣
預設

那為什麼會是用指標名稱來判斷是否為0或1
是只要開豈不成功此檔案就會傳遞一個非0的訊息給系統
然後我們在利用這個訊息來寫條件式??

然後檔案開豈不成功所以訊息會是1在給EXIT這個函數而結束動作??


那這樣的話可以單寫成 if( !0 ) 嗎?

還有到底成功的訊息是會傳0還是1 課本一下說0一下說1 我好槁不懂
a19870504 目前離線  
送花文章: 0, 收花文章: 6 篇, 收花: 14 次
回覆時引用此帖
舊 2007-12-18, 08:23 AM   #4 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設

FileInput 被宣告成一個 fstream(檔案流)物件變數
並不是一個指標不指標的關係

所謂 物件 有點像 class
但 物件 本身就是一個容積 (class 就要用 . 來存取內部成員資料)
舉個例
物件A 可以 if(物件A==1){...}
類別B 就需 if(類別B.err>0){...}

此帖於 2007-12-18 01:50 PM 被 mini 編輯. 原因: 訂正
mini 目前離線  
送花文章: 2013, 收花文章: 8002 篇, 收花: 26806 次
回覆時引用此帖
舊 2007-12-18, 11:49 AM   #5 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 283728
在線等級: 級別:2 | 在線時長:15小時 | 升級還需:6小時級別:2 | 在線時長:15小時 | 升級還需:6小時
註冊日期: 2007-10-25
文章: 34
精華: 0
現金: 56 金幣
資產: 56 金幣
預設

MINI大哥 我看書上是說 ture為1 flast 為0 還是書上寫錯阿??
因為LINUX也是0為ture

這是小弟早上思考出來的理解方式 不知道這樣算不算對

就是當開啟檔案時有開啟動作所以資料流會存為1 或是想成預設情況下就是1

但是最後開啟失敗資料流要傳回非0的訊息給系統 就利用!(想成資料流預設為1)

剛好府合條件非1的值 所以執行 if 條件式

最後exit() function 要結束此開啟檔案的動作 書上是寫exit(1)

就是資料流代表1所以看成結束資料流目前的動作(開啟檔案)

可以想成這樣嗎 因為這是我想了一個早上感覺我可以懂又滿合理的說法
a19870504 目前離線  
送花文章: 0, 收花文章: 6 篇, 收花: 14 次
回覆時引用此帖
舊 2007-12-18, 01:56 PM   #6 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設

引用:
作者: a19870504 查看文章
MINI大哥 我看書上是說 ture為1 flast 為0 還是書上寫錯阿??
因為LINUX也是0為ture

這是小弟早上思考出來的理解方式 不知道這樣算不算對

就是當開啟檔案時有開啟動作所以資料流會存為1 或是想成預設情況下就是1

但是最後開啟失敗資料流要傳回非0的訊息給系統 就利用!(想成資料流預設為1)

剛好府合條件非1的值 所以執行 if 條件式

最後exit() function 要結束此開啟檔案的動作 書上是寫exit(1)

就是資料流代表1所以看成結束資料流目前的動作(開啟檔案)

可以想成這樣嗎 因為這是我想了一個早上感覺我可以懂又滿合理的說法
真不好意思
之前搞錯了 (前面的回覆都改了)

總之 FileInput 執行開檔動作後
會得到一個返回值
用這個返回值是否為零
就知道是否開啟成功就對了
(為零 就是失敗)

一般程式語言的布林設計是
不為零 就是 True
為零 就是 False

所以 !0 會變成 True
mini 目前離線  
送花文章: 2013, 收花文章: 8002 篇, 收花: 26806 次
回覆時引用此帖
舊 2007-12-20, 11:55 PM   #7 (permalink)
註冊會員
 
joebin 的頭像
榮譽勳章

勳章總數
UID - 270712
在線等級: 級別:2 | 在線時長:16小時 | 升級還需:5小時級別:2 | 在線時長:16小時 | 升級還需:5小時
註冊日期: 2007-06-06
住址: 過去*現在*未來
文章: 42
精華: 0
現金: 58 金幣
資產: 118 金幣
預設

我來進行所有統整解釋吧


Q1:為什麼判斷是否成功的條件式會是 !FileInput??
A1:因為FileInput是你函入文件檔時的輸入指令(請看以下例子)
語法:
int main(){  //從主函式開始
  int n;
  ifstream fin("in.txt");
  ofstream fout("out.txt");
  fin >>n;
  fout <<n+1;
  return 0;
}
以上面的主函式來說明

1.藍色部分C/C++裡面是執行函入和輸出的固定程式碼

2.綠色部分則是依照你給定的變數作為指令在運用,好比說cout好了,cout 的定義為"輸出",則在上面各綠色部分的"fout"是個人設"fout"這個變數去充當輸出的指令,也就是說只要我把cout改成fout,則該輸出將會輸出於我要的文件"out.txt"裡,fin也是如此,把cin改成fin則會從我選定的文件輸入,假如你把ifstream fin("in.txt");這段改為ifstream f("in.txt");,則表示你設"f"這個變數作為檔案輸入的指令

3.紅色部分為你要函入或輸出的文件擋,一定要附上附檔名,若存放位置不在debug這個資料夾裡,則要註明從哪輸入(當你開一個文件檔時,上頭不是有欄文件檔的存放位置,把那欄複製貼在紅色部分前面即可)


Q2:為什麼會是用指標名稱來判斷是否為0或1??
A2:因為電腦的世界中只有0或1在跑(有電流經過或無電流經過),至於0和1的運用
語法:
int a;
cin >>a;
if((a%=2))
  cout  a*2;
return 0;
就以上指令而言,若a%2=1(a為奇數),則會進入藍色部分的步驟,若a%2=0,則不會進入,為何呢??因為在電腦世界中,0代表false,1代表truth,在執行藍色部分之前會先經過if的條件式判斷,if這個指令要進行其子函式(藍色部分)前,必須得到truth的回應才會執行,也就是說若if (!FileInput)要執行其子函式,則需!FileInput為truth,但又"!"有否定意味在,所以FileInput的值要為false(0),也就代表沒有輸入才會執行if的子函式


以上,了解嘛??
joebin 目前離線  
送花文章: 15, 收花文章: 18 篇, 收花: 28 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
SQL - MySQL 資料庫的備份與還原 Admin1 論壇程式討論區 1 2007-11-25 10:16 PM
疑問 - 請問資料夾下的檔案... clout 一般電腦疑難討論區 3 2007-11-22 10:34 PM
求助 - 變更開啟檔案或資料夾的的順序 王小二 一般電腦疑難討論區 3 2007-06-25 11:04 PM


所有時間均為台北時間。現在的時間是 02:53 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1