請問為何執行畫面無法停住

Home Home
引用 | 編輯 csr
2011-05-08 20:29
樓主
推文 x0
小弟從網路下載此程式下來練習
但是產生執行檔後
要執行看結果
為何會一閃而過
確沒停住
我已看了很多遍
就是找不出原因
希望大大們能幫忙指導
謝謝

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

int main(int argc, char* argv[])
{
FILE *fp;
char ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 totsi
2011-05-10 09:24
1樓
  
目前沒啥時間測程式碼,所以僅能給個方向而已,不好意思嚕

你有用過debug模式跑嗎?

如果程式可以跑debug的話,在所有的return的地方都下中斷點。

如果我沒猜錯的話,這程式應該是從第一個或是第二個判斷就跳掉了。

但是我不知道這程式的用途,所以就要麻煩您先瞭解一下,這程式用途是要用來做什麼了。

關於newline warnning的問題,可參考底下連結
http://www.google.com.tw/search?sourceid=chrome&ie=UTF-8&q=no+newline+at+end+of+file

希望對您有幫助~ 表情

獻花 x1
引用 | 編輯 csr
2011-05-11 18:08
2樓
  
下面是引用 totsi 於 2011-05-10 09:24 發表的 : 到引言文
目前沒啥時間測程式碼,所以僅能給個方向而已,不好意思嚕

你有用過debug模式跑嗎?

如果程式可以跑debug的話,在所有的return的地方都下中斷點。

如果我沒猜錯的話,這程式應該是從第一個或是第二個判斷就跳掉了。

但是我不知道這程式的用途,所以就要麻煩您先瞭解一下,這程式用途是要用來做什麼了。

關於newline warnning的問題,可參考底下連結
http://www.google.com.tw/search?sourceid=chrome&ie=UTF-8&q=no+newline+at+end+of+file

希望對您有幫助~ 表情
感謝大大的提示
小弟留了空行
它依然跳出這樣警告
不知是為什麼
而且執行檔依舊開不出來
這個問題是要我們輸入一些字
那它會將字值統記出來
但是小弟才剛學這一章檔案的管理
發覺它真的超難
不知要怎麼度過這一觀
不過
還是對大大的熱忱
表達小弟的感激
謝謝

獻花 x0
引用 | 編輯 totsi
2011-05-12 10:50
3樓
  
執行檔您是直接點選八?

依他程式看來,是根據接近來的command line做資料處理。

所以您如果是在windows直接點的話,就會在第一個return就出去了~

所以這也是我建議您使用debug來確認的動作。

debug要好用,就要會下中斷點,就把可能造成程式結束的地方都設中斷。

之後就很容易抓到說,在何處程式結束了。

會建議您,有空看一下有關程式command line的相關資料,會對您這問題有所幫助。

至於在下不是資工出身的,所以檔案管理在做什麼在下也不曉得~

如只是單純的讀寫檔的話..fopen, fwrite, _write..等函式會用就夠了。

至於檔案如果是ASCII的內容的話,只要內容結構定義的明確就好。

(Ex:INI file)

Binary的部分的話,可能就會需要您說的檔案管理八?

如以上論點有錯,還煩請指教修正。

畢竟我也是亂玩自學的而已XDD

獻花 x1
引用 | 編輯 csr
2011-05-12 14:13
4樓
  
真的是很感謝大大這麼寶貴的意見與資料
因為小弟讀的是商
所以這電腦是因喜好而玩地
完全沒有基楚
如是之故
很多東東多只是初次學習
所以真的很感謝大大無私的告知
小弟心領了
謝謝再謝謝

獻花 x0
引用 | 編輯 三仙
2011-05-12 18:55
5樓
  
下面是引用 totsi 於 2011-05-12 10:50 發表的 : 到引言文
至於在下不是資工出身的


我也不是資工的 

獻花 x1
引用 | 編輯 totsi
2011-05-13 15:33
6樓
  
下面是引用 csr 於 2011-05-12 14:13 發表的 : 到引言文
真的是很感謝大大這麼寶貴的意見與資料
因為小弟讀的是商
所以這電腦是因喜好而玩地
完全沒有基楚
如是之故
很多東東多只是初次學習
所以真的很感謝大大無私的告知
小弟心領了
謝謝再謝謝

這邊提供一個網頁,說的不見得深入,但有些基本觀念還蠻清楚的:
http://caterpillar.onlyfun.net/Gossip/CppGossip/CppGossip.html

可以參考看看。

如果是單純喜好的話,會建議先找一本工具書,跟一本範例書。工具書在看不懂語法或函式用法的時候可以參考。範例書可以學習怎麼使用語法跟函式。

由於在下的c++是亂學的,所以沒辦法可以推薦您好的書。所以會建議您,可以另外開一個新主題,或是用搜尋的,看有沒有人問過,或建議過,初學c/c++可以參考哪些書籍。

如果是VB的話,在下會推王國榮系列,至少在下買的兩本觀念都很清楚。C++的就殘念了。XD

畢竟有時候網路資料考驗的是搜尋功力,所以不曉得如何入門的話,可以先找書嚕。

至於問問題的部分,在下看到您有在下以前的毛病,所以想跟您分享一下:
1.如果是網路找來的sample有問題,請提供來源網址,或是sample的用途說明。以及如何使用這個sample。
  這樣可以避免回覆的人,誤會您的意思。也可以縮短來回問答的時間。
2.提供您的使用方式,以及遇到的問題。
  這樣回覆的人,才能知道是操做的問題,還是程式的問題。
3.拿到sample後,先看一下sample用途設計的流程在程式碼內是如何執行的。
  確認傳入的參數是否正確,以及例外處理流程視針對何種狀況。
4.善用debug抓不預期的執行行為。
  說真的,debug模式是您的好幫手。

以上只是在下以前撞過的牆,希望繞路的方式對您有幫助。表情

問題問的好,答案少不了,與您共勉之。

PS.最近啃OpenGL啃到有點精神異常了XD。

獻花 x1
引用 | 編輯 csr
2011-05-13 18:32
7樓
  
下面是引用 totsi 於 2011-05-13 15:33 發表的 : 到引言文

這邊提供一個網頁,說的不見得深入,但有些基本觀念還蠻清楚的:
http://caterpillar.onlyfun.net/Gossip/CppGossip/CppGossip.html
可以參考看看。
如果是單純喜好的話,會建議先找一本工具書,跟一本範例書。工具書在看不懂語法或函式用法的時候可以參考。範例書可以學習怎麼使用語法跟函式。
.......

感謝大大不惜地傾囊相授
小弟真是慶幸的很
有您的指導和循循善誘
相信這是小弟繼續學習的一大動力
至於大大所提缺點
小弟一定謹記在心不得再犯
希望往後在學習的方法上小弟將按照大大所言
努力以赴
謝謝

獻花 x0
引用 | 編輯 totsi
2011-05-16 10:45
8樓
  
可以冒昧的問個問題嗎?

最後您這個問題有解決了嗎?

有找到卡關的地方了嗎?

雖然上面的問法還蠻奇怪的,但這應該是您發這篇的目的吧? 表情

還沒解決的話,記得把 system("pause"); 塞到所有return的前面。

這樣看能不能找出您的問題。

加油~

獻花 x0
引用 | 編輯 csr
2011-05-17 10:07
9樓
  
說真的
大大若不提起
小弟還真不好再請教大大
因為所學還不是了解
所以再試還是無法開啟
小弟又不曉得怎麼請教發問
所以至今還是無解
另外大大所說debug設定中斷點
小弟實在也不知要怎麼作
所以這問題小弟就暫放下
等再一次覆習後看能不能把它完成
小弟在此感謝大大指示一個方向
我會努力去作看看
謝謝大大您地指導


還是無法停止看執行結果
謝謝

獻花 x0
引用 | 編輯 totsi
2011-05-17 10:21
10樓
  
下面是引用 csr 於 2011-05-17 10:07 發表的 : 到引言文
說真的
大大若不提起
小弟還真不好再請教大大
因為所學還不是了解
所以再試還是無法開啟
小弟又不曉得怎麼請教發問
所以至今還是無解
另外大大所說debug設定中斷點
小弟實在也不知要怎麼作
所以這問題小弟就暫放下
等再一次覆習後看能不能把它完成
小弟在此感謝大大指示一個方向
我會努力去作看看
謝謝大大您地指導

關於dev-c debug使用請參考下面連結(關鍵字:dev-c 中斷點)
http://ez2learn.com/index.php/c-tutorials/dev-c-/203-dev-cdebugger

visual studio (也可以直接點要設中斷的那一行前面):
http://msdn.microsoft.com/zh-tw/library/15d1wtaf(v=vs.80).aspx

不瞭解的話,就多想~

想不通的話,就把想不通的部分拿出來問~如果可以把您的想法說出來,或許有人可以幫您找出您的盲點~

要想過才會知道可能的問題在那邊嚕XDD

如果上述的步驟您都有做到,那麼可能就要再看問題出在那邊嚕~

有時候,還真的要臉皮厚一點,才比較問的到東西。XD

但不是擺爛的臉皮厚喔..XDD

獻花 x0
引用 | 編輯 csr
2011-05-17 11:25
11樓
  
依大大po地網頁
該程式只能執行到底下
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(int argc, char* argv[])
{
FILE *fp;
char ch;
int isword, i;

if(argc != 2){
  printf("參數的個數錯誤。\n");
  return 1;
 
}
再來就無法開起了
要設專案它程現反白
無法設定
當中斷點用到上面
有跑出視窗
參數錯誤
再往下設中斷值行就跳不出視窗了
不知是何原故

獻花 x0
引用 | 編輯 totsi
2011-05-17 21:42
12樓
  
有圖嗎?

上次有麻煩您去找有關command line的資料,不知您找的如何了呢?

希望wiki能幫上您的忙:
http://en.wikipedia.org/wiki/Command-line_interface

這段是用來判斷進來的command line參數是否正確。從程式碼看來他參數是傳入檔案路徑。
複製程式
  if(argc != 2){
    printf("參數的個數錯誤。\n");
    return 1;
  }

這邊是將傳入的檔案打開,失敗的話就離開。
複製程式
  fp = fopen(argv[1], "re");
  if(fp == NULL){
    printf("無法開啟檔案。\n");
    return 1;
  }

所以用debug的確會從第一個return就結束了,因為debug模式執行的時候,要自己設定傳入的command line。

所以您最早說的不能執行,在下猜想,您應該有8成以上是直接點選程式沒錯八?

如您的操作方法是這樣沒錯的話,那麼可以使用命令提示字元來執行此程式,只是記得要給程式所以開啟的檔案路徑。

獻花 x0
引用 | 編輯 csr
2011-05-18 09:43
13樓
  
下面是引用 totsi 於 2011-05-17 21:42 發表的 : 到引言文
有圖嗎?
上次有麻煩您去找有關command line的資料,不知您找的如何了呢?
希望wiki能幫上您的忙:
http://en.wikipedia.org/wiki/Command-line_interface
這段是用來判斷進來的command line參數是否正確。從程式碼看來他參數是傳入檔案路徑。
.......

有去查
但是說正格地
不大清楚command line它的內容
而參數小弟在除錯時有用
但是執行上仍有問題
請教大大
小弟是要用dos方式來下命令嗎
還是大大是其他意思
謝謝

獻花 x0
引用 | 編輯 totsi
2011-05-18 19:47
14樓
  
那就看你要不要說說,你覺得那邊看不清楚?

如果參數在除錯的時候有用,那執行上是什麼問題?

前面有說system("pause")加到return前面的東西,你可以把他編譯成release版本。

這樣就可以在執行時期看到跳出來的畫面了。

是用dos的方式下命令沒錯。

dev-c也提供在debug模式下預先輸入參數的部分。請參考下列連結 Step 5: Execute.
http://www.uniqueness-template.com/devcpp/

簡單來說,command line就是我們在執行程式的時候,在執行檔後面所打的參數。

系統會把那些參數透過argv[]來傳給執行中的程式。

有玩過在捷徑的執行檔路徑後面下參數嗎?這就是那個東西。

如果您不會使用命令提示字元的話,用捷徑來傳入command line也是一個方法,只是使用後要刪除,手續比較麻煩XD。

你可以去查一下ipconfig這個指令,一般講解會順便把傳入的參數也解釋一次,那個就是所謂的commnad-line參數。

獻花 x1
引用 | 編輯 csr
2011-05-19 09:52
15樓
  
大大您好
小弟過去是玩硬體
所以在一些dos,cmd...等命令並不很清楚
因為不懂所以也不知怎麼來跟大大請教
另外command line說明的理念真的小弟並不瞭解
就連大大說地(編譯成release版本)小弟我也模糊了
真的很抱歉
讓大大對小弟這樣地學生可能會很煩
小弟在此先說一聲對不起
不過
小弟現今一直在加強這方面的知識
希望以後可以比較正面的來跟大大討教
謝謝

獻花 x0
引用 | 編輯 csr
2011-05-19 10:31
16樓
  
下面是引用 csr 於 2011-05-19 09:52 發表的 : 到引言文
大大您好
小弟過去是玩硬體
所以在一些dos,cmd...等命令並不很清楚
因為不懂所以也不知怎麼來跟大大請教
另外command line說明的理念真的小弟並不瞭解
就連大大說地(編譯成release版本)小弟我也模糊了
真的很抱歉
讓大大對小弟這樣地學生可能會很煩
小弟在此先說一聲對不起
不過
小弟現今一直在加強這方面的知識
希望以後可以比較正面的來跟大大討教
謝謝


小弟用命令提示字元去開檔
還是只開出參數的個數錯誤
不知這程式碼是無法執行嗎
謝謝

獻花 x0
引用 | 編輯 三仙
2011-05-19 15:41
17樓
  

圖 1.
程式執行結果
圖 2.
Main 不傳入第二 args 且修改程式開檔參數
圖 3.
修改並執行結果

下面是引用 csr 於 2011-05-19 10:31 發表的 : 到引言文



小弟用命令提示字元去開檔
還是只開出參數的個數錯誤
不知這程式碼是無法執行嗎
謝謝


獻花 x2
引用 | 編輯 totsi
2011-05-19 18:46
18樓
  
首先,先感謝版大的花..XD

我只是比較雞婆而已,雖然有些觀念還有待加強~XDD

版大比較佛心~連圖都有了...XD

我是比較懶惰,能用打字跟連結,就用打字跟連結的了。^^|||

================

您所找到的範例程式使用方式的確像是版大所提供的圖的用法。

底下用版大提供的圖來說明:

hello.exe是執行檔名稱。2是傳入的第一個參數

所以argc會等於2(個參數)。

argv[0]是執行檔路徑。

argv[1]則是2。

----------------------------------------------------------
所以這個程式執行會遇到兩個問題:
1.傳入的參數數量不正確:
  問題:這樣會讓程式無法繼續進行。
  原因:因為這個範例設定一定要傳入檔案路徑才能繼續執行。所以當傳入的參數數
        量不對,就會結束程式。
  解法:在執行程式的時候,一併把檔案路徑傳入。

2.找不到傳入的檔案路徑:
  問題:程式無法處理找不到的檔案的內容。
  原因:檔案不存在。或者傳入的參數不是檔案路徑。
  解法:給程式存在的檔案路徑,或是自行建立一個新檔。

===========================

如上述說法還是不清楚,建議您,先把讀寫檔單獨處理(類似版大提供的方式)。

寫個99乘法表檔,然後檔案路徑先用介面輸入或寫死在程式內都可以。

等檔案讀寫ok後,再來處理參數傳入的問題,這樣或許會比較快上手。

畢竟您提供的範例,一次包含了兩樣的觀念(傳入參數、檔案讀寫),所以要完成練習,就必須先有這兩樣的觀念。

不知您有沒有玩過half life?

在要使用密技之前,需先修改捷徑內容,把-console參數加到路徑後面。
Ex: hl.exe -console

這邊的-console就會被系統透過argv[]傳給hl.exe。

當初在玩的時候,因為什麼程式設計都不懂,就跟著說明照打而已。

後來接觸多了,才知道那個原來就是command line parameter阿。XDD

PS.補充一下:
  在VC++的部分,argv[]存的是char*,所以實際上指向argv[0],是取出第一個位置的字串陣列。
  至於Dev-C++在下不熟,所以還要請其他高手補充嚕。^^m

獻花 x2
引用 | 編輯 三仙
2011-05-20 09:52
19樓
  
下面是引用 csr 於 2011-05-08 20:29 發表的 請問為何執行畫面無法停住: 到引言文
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(int argc, char* argv[])
{
  FILE *fp;
  char ch;
  int isword, i;

  if(argc != 2){
    printf("參數的個數錯誤。\n");
    return 1;
  }

  fp = fopen(argv[1], "re");

  if(fp == NULL){
    printf("無法開啟檔案。\n");
    return 1;
  }

  i = 0; isword = 0;
  while((ch = fgetc(fp)) != EOF){
    if(isspace(ch) || ispunct(ch)){
      isword = 0;
    }
    else if(isword == 0){
      isword = 1;
      i++;
    }    
  }
  printf("單字數:%d\n", i);

  fclose(fp);

  system("pause");
  return 0;
}

.......


其實這個程式最有問題的地方
個人覺得是  fp = fopen(argv[1], "re");

1.為什麼是 argv[1]  ?
    小弟記得 Dev-C++ 沒有字串陣列,只有字元陣列;所以 argv[1]  代表一個字元,檔案名稱+副檔名 都不祇一個字了
2.為什麼是  "re"  ?
   詳如存取模式的表格


圖 1.
存取模式

獻花 x2
引用 | 編輯 csr
2011-05-20 16:47
20樓
  
totsi及版大您們好
感謝您們不辭辛勞的幫小弟解惑
心中無限感動
因為最後面地說明就是小弟因所學不精
而無法提出的問題解答
所以小弟最後終於明白這題目為何會如此
因此小弟在此除了感謝兩位大大這麼辛勞的幫小弟外
也只能再次用感謝來表達小弟的心情
如今這章節總算弄通不少
希望下次有問題
還望兩位大大能再次指導
謝謝

獻花 x0
引用 | 編輯 totsi
2011-05-20 17:53
21樓
  
下面是引用 csr 於 2011-05-20 16:47 發表的 : 到引言文
totsi及版大您們好
感謝您們不辭辛勞的幫小弟解惑
心中無限感動
因為最後面地說明就是小弟因所學不精
而無法提出的問題解答
所以小弟最後終於明白這題目為何會如此
因此小弟在此除了感謝兩位大大這麼辛勞的幫小弟外
也只能再次用感謝來表達小弟的心情
如今這章節總算弄通不少
希望下次有問題
還望兩位大大能再次指導
謝謝

看到這篇,就又雞婆想回了~

因為是自學,又是初學,所以所學不精是很正常的~

有瞭解範例的用途,那就好嚕,畢竟這是您來發問的目的~

問題問不好,大多都是經驗值不足嚕~其實就多看、多想、多問就會了~

可以參考其他問問題的人,看他們是怎麼問問題的,以及如何問可以立即就得到他想要的回覆~

所以沒那麼嚴重拉~XDDD

至於容易撞牆,在下以為,應該是教材選的等級超過目前的理解範圍而已XDD

就在找個淺顯易懂的教材就好嚕~

話說,您要不要推薦一下您的參考資料呢?(這個回信箱就好,因為跟討論主題無關XDDD)

加油

獻花 x0
引用 | 編輯 蒼嵐玥
2011-06-03 20:29
22樓
  
妳要不要看看是不是
system("pause");
放錯地方了
好像不是放在return 0;
後面就一定可以停止畫面的
我也遇過這樣的情況
把return 0;
換地方放看看應該就可以了

自己的經驗
希望可以幫到你

獻花 x0
引用 | 編輯 csr
2011-06-05 09:06
23樓
  
下面是引用 蒼嵐玥 於 2011-06-03 20:29 發表的 : 到引言文
妳要不要看看是不是
system("pause");
放錯地方了
好像不是放在return 0;
後面就一定可以停止畫面的
我也遇過這樣的情況
把return 0;
換地方放看看應該就可以了

自己的經驗
希望可以幫到你
感謝大大提供寶貴資料
小弟收下研究
謝謝

獻花 x0