请问为何执行画面无法停住

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