免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: TOADLover
打印 上一主题 下一主题

[C++] 这是我学习C++的第一个例子,很多错误,谁帮我看一下啊? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-09-28 13:50 |只看该作者
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\crtexe.c
------------------------------------------------------------------------------
谁知道这个crt是干什么的?

论坛徽章:
0
12 [报告]
发表于 2009-09-28 14:00 |只看该作者
C++中的调试暂停的方法:
1.  在循环中用的话
------------------------------------
int i = 0;
        while(i < 10)
        {
                i++;
                system("PAUSE");
        }
-------------------------------------
2.  如果一定要用户输入回车

while (true)
                {
                        int c = getchar();
                        if(c == 97)
                                break;
                }
-------------------------------------
输入“回车”时,c的值为10; 小写字母a 才是97,而且输入a后,程序并没有得到a的值,必须按“回车”键才能回到“程序”中取,
输入“回车”时,只需要“输入(敲)”一次回车,并不需要第二次回车来“确认”前面的“回车”!

[ 本帖最后由 TOADLover 于 2009-9-28 14:19 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2009-09-28 14:19 |只看该作者
原帖由 TOADLover 于 2009-9-28 13:50 发表
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\crtexe.c
------------------------------------------------------------------------------
谁知道这个crt是干什么的?


我就不信googlebaidu上搜不出来这个问题的答案。自己搜一分钟,在线等10分钟,自己动手,丰衣足食。

论坛徽章:
0
14 [报告]
发表于 2009-09-28 14:34 |只看该作者
NOTE:
---------------
int i = 0;
        while(i < 10)
        {
                i++;
                while (true)
                {
                        int c = getchar();
                        if(c == 10)
                                break;
                }//end inner loop

                system("PAUSE");
                if(i >= 2)
                        break;

        }
-------------------------------------------
//1-2+3-4+5-6+7......+n
long fn(long n)
{
        long temp=0;
        int i,flag=1;
        if(n<=0)
        {
                printf("error: n must > 0");
                exit(1);
        }
        for(i=1;i<=n;i++)
        {
                temp=temp+flag*i;//temp=0+1*1; temp=1-1*2; temp=1-1*2+1*3; temp=1-1*2+1*3-1*4;
                flag=(-1)*flag; //flag 的符号变化,正负交替。。。
        }
        return temp;
}

[ 本帖最后由 TOADLover 于 2009-9-28 14:42 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2009-09-28 15:17 |只看该作者
原帖由 TOADLover 于 2009-9-28 13:50 发表
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\crtexe.c
------------------------------------------------------------------------------
谁知道这个crt是干什么的?


1、关于 CRT

CRT = C Run-Time。
微软的东西并不难用,但有时候需要你对它的历史有所了解。我用的第一个微软编译器是 MSC 5.0,当时 Visual 系列还是液体呢。
MSC 的运行库叫做 CRT,编译用 CL.EXE,连接用 LINK.EXE,静态库管理用 LIB.EXE,这些概念延续到了 Visual 系列。

我建议你不要放出这么大一张截图,因为人的耐心是有限的,极少有人会认真地看

2、程序代码

你的程序错误实在太多。
a) C++ 允许函数重载,所以要求函数在使用前必须声明,你应该将 fn() 移动到 main() 的上方,或者预先声明之;
b) public 是干什么的?去掉它;
c) printf() 使用前声明了吗?它的声明在 <cstdio> 文件里,你的代码包含这个文件了吗?
d) exit() 使用前声明了吗?它的声明在 <cstdlib> 文件里,你的代码包含这个文件了吗?
e) 字符串用双引号结束了吗?小心无大错,永远记得小心。
f) 在同级控制结构中,return 之后的语句不被执行,你必须将 temp = fn(15); 移动到 return 0; 的前面。

3、编译环境

微软的 IDE,从 Visual Studio .NET 2002 开始,默认创建的都是 ANSI/Unicode 兼容的程序。微软的这个做法事实上打破了和标准 C 的兼容,如果是有一定经验的 Windows 程序员还好,他们容易适应,但刚接触就不适合,会感到莫名其妙。

你可以选择手工将它改成仅支持 ANSI 字符集的标准 ANSI C 程序,或者写好程序后在命令行中编译,或者干脆放弃微软的编译器。

stdafx.h 是预编译 header,不曾接触 Visual C++ 的人也会对此感到意外。

注意:Visual Studio [.NET] 对 C99 的支持尤其差。

----------

等着瞧吧,感觉你的 C 语言基本功不扎实,你正在写的是 C 程序,用了 C++ 编译器,这样一定还会遇到更多的问题。

论坛徽章:
0
16 [报告]
发表于 2009-09-28 17:39 |只看该作者
说点自己的体会   

如果是自学的话 建议就不要用 Ms的产品 那东西是给上班的人用的  

GCC + editer 吧 配合 C 库手册 即可

论坛徽章:
0
17 [报告]
发表于 2009-09-30 08:42 |只看该作者

回复 #16 masonzhang 的帖子

嗯,我在自己的虚拟机上会用Linux下的GCC编译C程序,用vi编辑器。

不过我不知道你说的“C 库手册”在哪里?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
18 [报告]
发表于 2009-09-30 15:08 |只看该作者
test

论坛徽章:
0
19 [报告]
发表于 2009-10-07 13:39 |只看该作者
原帖由 langue 于 2009-9-28 15:17 发表


1、关于 CRT

CRT = C Run-Time。
微软的东西并不难用,但有时候需要你对它的历史有所了解。我用的第一个微软编译器是 MSC 5.0,当时 Visual 系列还是液体呢。
MSC 的运行库叫做 CRT,编译用 CL.EXE,连 ...

------------------------------------------------------------------------
拜谢langue的谆谆教诲!!!!!!!!!!!

“或者干脆放弃微软的编译器”,那您的建议是什么呢?
用Linux下的GCC?

论坛徽章:
0
20 [报告]
发表于 2009-10-08 09:57 |只看该作者

回复 #19 TOADLover 的帖子

GCC 不属于 Linux,你爱在哪个平台用就在哪个平台用。Windows,DOS,都有 GCC 的二进制版本。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP