1.continue,break类的错误(HDU1877

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a,b,m,sum;
  6. while(cin>>m,m)
  7. {
  8. int p[100]={0};
  9. cin>>a>>b;
  10. sum=a+b;
  11. if(!sum)//是0的话就不用再进行考虑了
  12. {
  13. cout<<0<<endl;
  14. continue;//闲着没事,做个简单题,却由于忘了 continue 而 Presentation Error 了非常多次
  15. }
  16. int i=0;
  17. while(sum)
  18. {
  19. p[i]=sum%m;
  20. sum/=m;
  21. i++;
  22. }
  23. for(int j=i-1;j>=0;j--)
  24. cout<<p[j];
  25. cout<<endl;
  26. }
  27. }

2.memset函数将数组初始化为1(from 百度文库)

例如以下demo是能够的,能把数组中的元素值都设置成字符1,
1
2
3
4
5
6
7
8
9
10
11
12
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. int main()
  5. {
  6. char a[5];
  7. memset(a,'1',5);
  8. for(int i=0;i<5;i++)
  9. cout<<a[i]<<"";
  10. system("pause");
  11. return 0;
  12. }

而,例如以下程序想把数组中的元素值设置成1,却是不可行的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  1. #include <iostream>
  2. #include <cstring>
  3. #include <windows.h>
  4. using namespace std;
  5. int main()
  6. {
  7. int a[5];
  8. memset(a,1,20);
  9.  
  10. //也等价于memset(a,1,sizeof(a));.
  11. for(int i=0;i<5;i++)
  12. cout<<a[i]<<"";
  13. system("pause");
  14. return 0;
  15. }

问题是:
1.第一个程序为什么能够,而第二个不行?
由于第一个程序的数组a是字符型的,字符型占领内存大小是1Byte,而memset函数也是以字节为单位进行赋值的。所以你输出没有问题。而第二个程序a是整型的。使用
memset还是按字节赋值,这样赋值完以后,每一个数组元素的值实际上是0x01010101即十进制的16843009。

假设用memset(a,1,20)。就是对a指向的内存的20个字节进行赋值。每一个都用数1去填充,转为二进制后,1就是00000001。占一个字节。一个int元素是4字节,合一起是0000 0001,0000 0001,0000 0001,0000 0001。转化成十六进制就是0x01010101。就等于16843009。就完毕了对一个int元素的赋值了。

3.while((c=cin.get())!='#')

本来想举个简单的样例。可是被这个坑得太慘了。所以。

。记住不是==,而是=。

c=getchar()一样。

HDOJ 2072

  1. #include<iostream>
  2. #include<set>
  3. #include<string>
  4. using namespace std;
  5. int main()
  6. {
  7. set<string> st;
  8. string str;
  9. char c;
  10. str.clear();
  11. while((c=cin.get())!='#')
  12. {
  13. while(c!=' '&&c!='\n')
  14. {
  15. str+=c;
  16. c=cin.get();
  17. }
  18. if(str.length())
  19. {
  20. st.insert(str);
  21. str.clear();
  22. }
  23. if(c=='\n')
  24. {
  25. cout<<st.size()<<endl;
  26. st.clear();
  27. str.clear();
  28. }
  29. }
  30. return 0;
  31. } <span style="font-size:18px;"> 
  32. </span>

4.c++程序中。假设用#include<iostream>和cin的话。就避免不了使用名字空间。using namespace std;。。。我竟

然有一次删掉部分原来的代码又一次敲代码的时候,忘掉了写上了,结果浪费了好长时间(夹杂其它事),记住了这个教训。不止一次了.

5.已经定义了全局变量,还傻冒似的又定义了局部变量,结果覆盖了全局变量的作用,还不报错,非常少犯啊。,。非常难找出来啊,,,

6.scanf("%d%d%d",&t1,&t2,&t3,&t4);     少个%d居然不报错,居然少了,这就是依照曾经代码改动的坏处吧。改不好就呜呜了,加强能力

7.数学公式运算

pow运用于整数型会出错。由于除以会取整,要用浮点型才可能得到正确结果。

  1. pow(10.0,num++);

8.关于数据范围的错误,so能尽量打就尽量大吧

  1. #include<cstdio>
  2. using namespace std;
  3. long long a[100005]={0};
  4. int main()
  5. {
  6. for(long long i=1;i<100002;i++)
  7. {
  8. if(i%3==0)
  9. a[i]=a[i-1]+i*i*i;//i的3次方
  10. else
  11. a[i]=a[i-1]+i;
  12. }
  13. int n;
  14. while(scanf("%d",&n)&&n>=0)
  15. {
  16. printf("%lld\n",a[n]);
  17. }
  18. return 0;
  19. }

9.在for循环中使用strlen()函数,假设循环次数过多,就会导致超时,所以还是回归原始可靠的用变量定义吧。

採用

  1. int len = strlen(str);
  2. for(int i = 0;i < len;i++)
  3. {
  4.  
  5. }

