討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 網路投保旅行平安險 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
c++ 編譯後 程式結束並自動關閉?
更改我的閱讀文章字型大小
作者 : nohto(nohto) 人氣指數超過10000點
[ 貼文 48 | 人氣 10845 | 評價 0 | 評價/貼文 0 | 送出評價 11 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/2/18 上午 10:40:07
#include<iostream>
int main()
{
    std::cout << "Hello World!\n";
    return 0;
}
編譯後,它只是閃了一下,然後就關了?
是程式碼問題?還是編譯器問題,我使用的dev-c++ 來寫的..新手自學,請指導一下
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2624 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/2/18 上午 11:04:52


程式執行完自動關閉,很合理的行為...
不然畫面留一堆執行後的視窗..還要一個一個手動關閉..

你可以用console mode 去執行..這樣就可以看到輸出

也可以在程式中下一個 pause 指令..這樣就會停止程式以便觀看
作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/2/27 下午 03:56:34
#include<iostream>
int main()
{
    std::cout << "Hello World!\n";
    system("PAUSE");
}
作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/2/27 下午 04:18:19
#include<iostream>
using namespace std;//你忘記加入這個了 = =剛剛就覺得怪怪的
int main()
{
    std::cout << "Hello World!\n";
    system("PAUSE");
}
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/2/27 下午 04:23:00
可以用getchar();
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人nohto註記此篇回應為最佳解答 2007/2/27 下午 08:50:28
>編譯後,它只是閃了一下,然後就關了?

Console 程式本來就應該這樣的.


>是程式碼問題?還是編譯器問題,我使用的dev-c++ 來寫的..新手自學,請指導一下

不是這些問題, 只能說是它的 IDE 還有改進的空間. 因為在 VC++ 的 IDE 裡面, 如果你 Run without debugging (Ctrl-F5), 在程式執行完畢後, IDE 會自動加個 "Press any key to continue...".

如果需要看輸出, 正確的做法是在一個 command prompt 的視窗裡執行你的程式.

要讓 console 視窗不關閉, 用任何一個讀取輸入的函式就可以了, 如 getc(stdin) 或 kagaya 大大建議的 getchar() 等函式.

system("pause") 的優點是它很方便, 幾乎任何一個鍵就可以跳出來. 缺點是可攜性不高, 只能用在 DOS 或 Windows 上, 無法用在 *nix 上. 另一個缺點是它相當的 resource heavy.

這些方法在作業練習是可以的,但 production codes 裡並不實用. 因為這麼一來, 程式就不方便在 batch file 或 child process 裡面用, 從而降低了它的實用性.

作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/2/27 下午 09:29:21
原來會對bath file有影響
真糟糕!
作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/14 下午 05:48:31
雖然這篇是舊的文章
但是我想問
可以使用getline來解決這問題嗎
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2624 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/14 下午 07:46:12
有兩個方法..並不用在程式上下特別功夫

1.打開Dos 視窗 或是在[開始]->[執行 ]->鍵入 cmd.exe
然後執行你要的批次檔案或是程式.
這樣這個DOS視窗並不會因為任務結束而關閉

2.使用轉向的功能 prog1.exe >out.txt
這樣就會把os就會自動把輸出的文字存作 out.txt
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/14 下午 08:36:55
>可以使用getline來解決這問題嗎

如果不考慮它的問題, 任何一個讓程式等待輸入的函式都是可以的, getline() 當然也可以.

因為這個函式的作用是讓 console window 停在那裡, 並不是真的要讀什麼資料, 所以一般都盡量選用不需要宣告多餘變數來做參數的函式 (如 getc()).

作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/14 下午 08:47:55
>2.使用轉向的功能 prog1.exe >out.txt
>這樣就會把os就會自動把輸出的文字存作 out.txt

〔補充〕
這個只能存輸出至 standard output 的文字, 不能存輸出至 standard error 的文字. 如果兩個都要存, 用:

  prog1.exe > out.txt 2>&1


〔註〕
這個只能用在 CMD.EXE 的 command shell 上, 或是 *nix 的 Bourne Shell 上. C-shell 用:
  prog1 >& out.txt

作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/17 上午 02:46:11

假設我今天使用的是gcc,作業系統是linux,我使用的語言是c++
g++ *.cpp -o *.exe
我執行程式方法是(input file與output file)在還沒有看到這篇文章之前,我的做法是以下方法
>>./*.exe
>>please insert input file:inputfile
>>please insert output file:outputfile
//以下的程式,是執行上面的敘述
#include<string>
#includee <iostream>
#include<fstream>
using namespac std;
int main( ){
  string line,iFile,oFile;
  cout << "please insert input file:";
  cin >> ifile;
  ifstream inFile(iFile.c_str());
  cout<<"please insert output file:";
  cin>>oFile;
  ifstream cout(oFile.c_str());
     while(getline(inFile,line))
  {
   cout<<line<<endl; 
  }
}
以上的程式是我之前在vc下所撰寫的,最近轉移到linux下,因為我處理的資料多(可能不大,但是多),我一個一個去輸入檔案,輸出檔案,對我來說,是非常沒有效果,我會希望我撰寫的程式如同shell一樣方便,不一定需要那麼有效率,
而我看到R大給的意見後,突發奇想,我可以不需要在程式特地去撰寫input和output的處理嗎?
只要這樣寫:
./*.exe inputfile > outputfile 這樣可以嗎?

而上面的敘述,我的程式只要這樣撰寫就好?
#include<string>
#includee <iostream>
#include<fstream>
using namespac std;

int main( ){
   string line;
    cout << "please insert input file:";
    cin >> ifile;
    ifstream inFile(iFile.c_str());
    while(getline(inFile,line)){
    cout<<line<<endl;
  }
}
不知道我的觀念有錯誤嗎?可能在標頭檔,一些宣告方面我沒有給的很詳細,但是我大略想要描述的觀念是:(以shell指命當例子)
cat file1 file2 >file3 ,就可以合併檔案
不知道我的觀念有錯誤嗎?
可能會錯很多吧!我開始撰寫程式時,就已經跳開turbe c了,我直接進入vc
不過我真的很希望我這個觀念是對的!>""<




 
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/17 上午 03:50:38
〔to 邪月〕

不是很清楚你真正要做什麼, 只要資料是從 standard input 讀進來料的, 都可以從一個 file 那裡 redirect 進來. 只要資料是從 standard output 輸出的, 都可以 redirect 到另一個 file 裡去, 或是 redirect 到另一個 standard input 裡.

這裡給你個很簡單的例子看跟你的想法有沒有類似之處:

  #include <iostream>

  int main(void)
  {
    int nCount;

    std::cin >> nCount;

    int nData;
    double nSum = 0.0;
    for (int n = 0; n < nCount; ++n)
    {
      std::cin >> nData;
      nSum += nData;
    }

    std::cout << nSum / nCount << std::endl;
  }

這個例子要使用者先輸入有多少筆資料, 然後進入一個 loop 讀個別資料(都是 int), 相加, 最後算出平均值.

這個例子把所有的 prompt 都刪掉了, 而且也不考慮到 error handling 的問題 (我說是個很簡單的例子嘛 ^^).

要讀資料檔, 程式不需要開檔, 用 redirect 就可以把資料讀入. 前提是: 資料跟程式的輸入要對應.

例如: 如果資料檔 data.txt 的內容是:

4 2 4 8 16

假定執行檔的名字是 myprog, 那:

  myprog < data.txt

就會印出 7.5 (那是 (2+4+8+16)/4 的結果).

如果這個例子跟你的想法差很多, 請你把你的想法詳細的說一下. 可能的話, 最好把目前的做法詳細的說明一下, 如果能看得出一個 pattern 那就更好了.

作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/17 下午 04:52:45
你已經切中我的想法,只是我延伸的觀念是
多個檔案之間的處理,我用例子分別說明
1.拿shell 來當例子(因為我聽說shell是用c寫出來)
file1
123
456
789

file2
abc
def
ghi

cat file1 file2 > file3
得出來結果:
file3
123
456
789
abc
def
ghi

2.他可以直接在兩個input file中,依據cat的程式,直接輸出outputfile
這個便利對我來說是很大的誘惑,這樣我以後處理檔案(用自己撰寫的程式),
檔案有規律性,我就可以搭配shellscript,批次處理檔案
我中心觀念在這,換個角度來想,C++撰寫的*.EXE
應該也可以這樣處理,用我以前的觀念來寫,會有下面的結果
>>*.EXE
>>Please insert input file:
>>please insert output file:
,這樣非常沒有效率,所以我才來提問
因為我ㄧ直以為c++不像perl一樣,屬於指命型式(我不會perl)


作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2189 | 人氣 89850 | 評價 10120 | 評價/貼文 4.62 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/17 下午 10:59:39
這樣, 你應該用 程式的 argument 去做呀,

#include <iostream>
int main( int argc, char **argv )
{
  int i;
  for( i=0; i<argc; i++ )
    std::cout << argv[i] << std::endl;
  return 0;
}

假設你的程式叫 myprogram.exe, 你再如下的執行...

myprogram hello1 hello2 hello3

argv[1] 就會是 hello1
argv[2] 就會是 hello2
argv[3] 就會是 hello3

如此類推


作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/18 上午 12:32:06
>你這篇就是我再另一篇想要表達的問題

那另一篇就不回覆了 ^^


>原來可以這樣做,那請問一下關於arg[ ]
>市面上的程式書有嗎

很多書應該都有, 但篇幅可能連一章都不到, 因為幾段話就講完了. 用書本的 index 來找比較容意找到.

這裡很簡單的跟你講一下:

標準的 C (或 C++, 以下同, 除非有另行說明) 語言有兩種 main() 的格式:
  int main(void) { ... }
  int main(int argc, char *argv[]) { ... }

'argc', 'argv' 只是個參數, 名字可自訂. 習慣上大家都用 argc, argv, 是個約定俗成的「標準」.

argv 是個陣列, 每個陣列的成員是個 char*.

所以 '*argv[]' 也可以寫成 **argv. 從參數的角度來看, 這兩種寫法是一樣的 (如果你不懂為什麼, 表示你的指標概念要加強).

這兩個 main() 的格式, 任何一個在 hosted environment (就是有 OS 的系統) 上的, 自稱是符合標準的 C 編譯器都要支援的.

語言標準也允許編譯器在這兩個格式上增加自訂的格式. 所以很多編譯器有第三種格式:

  int main(int argc, char *argv[], char *env[]) { ... }

只要編譯器有 document, 那就符合標準的規格, 但應該視為「不可攜」(non-portable).

argc, argv 是 C 程式用來接受使用者的附加資料, 是透過系統傳進來的.

語言標準對 argc, argv 有些規定:

- argc 不能是負值.

- argv[argc] 必須是個 null pointer.

- 如果 argc 的值大於零, argv[0] 到 arv[argc-1] 的陣列內容是個指向字串的指標.

如程式名字是 myprog, 使用者輸入:

  myprog Hello how are you

那:

  argc 會等於 5. ('myprog' 算第一個).

  argv 的內容如下:

     +====+
  〔0〕| *--+--> "myprog"〔註〕
     |----|
  〔1〕| *--+--> "Hello"
     |----|
  〔2〕| *--+--> "how"
     |----|
  〔3〕| *--+--> "are"
     |----|
  〔4〕| *--+--> "you"
     |----|
  〔5〕|NULL|
     +====+

〔註〕argv[0] 至少指向程式的名字, 在有些系統裡, 這個也包括程式的 path. 如果在執行的時候系統無法提供程式的名字, 那 argv[0] 必須指向一個空的字串 ("").

argv[1] 到 argv[argc-1] 叫做 program parameter (程式的參數), 也就是一般所說的 command line argument.


作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/20 上午 12:42:28
恩,我後來有去看how to program ,primer,...等bible的書
沒錯,幾乎都只有提到一頁,我之後也改用這去撰寫linux程式
搭配shell很有效率
>>所以 '*argv[]' 也可以寫成 **argv. 從參數的角度來看,
>>這兩種寫法是一樣的 (如果你不懂為什麼, 表示你的指標概念要加強).
>>我最近會去看c關於指標的書,**argv類似指標陣列吧~~沒錯的話
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/20 上午 01:20:56
>恩,我後來有去看how to program ,primer,...等bible的書
>沒錯,幾乎都只有提到一頁,我之後也改用這去撰寫linux程式
>搭配shell很有效率

GNU C Library 裡有個 getopt() 函式, 專門用來幫助程式員處理複雜多樣化的 command line 輸入, 你可以去研究看看.


>>>我最近會去看c關於指標的書,**argv類似指標陣列吧~~沒錯的話

沒錯 ^^

作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/20 下午 08:33:55
我會去找看看
但是gnu不是要付費?
我有去打一下關鍵字,他說linux下有
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/20 下午 09:02:37
>我會去找看看
>但是gnu不是要付費?

GNU 是免費的.


>我有去打一下關鍵字,他說linux下有

實際上你已經在用 GNU 了. 看看 Linux 跟 GNU 的關係:
  http://www.gnu.org/gnu/linux-and-gnu.html

作者 : angleevil(邪月) 貼文超過200則人氣指數超過10000點
[ 貼文 485 | 人氣 18722 | 評價 720 | 評價/貼文 1.48 | 送出評價 39 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/21 下午 06:09:07
恩~我會去看的 謝謝R大
作者 : keir(初學者)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/4/5 下午 09:00:13
請教各位大大...我用了 stdlib.h system("pause"); 後還是一閃較跳掉了呢@@""

因為我是個非常非常新的初學者 對於找出錯誤的地方實在是不太行...不知道各位大大

是否可教導一下...我做的是 檔案複製程式...但是編譯執行後卻一閃跳掉..以下是原始碼

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    char ch;
    char src[] = "";
    char dst[] = "";
    FILE *from,*to;
    if ((from = fopen(src,"rb")) == NULL) exit(1);
    if ((to = fopen(dst,"wb")) == NULL) exit(1);
    while(fread(&ch,sizeof(ch),1,from) != 0 )
     fwrite(&ch,sizeof(ch),1,to);
    fclose(from);
    system("pause");
    fclose(to);
    return 0;
}

我猜想會不會是char src[]="讀取的檔案名稱" ,char dst[]="複製位置的檔案名稱" 這兩行的問題...,不過實在是看不出問題在哪...還是說我使用錯誤呢@@""
抱歉喔..麻煩各位大大了~"~
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/4/5 下午 10:08:01
>請教各位大大...我用了 stdlib.h system("pause"); 後還是一閃較跳掉了呢@@"

'pause' 是視窗系統裡 command shell 的指令. 你的系統是什麼?


>因為我是個非常非常新的初學者 對於找出錯誤的地方實在是不太行...不知道各位大大
>是否可教導一下...我做的是 檔案複製程式...但是編譯執行後卻一閃跳掉..以下是原始碼

編譯器名稱? 版本?
系統名稱?

>#include <stdio.h>
>#include <stdlib.h>
>
>int main (void)
>{
> char ch;
> char src[] = "";
> char dst[] = "";

'src' 跟 'dst' 真的什麼都沒有嗎? 這真是你原來的程式?


> FILE *from,*to;
> if ((from = fopen(src,"rb")) == NULL) exit(1);

合乎標準的 exit() 值及 main() 的回傳值是: 0, EXIT_SUCCESS, 及 EXIT_FAILURE. 後兩者需要 <stdlib.h> 這個頭檔. 0 相等於 EXIT_SUCCESS.

〔程式風格〕
1. 不要把 if 的主體跟 if() 的式子放在同一行.
2. 即使主體只有一行, 也養成用 {} 的習慣.

  if (...)
  {
    exit(EXIT_FAILURE);
  }

〔原因〕
1. 當你 single step 的來 debug 程式時, 如果全部放在一行, 你無從知道到底 if(...) 的結果是「是」還是「否」, 主體的式子有沒有執行到.

2. 可以隨時增減主體 {} 裡面的式子, 方便維修.

3. 程式邏輯清楚明白, 沒有誤導性.

4. 即使 {} 裡的式子是 condition compilation, 邏輯不會因為不同的 condition 而更改.

第 4 點你目前可能不明白, 等你有經驗後就會明白. 其他有經驗的朋友應該會明白.



> if ((to = fopen(dst,"wb")) == NULL) exit(1);

如果上面 'src' 成功開啟, 而這裡的 'dst' 開啟失敗, 那你就忘了把 'src' 關閉. 雖然在大部份的系統上, 程式結束會自動關閉, 但不能依賴這個. 你還是要養成「有頭有尾」的好習慣.

如果你是用 C++ 的 std::fstream, 那你可以不用特地呼叫 close() 成員, 因為解構子會自動呼叫 close().


> while(fread(&ch,sizeof(ch),1,from) != 0 )
> fwrite(&ch,sizeof(ch),1,to);
> fclose(from);
> system("pause");
> fclose(to);
> return 0;
>}
>
>我猜想會不會是char src[]="讀取的檔案名稱" ,char dst[]="複製位置的檔案名稱" 這兩行的問題...,不過實在是看不出問題在哪...還是說我使用錯誤呢@@"

貼程式碼時請用 copy-and-paste, 不要重打. 因為在重打的過程中, 你有可能會打錯, 或是把原本有的錯誤無意中改正了. 這樣我們看到的就不是你原本的問題.

作者 : keir(初學者)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/4/5 下午 11:10:48

>>請教各位大大...我用了 stdlib.h system('pause'); 後還是一閃較跳掉了呢@@'
>
>''pause'' 是視窗系統裡 command shell 的指令. 你的系統是什麼?
系統? windows 指的是這個?


>編譯器名稱? 版本?
>系統名稱?
我是用Dev-c++ 4.9.9.2 的版本
>>#include <stdio.h>
>>#include <stdlib.h>
>>
>>int main (void)
>>{
>> char ch;
>> char src[] = ';
>> char dst[] = ';
>
>''src'' 跟 ''dst'' 真的什麼都沒有嗎? 這真是你原來的程式?
>
>
>> FILE *from,*to;
>> if ((from = fopen(src,'rb')) == NULL) exit(1);
>
>合乎標準的 exit() 值及 main() 的回傳值是: 0, EXIT_SUCCESS, 及 EXIT_FAILURE. 後兩者需要 <stdlib.h> 這個頭檔. 0 相等於 EXIT_SUCCESS.
>
>〔程式風格〕
>1. 不要把 if 的主體跟 if() 的式子放在同一行.
>2. 即使主體只有一行, 也養成用 {} 的習慣.
>
>  if (...)
>  {
>    exit(EXIT_FAILURE);
>  }
>
>〔原因〕
>1. 當你 single step 的來 debug 程式時, 如果全部放在一行, 你無從知道到底 if(...) 的結果是「是」還是「否」, 主體的式子有沒有執行到.
>
>2. 可以隨時增減主體 {} 裡面的式子, 方便維修.
>
>3. 程式邏輯清楚明白, 沒有誤導性.
>
>4. 即使 {} 裡的式子是 condition compilation, 邏輯不會因為不同的 condition 而更改.
>
>第 4 點你目前可能不明白, 等你有經驗後就會明白. 其他有經驗的朋友應該會明白.
>
>
>
>> if ((to = fopen(dst,'wb')) == NULL) exit(1);
>
>如果上面 ''src'' 成功開啟, 而這裡的 ''dst'' 開啟失敗, 那你就忘了把 ''src'' 關閉. 雖然在大部份的系統上, 程式結束會自動關閉, 但不能依賴這個. 你還是要養成「有頭有尾」的好習慣.
>
>如果你是用 C++ 的 std::fstream, 那你可以不用特地呼叫 close() 成員, 因為解構子會自動呼叫 close().
>
>
>> while(fread(&ch,sizeof(ch),1,from) != 0 )
>> fwrite(&ch,sizeof(ch),1,to);
>> fclose(from);
>> system('pause');
>> fclose(to);
>> return 0;
>>}
>>
>>我猜想會不會是char src[]='讀取的檔案名稱' ,char dst[]='複製位置的檔案名稱' 這兩行的問題...,不過實在是看不出問題在哪...還是說我使用錯誤呢@@'
>
>貼程式碼時請用 copy-and-paste, 不要重打. 因為在重打的過程中, 你有可能會打錯, 或是把原本有的錯誤無意中改正了. 這樣我們看到的就不是你原本的問題.

恩恩 謝謝大大的指教@@"" 再貼出之後自己又弄了一下才發現..原來只是路徑設置錯誤的原因~"~(迷之聲:這樣還麻煩其他人阿=.=)

總而言之還是謝謝大大的指教...對於程式風格方面我會改進的@@""
作者 : bibi9898(bibi)
[ 貼文 6 | 人氣 385 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/10/21 下午 07:14:54
最後面加一行
system("pause");
就不會閃一下就關掉了
作者 : safestation(safesation)
[ 貼文 7 | 人氣 401 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/10/26 下午 11:45:20
system("pause")
or
getchar();
or
cin.get();
作者 : flyinsky2626(小熊)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/15 下午 08:21:18
你要讓程式在顯示MS-DOS的時候暫停
就要在標頭檔加個#include<stdlib.h>
在最後面的return 0;之前加個
system ("pause");
這樣程式就會暫停住了
作者 : manufacture(哈)
[ 貼文 15 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/5/19 上午 12:20:44
這個我也遇過

之前沒看書直接完....

後來查資料才知道
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.296875