1.continue,break类的错误(HDU1877

#include<iostream>
using namespace std;
int main()
{
int a,b,m,sum;
while(cin>>m,m)
{
int p[100]={0};
cin>>a>>b;
sum=a+b;
if(!sum)//是0的话就不用再进行考虑了
{
cout<<0<<endl;
continue;//闲着没事,做个简单题,却由于忘了 continue 而 Presentation Error 了非常多次
}
int i=0;
while(sum)
{
p[i]=sum%m;
sum/=m;
i++;
}
for(int j=i-1;j>=0;j--)
cout<<p[j];
cout<<endl;
}
}

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

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

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

问题是:
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

#include<iostream>
#include<set>
#include<string>
using namespace std;
int main()
{
set<string> st;
string str;
char c;
str.clear();
while((c=cin.get())!='#')
{
while(c!=' '&&c!='\n')
{
str+=c;
c=cin.get();
}
if(str.length())
{
st.insert(str);
str.clear();
}
if(c=='\n')
{
cout<<st.size()<<endl;
st.clear();
str.clear();
}
}
return 0;
} <span style="font-size:18px;"> 
</span>

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

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

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

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

7.数学公式运算

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

pow(10.0,num++);

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

#include<cstdio>
using namespace std;
long long a[100005]={0};
int main()
{
for(long long i=1;i<100002;i++)
{
if(i%3==0)
a[i]=a[i-1]+i*i*i;//i的3次方
else
a[i]=a[i-1]+i;
}
int n;
while(scanf("%d",&n)&&n>=0)
{
printf("%lld\n",a[n]);
}
return 0;
}

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

採用

int len = strlen(str);
for(int i = 0;i < len;i++)
{ }

pass掉

for(int i = 0;i < strlen(str);i++)
{ }

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. TPS61175/TPS55340 3A/5A、40V 电流模式集成 FET 升压 DC/DC 转换器

    集成型5A 40V 宽输入范围升压/单端初级电感转换器(SEPIC) / 反激式(Flyback) 直流到直流稳压器 (Rev. B) 描述 TPS55340 是一款单片非同步开关稳压器,此稳压器带有 ...

  2. Eclipse 结合Tomcat开发Web应用

    第一部分 配置Tomcat 先到Apache官方网站下载Tomcat:http://tomcat.apache.org/.  但是在你下载Tomcat时,首选确定你的Eclipse支持的Tomcat版 ...

  3. 第十二章 Openwrt无法识别2.0 USB 盘

    今天新的U盘不能识别,还以为是U盘本身的问题,原来是缺少 kmod-usb-storage kmod-usb-storage-extras 这两个软件包. 软件包安装后重启便可识别.

  4. Linux命令大全----系统管理相关命令

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka       摘要:本文主要讲了Linux命令大全----系统管理相关命令,并附有实例 一.安装 ...

  5. 关于TagHelper的那些事情——自定义TagHelper(格式化输出、依赖注入使用)

    自定义TagHelper的最后一步就是在Process方法或ProcessAsync方法中添加展现代码.熟悉WebControl开发的朋友都知道Render方法,在这个方法中会添加展现的Html元素和 ...

  6. Scrum 思考

    下个月就要离职,所以这个月特别清闲,上班时间都在上网看书,偶然在Startup News的一篇文章(http://blog.devtang.com/blog/2013/06/17/startup-an ...

  7. OpenCV学习(11) 图像的腐蚀与膨胀(2)

    先对一副灰度图像进行腐蚀操作,然后在腐蚀后的图像上再进行膨胀操作,我们定义这个操作为开操作. 先对一副图像进行膨胀操作,然后在膨胀后的图像上再进行腐蚀操作,我们定义这个操作为闭操作.       开操 ...

  8. 使用WebView出现web page not available

    很有可能是没有设置权限,所以不能浏览相应的URL,设置如下: 在AndroidManifest.xml中添加 <uses-permission android:name="androi ...

  9. (笔试题)N!尾部连续0的个数

    题目: 对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度.如:18!=6402373705728000,尾部连续0的个数是3. (不用考虑数值超出计算机整数界限的问题) 思路 ...

  10. PHP 图像因其本身有错无法显示怎么办

    1 先确认自己的PHP和GD库版本够高,根据PHP手册的要求,PHP最好高于4.0.6,GD库要求2.0.1 2 对于使用PHPNOW的用户,在首页就可以找到相关信息 3 你也可以运行以下代码来检测是 ...