请教个简单的C++语法问题 ( 积分: 100 )

  • 主题发起人 主题发起人 我是张小三
  • 开始时间 开始时间

我是张小三

Unregistered / Unconfirmed
GUEST, unregistred user!
/*初学C++,还请各位大侠多多指教!*/
/*用VC++6.0调试控制台程序时遇到如下问题,请指教。谢谢!*/
#include <iostream.h>
typedef unsigned short USHORT;
enum ERR_CODE{SUCCESS, ERROR};
ERR_CODE Factor(USHORT, USHORT &amp;, USHORT &amp;);
void main()
{
USHORT number, squared, cubed;
ERR_CODE result;
cout << "Enter a number(0-20):";
cin >> number;
result = Factor(number, squared, cubed);
if (result == SUCCESS)
{
cout << "number:" << number << "/n";
cout << "square:" << squared << "/n";
cout << "cube:" << cubed << "/n";
} //为什么这里不能有分号?
else
cout << "Error encountered! /n";
cout << endl;
}; //为什么这里可以有也可以没有分号?
ERR_CODE Factor(USHORT n, USHORT &amp;rSquared, USHORT &amp;rCubed)
{
if (n > 20)
return ERROR; //为什么这里必须有分号?
else
{
rSquared = n * n;
rCubed = n * n * n;
return SUCCESS;
};
};
 
知道这些足够了, 知道为什么有什么意义?
 
跟delphi一样。
 
to yuzk2005大侠,知道为什么当然有意义了!因为知道为什么了就可以在写程序的时候对于C++语法有更加深入的理解,就可以在实际编程中对于分号的运用自如了啊(至少可以不必死记硬背在什么情况下必须有分号,什么情况下必须没有,什么情况下可有可无了),这样对于没有遇到过的情况也可以应付自如了啊,怎么能说没有意义呢?有句话说“授人予鱼,不如授人予渔”应该就是这个道理了。
 
to gggoobm:怎么会跟Delphi一样呢!?呵呵:)看来你在D上还要下点功夫哦
ERR_CODE Factor(USHORT n, USHORT &amp;rSquared, USHORT &amp;rCubed)
{
if (n > 20)
return ERROR;
//你试试这个在D中能通过编译吗?
else
{
rSquared = n * n;
rCubed = n * n * n;
return SUCCESS;
};
};
 
"至少可以不必死记硬背在什么情况下必须有分号,什么情况下必须没有,什么情况下可有可无了" --至少这些你必死记硬背,因为C++语法就是这样规定的
 
我不同意你的观点。记忆应该来源于理解。打个比方,就好比说是学习中文语法的时候,我们应该在理解断句的基础上来记忆标点符号的运用规则,而不是死记硬背然后生掰硬套标点符号的位置。又好比,我们应该在理解基本物理规则的基础上来记忆原始的物理公式,而不应该死记硬背所有由基础定律衍生出来的物理公式。
 
编译器自己会处理的,你没加的地方他自己会加上去的,这个就相当于规则性的东西,内定好的,比如你的 "{ }",用这个替代"{{",是不可以的,当然你也可以问出这样的问题来,为什么.............................
 
;表示一条语句的结束,你把这个掌握就够了
 
分号表示结束
 
计算机语言就是人为的硬性约定, 不是数学逻辑, 这种约定你只能硬性记忆
 
to sunde11,asksomeone:开始我也是向你们那样理解的,但是后来发现以下语句却无法通过编译:
if (n > 20)
return ERROR //因为这里少了分号,不过按理说这里应该是if...else
才能够算是一个语句体的结束。
else
{
rSquared = n * n;
rCubed = n * n * n;
return SUCCESS;
};
而如果说每句结束后都应该有分号的话,那位什么以下语句也不能通过编译呢?
if (result == SUCCESS)
{
cout << "number:" << number << "/n";
cout << "square:" << squared << "/n";
cout << "cube:" << cubed << "/n";
};
//也不能通过编译,因为这里多了分号。看起来和上面的例子刚好矛盾
else
cout << "Error encountered! /n";
cout << endl;
};
 
也许有的大侠会说我钻牛角尖,但是我只是想弄清楚为什么同样是在if...else
...语句中,怎么有的else
前必须加分号,而有的else
前一定不能加分号呢?
 
if (result == SUCCESS)
{
cout << "number:" << number << "/n";
cout << "square:" << squared << "/n";
cout << "cube:" << cubed << "/n";
} //为什么这里不能有分号?
// 因为'}' 就已经告诉编译器,这是一个代码块的结尾了,再有分号的话else
就接不上if了
else
cout << "Error encountered! /n";
cout << endl;
};
//为什么这里可以有也可以没有分号?
ERR_CODE Factor(USHORT n, USHORT &amp;rSquared, USHORT &amp;rCubed)
{
if (n > 20)
return ERROR;
//为什么这里必须有分号?
// 没有分号的话不认为 return ERROR 已经结束, 只有遇到 }或者;
编译器才知道这是一个完整的代码块啊
else
{
rSquared = n * n;
rCubed = n * n * n;
return SUCCESS;
};
总而言之, C 认为{}中的就是一个完整的代码块, 看作"一句代码"(带分号的一句语句)
 
谢谢楼上大侠的指点!^_^
 
后退
顶部