免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2329 | 回复: 4
打印 上一主题 下一主题

[C++] 这个程序有点困惑,请大师们帮忙给我指点指点,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-06 11:02 |只看该作者 |倒序浏览
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int AllocationSize = 5;
  6.         int *pArrayOfNumbers = new int[AllocationSize];
  7.         int ElementsUsedSoFar = 0;
  8.         int MaximumElementsAllowed = AllocationSize;
  9.         int InputNumber = -1;
  10.         cout<<endl<<"Next number = ";
  11.         cin>>InputNumber;


  12.         while(InputNumber > 0)
  13.         {
  14.                 pArrayOfNumbers[ElementsUsedSoFar++] = InputNumber;
  15.                 if(ElementsUsedSoFar == MaximumElementsAllowed)//由于 这两个不相等,if语句是没有被执行的吧?我记得是这样。。
  16.                 {
  17.                         int *pLargerArray = new int[MaximumElementsAllowed+AllocationSize];//10
  18.                         for(int CopyIndex =0;CopyIndex< MaximumElementsAllowed;CopyIndex++)
  19.                         {
  20.                                 pLargerArray[CopyIndex] = pArrayOfNumbers[CopyIndex];
  21.                         }; //请问,这里居然是以分号结尾的,这正确吗 ?我记得for语句是没有分号结尾的吧??
  22.                                 delete [] pArrayOfNumbers;
  23.                                 pArrayOfNumbers = pLargerArray;
  24.                                 MaximumElementsAllowed += AllocationSize;
  25.                         }; //请问,这里居然是以分号结尾的,这正确吗 ?我记得if语句是没有分号结尾的吧??,这两个很奇怪,而且编译都是在正确的,我很困惑。
  26.                                 cout<<endl<<"Next number = ";
  27.                                 cin>>InputNumber;
  28.                 }
  29.                         for(int Index=0;Index<ElementsUsedSoFar;Index++)
  30.                         {
  31.                                 cout<<pArrayOfNumbers[Index]<<endl;
  32.                         } system("pause");
  33.                         return 0;
  34. }
复制代码
代码来自书本 ,希望大家帮忙解析下,

论坛徽章:
2
戌狗
日期:2013-11-06 17:35:36寅虎
日期:2014-10-20 23:12:29
2 [报告]
发表于 2011-06-06 13:31 |只看该作者
楼主还是要从基本的开始啊, 这里的分号完全多余的,不过编译器会解释成一个空行,不会有影响的。if表达式中的条件不成立,if代码块中的语句不被执行是再基础不过了, 而if外面有一个循环语句,每一次循环if表达式中的变量都要根据当前的进行判断。。。 楼主还是先找本书好好看看吧。K&R就很不错。

论坛徽章:
0
3 [报告]
发表于 2011-06-06 13:43 |只看该作者
                pArrayOfNumbers[ElementsUsedSoFar++] = InputNumber;
                if(ElementsUsedSoFar == MaximumElementsAllowed)//由于 这两个不相等,if语句是没有被执行的吧?我记得是这样。。

你没看到有 ElementsUsedSoFar++ 么?

C/C++ 中语句分复合语句和简单语句; 最简单的语句是一个分号。
这样的写法是 符合语法的 if (exp); 或者 if (exp) func(1); else ;
所以
for (i = 0; i < 10; i++) {};
实际上是两条独立的语句:
1、for (i = 0; i < 10; i++) {}
2、;

虽然在这里加;号对程序不产生任何影响,不过不建议乱加;号。
例如

  1. if (exp1)
  2.    if (exp2) {}
  3. else
  4.    {}
复制代码

  1. if (exp1)
  2.    if (exp2) {};
  3. else
  4.    {}
复制代码
就是两种不同的东西。

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
4 [报告]
发表于 2011-06-07 06:04 |只看该作者
回复 1# jzlcs

这个很简单嘛。我来帮你把代码重排一下。
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int AllocationSize = 5;
  6.         int *pArrayOfNumbers = new int[AllocationSize];
  7.         int ElementsUsedSoFar = 0;
  8.         int MaximumElementsAllowed = AllocationSize;
  9.         int InputNumber = -1;
  10.         cout<<endl<<"Next number = ";
  11.         cin>>InputNumber;


  12.         while(InputNumber > 0)
  13.         {
  14.                 pArrayOfNumbers[ElementsUsedSoFar++] = InputNumber;
  15.                 if(ElementsUsedSoFar == MaximumElementsAllowed)//由于 这两个不相等,if语句是没有被执行的吧?我记得是这样。。
  16.                 {
  17.                         int *pLargerArray = new int[MaximumElementsAllowed+AllocationSize];//10
  18.                         for(int CopyIndex =0;CopyIndex< MaximumElementsAllowed;CopyIndex++)
  19.                         {
  20.                                 pLargerArray[CopyIndex] = pArrayOfNumbers[CopyIndex];
  21.                         }
  22.                         ; //请问,这里居然是以分号结尾的,这正确吗 ?我记得for语句是没有分号结尾的吧??
  23.                           //  ---- 对的,把分号分开一行嘛,就是个空语句。
  24.                                 
  25.                         delete [] pArrayOfNumbers;
  26.                         pArrayOfNumbers = pLargerArray;
  27.                         MaximumElementsAllowed += AllocationSize;  // 这样得话应该代码这样对齐。

  28.                 }   // ---- if 语句应该对齐到这里
  29.                 ; //请问,这里居然是以分号结尾的,这正确吗 ?我记得if语句是没有分号结尾的吧??,这两个很奇怪,而且编译都是在正确的,我很困惑。
  30.                 cout<<endl<<"Next number = ";
  31.                 cin>>InputNumber;
  32.         }  // ---- while语句对齐到这里

  33.         for(int Index=0;Index<ElementsUsedSoFar;Index++)
  34.         {
  35.                   cout<<pArrayOfNumbers[Index]<<endl;
  36.         }
  37.         system("pause");
  38.         return 0;
  39. }
复制代码
最后说一句,LZ哪本书抄的代码,好烂的风格,快把书扔了吧。

论坛徽章:
0
5 [报告]
发表于 2011-06-07 09:10 |只看该作者
赶紧着,正如captivated说的,把那破书扔了吧,什么风格呐,再看,你就毁啦、
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP