引用 | 编辑
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 发表的 :感谢大大的提示 小弟留了空行 它依然跳出这样警告 不知是为什么 而且执行档依旧开不出来 这个问题是要我们输入一些字 那它会将字值统记出来 但是小弟才刚学这一章档案的管理 发觉它真的超难 不知要怎么度过这一观 不过 还是对大大的热忱 表达小弟的感激 谢谢 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 |
引用 | 编辑
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 发表的 : 感谢大大不惜地倾囊相授 小弟真是庆幸的很 有您的指导和循循善诱 相信这是小弟继续学习的一大动力 至于大大所提缺点 小弟一定谨记在心不得再犯 希望往后在学习的方法上小弟将按照大大所言 努力以赴 谢谢 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 发表的 : 关于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它的内容 而参数小弟在除错时有用 但是执行上仍有问题 请教大大 小弟是要用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 |
引用 | 编辑
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 发表的 请问为何执行画面无法停住: 其实这个程式最有问题的地方 个人觉得是 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 发表的 : 看到这篇,就又鸡婆想回了~ 因为是自学,又是初学,所以所学不精是很正常的~ 有了解范例的用途,那就好噜,毕竟这是您来发问的目的~ 问题问不好,大多都是经验值不足噜~其实就多看、多想、多问就会了~ 可以参考其他问问题的人,看他们是怎么问问题的,以及如何问可以立即就得到他想要的回覆~ 所以没那么严重拉~XDDD 至于容易撞墙,在下以为,应该是教材选的等级超过目前的理解范围而已XDD 就在找个浅显易懂的教材就好噜~ 话说,您要不要推荐一下您的参考资料呢?(这个回信箱就好,因为跟讨论主题无关XDDD) 加油 x0 |