pass掉

  1. for(int i = 0;i < strlen(str);i++)
  2. {
  3.  
  4. }

C与C++中非常少犯的错误,犯了后却非常难找出的错误的更多相关文章

  1. Effective Objective-C 2.0 — 第二条:类的头文件中尽量少引入其他头文件

    第二条:类的头文件中尽量少引入其他头文件 使用向前声明(forward declaring) @class EOCEmployer 1, 将引入头文件的实际尽量延后,只在确有需要时才引入,这样就可以减 ...

  2. DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)

    函数重载重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同.实际上,编译器是通过检测参数来确定需要调用的例程.下面是从VCL 的数学单元(Math Unit)中摘录的一 ...

  3. SQL中減少日志文件大小

    SQL中減少日志文件大小   编写人:CC阿爸 2014-6-14 在日常SQL数据库的操作中,常常会出现SQL日志文件超大,大小都超过正常MDF数据库文件,作为一般用户来讲,LDF太大,只会影响服务 ...

  4. 在Spark中尽量少使用GroupByKey函数(转)

    原文链接:在Spark中尽量少使用GroupByKey函数 为什么建议尽量在Spark中少用GroupByKey,让我们看一下使用两种不同的方式去计算单词的个数,第一种方式使用reduceByKey  ...

  5. 关于在php中变量少写了一个$和页面不断转圈的问题排查和vim的自动补全方式

    php中的所有变量都是页面级的, 即任何一个页面, 最多 都只能在一个文件 : 当前页面内使用, 不存在跨 文件/ 跨页面的 作用域的变量! 因此, 即使是 $GLOBALS 这个变量, 虽然叫全局 ...

  6. 集合的最大缺点是无法进行类型判定(这个缺点在JAVA1.5中已经解决),这样就可能出现因为类型不同而出现类型错误。

    集合的最大缺点是无法进行类型判定(这个缺点在JAVA1.5中已经解决),这样就可能出现因为类型不同而出现类型错误. 解决的方法是添加类型的判断.      LinkedList接口(在代码的使用过程中 ...

  7. 异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”

    实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出"end" function func1(callback) { setTimeout ...

  8. HTML中head里的内容经浏览器解析后全到body里了

    HTML中head里的内容经浏览器解析后全到body里了 修改完代码后,用chrome审查元素,head里的内容都到body中去了 http://bbs.csdn.net/topics/3802586 ...

  9. 在Eclipse中配置Tomcat时,出现Cannot create a server using the selected type错误

    在eclipse中配置Tomcat时,出现Cannot create a server using the selected type错误 原因:Tomcat被删除或者是重新安装,并且安装目录改变了. ...

随机推荐

  1. [Asp.net]使用flexpaper+swftools大文件分页转换实现在线预览

    引言 之前总结了在线预览几种常见解决方案,可以戳这里: http://www.cnblogs.com/wolf-sun/p/3569960.html http://www.cnblogs.com/wo ...

  2. (转)H264通过RTMP发布 V2.0 (Red5 Wowza 测试通过)

    直接上代码 // demo.cpp : 定义控制台应用程序的入口点.//#include "stdafx.h"#includeextern "C"{#inclu ...

  3. 后端程序员写的前端js代码模板

    看几天的javascript面向对象和基础等之类相关javascript的知识,因为自己是写php的,也写过java,所以想在写javascript代码的时候也能用上面向对象的思想, 折腾了一整天的j ...

  4. Unity3d 换装 之 模型动画分离

    在手游中换装成了越来越不可缺的一个功能,毫无疑问各式各样的时装为游戏增添了不同的色彩. 对于2D手游,或许是更换对应的序列帧,也或许是如同3D手游一般,更换模型动画. 对于游戏中的人物,一般分为头.上 ...

  5. vc listview 大图标间距设置

    SendMessage(this.listViewChart.Handle,   LVM_SETICONSPACING,   0,   0x10000   *   140   +   130); 其中 ...

  6. 在pycharm中进行nosetests并输出测试报告

    1.首先配置

  7. 【转载】Redis在新浪微博中的应用

    转载自文章 http://blog.me115.com/2013/12/19/redis-e5-9c-a8-e6-96-b0-e6-b5-aa-e5-be-ae-e5-8d-9a-e4-b8-ad-e ...

  8. Sql从一张表中更改另一张表数据

    语法: update table1 set table1.列=table2.列 from table2 where table2.列=table1.列update dbo.PATIENT     se ...

  9. TeamTalk 5

    TeamTalk 5 Repository for TeamTalk 5 development. Download TeamTalk 5 SDK To build the TeamTalk clie ...

  10. C#应用视频教程3.2 Halcon软件测试

    Halcon是图像处理比较牛逼的一个软件(德国人的东西,做的非常强大,里面集成的算法很多,可能你一辈子研究这个也做不过他),然而牛逼归牛逼,康耐视,基恩士也很牛逼,但是日本人的东西一般太过封闭,屌丝用 ...