如何用函数可编程计数器阵列方法写一个字符计数程序

共有 2236 人关注过本帖
标题:求高手指教!自己编了一个用以实现strcat函数功能的程序,不过怎么都不能实 ...
等 级:论坛游民
帖 子:22
专家分:14
结帖率:50%
&&已结贴√
&&问题点数:20&&回复次数:12&&&
求高手指教!自己编了一个用以实现strcat函数功能的程序,不过怎么都不能实现,求高手指教!
#include &stdafx.h&
#include&stdio.h&
int _tmain(int argc, _TCHAR* argv[])
{&&& char strcat(char a[],char b[]);
&&& char ch1[50],ch2[50];
&&& printf(&请输入字符串1:&);
&&& scanf(&%s&,&ch1[50]);
&&& printf(&请输入字符串2:&);
&&& scanf(&%s&,&ch2[50]);
&&& printf(&%s&,strcat(ch1,ch2));
&&& return 0;
char strcat(char a[],char b[]){
&&& char c[100];
&&& char *p=NULL;
&&& int i=0;
&&& for(;(*p)!='\0';p++){
&&& c[i++]=*p;
&&& for(;(*p)!='\0';p++){
&&& c[i+1]=*p;
&&& return c[100];
不知哪里出问题了,纠结好久,求高手指教
搜索更多相关主题的帖子:
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
&&得分:10&
请你解释一下你的代码都在干什么?
授人以渔,不授人以鱼。
等 级:论坛游民
帖 子:22
专家分:14
回复 2楼 TonyDeng
我是想用指针来做的,我基础比较差。。。
main函数部分就不解释了
在定义函数里,我想用一个指针每次指向字符串的一个字符,并将其值赋给新定义的字符串c,该过程通过循坏实现,当a遇到'\0'时,使指针指向下一个字符串b,重复上述过程。
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
&&得分:10&
你这个程序错误多得离谱。先不管什么指针不指针,你说scanf(&%s&,&ch1[50])在干什么?
从上到下每一行你都没调试就一气写完,再来问问题?哪个老师、什么书本教人这样写程序的?
[ 本帖最后由 TonyDeng 于
14:31 编辑 ]
授人以渔,不授人以鱼。
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
你两个最基本的错误:
1.scanf()接收输入的方式是完全错误的,而且很多余地写个&符号,闲着没事干了?有数组名不用非要取地址指针,被指针神话整坏脑了!
2.在函数中返回局部数组c是根本无法达到目的的。
通观整个代码,你竟然以为return c[100]是返回数组,以及前面那一系列数组用法错误,都是连数组怎么回事都没搞清楚的,就入手做这样的程序,走路都不稳就学人跑。hello,world没练好之过。
授人以渔,不授人以鱼。
等 级:论坛游民
帖 子:22
专家分:14
回复 5楼 TonyDeng
我确实什么都不懂
浪费您时间了,谢谢你的批评
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
不懂只是态度问题,没关系,那可以问。但不知道每步、每行调试程序,是学习态度问题,没有良好的学习习惯,解答你多少知识都是没用的,因为你必定要反复犯同类的错误以致无法独立完成程序。printf()、scanf()这样东西,基本用法你都错,还不知道先看看到底读入了什么,就到处问人程序为什么没达到目的,那怎么行呢。读的是从a[50]开始,但传入函数的却是从a[0]开始,a[0]-a[49]之间是什么,你看过没有?定义char a[50]的时候,a[50]在哪里你知道吗?C语言从0开始计数,知晓吗?全是基本错误,怎么说你呢?看你的语气是不服气的,没所谓,我借题发挥而已,别人会看帖子,有某一两个接受规劝就好。
[ 本帖最后由 TonyDeng 于
14:53 编辑 ]
授人以渔,不授人以鱼。
等 级:论坛游民
帖 子:22
专家分:14
恩恩,谢谢大神指点
我刚刚重新修改了一下
运行成功了
我习惯确实没养好
一则态度问题
二则上课进度太快了,自己没有拿出充分时间来消化
谢谢大神指点迷津
从现在开始我会改掉坏习惯的
还有一点就是,如何调试程序,我不太懂,想请教一下
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
我要外出了,简单点说说。逐步调试,举个例子,你scanf()之后,最好printf()一下看读入的是不是需要的结果,确认没错就可以把printf()语句删掉或注释掉。如果传入函数,在函数处也printf()一下得到的数据,看是不是跟调用处一样。这些方面,初学者是要做的,随着你写代码熟练,慢慢地可以放松,但初期一定要做,否则死在哪都不知道。以后有经验,就知道大概在什么地方应该检查一下了,马上就检查,不要等,不要侥幸积累到差不多时一气调试,那样反而更费时费力。
在你这个程序中,return c是不行的,因为c是局部变量,结束函数之后它就消失,外面无法得到返回的内容,只能得到一个虚幻的指针(那就是所谓的野指针)。这种情况,必须要在函数外面分配接纳空间,返回不是这样的。函数的设计思路有错误,你再想想。如果没辙,就看看标准库函数的格式,人家为什么要设计成这样传送和返回,对比一下,就学到你没想明白的东西了。标准strcat()是把后面的字串接驳在前面字串上的,返回的是第一个字串的地址,因此确保返回不会是虚指针,但要求第一个参数字串有足够的容纳空间。你回头再看看这里我说的,就明白自己该怎么设计了。最好不要设计在函数内部动态分配内存,因为那样在外面很难预测应该在什么时候释放这些被分配过的空间,特别是在函数被多次调用的情况下,也难以搞清楚到底哪次是使用了预先分配的数组、哪次是动态分配得到的指针,万一把动态指针指向了别处……程序设计就是想这些事。
[ 本帖最后由 TonyDeng 于
15:21 编辑 ]
授人以渔,不授人以鱼。
等 级:论坛游民
帖 子:22
专家分:14
回复 7楼 TonyDeng
不好意思,我真的知道我错了,没有不服气。
真的没有。
我很希望有大神来指导指导我学习C。
我也知道你们每天看那么多的帖子,很不容易,特别是像我这种的帖子。
再一次表达我的歉意。
我是刚刚接触C不久的人,能得到大神的建议,真的很宝贵。
不过,我确实很心急,还没学会走,就想跑。
还请多多包涵。
至于如何调试程序,望指点一二,谢谢了
版权所有,并保留所有权利。
Powered by , Processed in 0.078656 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved一个用C语言调用API函数编写的计算器问题_windows编程吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,905贴子:
一个用C语言调用API函数编写的计算器问题收藏
有一定的C基础之后开始学习windows编程,可是自己编写的计算器有个问题总是无法得到彻底解决,真心向高手请教。问题:计算结果绝对值如果小于或等于0.1时会以e的次方表示,此时关闭程序定会报错。要如何解决输出结果显示问题以及为何会报错?截图一:截图二:VC运行,代码如下:#include &windows.h&#include &stdio.h&#include&stdlib.h&#include&math.h&#define ICO_MAIN 1000#define DLG_MAIN 1#define IDB_0
4400 //0#define IDB_1
4401 //1#define IDB_2
4402 //2#define IDB_3
4403 //3#define IDB_4
4404 //4#define IDB_5
4405 //5#define IDB_6
4406 //6#define IDB_7
4407 //7#define IDB_8
4408 //8#define IDB_9
4409 //9#define IDB_PLUS 4410 //加#define IDB_SUB
4411 //减#define IDB_EQU
4412 //等于#define IDB_DOT
4413 //.#define IDB_PAS
4414 //正负号#define IDB_EDIT 4415 //编辑框int num1=0 ;int num2=0 ;double b,num3=0,num4=0;char s[13];//为了方面参数的传递,定义了这个全局变量UINT fushu=0 ;UINT xiaoshu=0 ;UINT qxiaoshu=0 ;UINT sn=1 ;//把字符串转化成数字int StrToNum(char*str){
return atoi(str);}//把数字转化成字符串char*NumToStr(int nNum){
itoa(nNum,s,10);
}char*tostr(double Num){
gcvt(Num,12,s);}//修改编辑框控件的文字void SetEditValue(int nNum,HWND hEdit){
if(fushu==0)
if(xiaoshu==0)
num2=num2*10+nN//可以使数字进位(向左移)
num3=(double)num2 ;
SetWindowText(hEdit,NumToStr(num2));
sn=sn*10 ;
b=(double)nNum/(double)
num3=num3+
SetWindowText(hEdit,tostr(num3));
if(xiaoshu==0)
num2=num2*10+nN//可以使数字进位(向左移)
num3=(double)num2 ;
SetWindowText(hEdit,NumToStr(num2));
sn=sn*10 ;
b=0-(double)nNum/(double)
num3=num3+
SetWindowText(hEdit,tostr(num3));
}}LRESULT WINAPI DialogProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
“健康随e保”可保障儿童41种重大疾病。150元起/年,给孩子45万高额保障。
{HICON hIHWND hEdit=GetDlgItem(hWnd,IDB_EDIT);switch(Msg)
case WM_INITDIALOG :
//设置图标
hIcon=LoadIcon(GetModuleHandle("MyCalculator.exe"),MAKEINTRESOURCE(ICO_MAIN));
SendMessage(hWnd,WM_SETICON,ICON_BIG,(long)hIcon);
SetWindowText(hEdit,"0.");//让编辑框控件的内容为"0."
case WM_COMMAND ://LOWORD(wParam)用来取出命令ID
switch(LOWORD(wParam))
case IDB_0 :
SetEditValue(0,hEdit);
case IDB_1 :
SetEditValue(1,hEdit);
case IDB_2 :
SetEditValue(2,hEdit);
case IDB_3 :
SetEditValue(3,hEdit);
case IDB_4 :
SetEditValue(4,hEdit);
case IDB_5 :
SetEditValue(5,hEdit);
case IDB_6 :
SetEditValue(6,hEdit);
case IDB_7 :
SetEditValue(7,hEdit);
case IDB_8 :
SetEditValue(8,hEdit);
case IDB_9 :
SetEditValue(9,hEdit);
case IDB_PLUS :
if(qxiaoshu==0)
SetWindowText(hEdit,NumToStr(num1+num2));
SetWindowText(hEdit,tostr(num4+num3));
num4+=num3 ;
num1+=num2 ;
xiaoshu=0 ;
case IDB_SUB :
if(qxiaoshu==0)
SetWindowText(hEdit,NumToStr(num1+num2));
SetWindowText(hEdit,tostr(num4+num3));
xiaoshu=0 ;
num1+=num2 ;
num4+=num3 ;
case IDB_DOT :
xiaoshu=1 ;
qxiaoshu=1;
case IDB_PAS :
case IDB_EQU :
if(qxiaoshu==0)
SetWindowText(hEdit,NumToStr(num1+num2));
SetWindowText(hEdit,tostr(fabs(num4+num3)&1e-15 ? 0 : (num4+num3)));
xiaoshu=0 ;
qxiaoshu=0;
case WM_CLOSE ://关闭消息
EndDialog(hWnd,0);//终止模态对话框
return 0 ;
}return FALSE;}int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd){
//很简单的创建了窗口
DialogBoxParam(hInstance,MAKEINTRESOURCE(DLG_MAIN),NULL,DialogProc,0);
return 1 ;}
f5运行,看崩溃的时候跳到哪行?
跟踪调试是最好的解决方法,你先大概想下错误可能在那些位置,然后对那些可能的位置进行跟踪。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 程序员 函数式编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信