设为首页收藏本站

如鹏网

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
123
返回列表 发新帖
楼主: 杨中科

【教学视频】《C语言也能干大事》第五节:Windows编程原理及自己动手写计算器

[复制链接]

27

主题

0

好友

1453

积分

金牌会员

Rank: 6Rank: 6

发表于 2010-1-18 23:29:49 |显示全部楼层
捣腾了两个小时,弄完了
  1. void Main_OnCommand(HWND hwnd/*对话框句柄*/, int id/*空间ID*/, HWND hwndCtl, UINT codeNotify)
  2. {
  3. switch(id)
  4. {
  5. case IDC_BTNADD:
  6. TCHAR X[20],Y[20],ADD[20];int x,y;
  7. GetDlgItemText(hwnd/*句柄*/,IDC_EDTX/*id*/,X/*赋值字符数组*/,20);
  8. GetDlgItemText(hwnd,IDC_EDTY,Y,20);
  9. x=atoi(X);y=atoi(Y);
  10. int add;
  11. add=x+y;
  12. itoa(add,ADD,10); //数值转化为字符串显示
  13. //lstrcat(name,"你好");//字符串连接
  14. // MessageBox(NULL,ADD,TEXT("相加"),MB_OK|MB_ICONWARNING); break;
  15. SetDlgItemText(hwnd,IDC_EDTZ,ADD); break;
  16. case IDC_BTN1:
  17. DWORD ds=GetLogicalDrives();
  18. int k;k=1;
  19. char Xian[20];

  20. int i,m;i=0;m=i;
  21. while(i<20)
  22. {
  23. if((ds&k)==k)
  24. { Xian[m]='A'+i;
  25. m++;}
  26. i++;
  27. k=k*2;

  28. }
  29. Xian[m]='\0';
  30. SetDlgItemText(hwnd,IDC_EDTDRIVERS,Xian);
  31. break;
  32. default:break;
  33. }

  34. }
复制代码

0

主题

0

好友

32

积分

新手上路

Rank: 1

发表于 2010-2-4 09:54:19 |显示全部楼层
杨老师讲课时想做个函数返回指针有问题的例子一直没有成功的原因如下:
char *fun()
{
    return "sssss";
}

其中“sssss”是常量,放到常量区中了,而不是放到栈中,因此fun结束后存放“sssss”的区域并没有释放!
同样下面这样写也没有问题的
char *fun()
{
    char *p="sssss";
    return p;
}
p是指向“sssss”的指针,“sssss”没有被销毁,因此结果也是正确的!
再看下面这个
char *fun()
{
    char p[]="sssss";
    return p;
}
这样就会有问题了! 原因:当调用fun时,会在栈上分配内存给数组p,当fun调用结束时p数组对应的内存会自动销毁,因此p数组中存放的就不再是“sssss”,而是不可预知的东东!即p指向的内容不可知了!
本人是这样认为的! 欢迎指正交流!

3

主题

0

好友

64

积分

注册会员

Rank: 2

发表于 2012-4-20 20:12:31 |显示全部楼层
在《C语言也能干大事》中老师所教的代码只能解决int型的数据;对于double型的数据不能计算;
可以讲代码改一下,就可以对整形和双精度的数据都能计算;
代码如下:
                HWND combo1=GetDlgItem(hwnd,IDC_COMBO1);
                int cho=ComboBox_GetCurSel(combo1);
                TCHAR  str1[256],str2[256];
               GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));
               GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));
               double f1=atof(str1);
               double f2=atof(str2);
               double f3;
              switch(cho)
             {
              case 0: { f3=f1+f2; break; }
              case 1: { f3=f1-f2; break; }
              case 2: { f3=f1*f2; break; }
              case 3: { f3=f1/f2; break; }
             }
             WCHAR str3[256];
             swprintf(str3,L"%-7.6lf",f3);
             SetDlgItemTextW(hwnd,IDC_EDIT3,str3);
您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|如鹏网 ( 粤ICP备09013919号 )   360网站安全检测平台

GMT+8, 2012-5-19 16:03

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部