出错的地方

1,写for循环的时候遇到一个问题

for(int i=0, int j=9; i<j; i++, j--)  //错误在定义两个变量时出错,int i=0, j=9; 

{

cout<<"j-i"<<j-i<<endl;

}

报错:error: expected unqualified-id before ‘int’

2.涉及两个文件的处理

file1.cpp中定义了一个void reverse(char s[]);

file2.cpp中要用void reverse(char s[]);

分别编译出现问题:undefined reference to `reverse(char*)'

必须把两个有依赖关系的文件同时编译:g++ -o dl.o file1.cpp file2.cpp

这是再运行dl.o就可以了。

如果是有很多文件则需要在makefile中指定出文件之间的依赖关系和链接关系等等

3.scanf对应的输入和想要的结果不一样

一:while(scanf("%s, %d", a, &b)!=EOF){};

输入:1.2  3

结果:将“1.2”转化成1.2,然后求1.2的3次方,一直是1

调试:b的值并不是3而是0

修改:二:while(scanf("%s %d", a, &b)!=EOF){};

补充:对第一种形式,不可以输入》1.2,2    这样的话a="1.2,"还是不正确

warning!!!!!!输入必须和格式保持一致

4.scanf和getchar从输入流读取数据失败的原因


深入探索:http://blog.csdn.net/lihao21/article/details/6106696

5.关于switch的用法,出错

Error: Jump to case label

void loop(int type){
	int sum=0;
	switch(type){
		case 0:
			for(int i=1; i<=100; i++)
				sum+=i;
			printf("%d\n",sum);
			break;
		case 1:
			int j=1;
			while(j<=100){
				sum+=j;
				j++;
			}
			printf("%d\n",sum);
			break;	
		case 2:
			int t=1;
			do
				sum+=t;   //这里有个错误,t没有自增,所以会死循环
			while(t<=100);
			printf("%d\n",sum);
			break;
		default :
			printf("wrong type");
			break;
	}
}
1.这里的case对其后语句中定义的变量的作用域是不起隔离作用的,也就是说,在case 1:后面定义的变量,在case 3:的时候仍然存在
解决的方法就是在每一个case后面都用大括号括起来,起隔离作用。

6字符转成数字逻辑错误
for (int i = 0; i < numtochar.length(); i++) {
	chartonum += chartonum * 10 + numtochar[i] - '0';   //错误
}
改成:chartonum = chartonum * 10 + numtochar[i] - '0';
想到一个相关问题,累加的2种形式
1.
int temp=0;
for(int i=0; i<5; i++)
temp+=i;      //temp=temp+i,累加步长为1
2.
int temp=0;
for(int i=0; i<5; i++)
temp+=i;   //累加步长还是i,属于线性累加,斜率为1
temp=temp*10+i;     //非线性累加
i=0   temp=0
i=1 temp=1
i=2 temp=1*10+2=12
i=3 temp=12*10+3=123
i=4 temp=123*10+4=1234
貌似很有趣哦,用excel做个图表看看效果。。。。。

这个形式的数据,貌似特别适合用于字符转化为整数

7:对象含有与成员函数不兼容的类型限定符

Test(const Test& obj){m=obj.get();}   //get()原型:int get(){return m;}
改正:int get() const{return m;}

》》》》const 对象,const 成员变量,const成员函数《《《《http://blog.csdn.net/e_road_by_u/article/details/52215193
const对象+const成员变量》》要初始化

const成员变量在构造函数时候,只能通过初始化列表进行初始化

const成员函数不能调用其它非const成员函数,反之可以

const对象,表示在对象被调用的时候该对象的数据成员不能被改变(成员变量相当于是const)

const对象不能调用非const成员函数,只能调用cosnt成员函数

8:有多个重载函数实例与参数列表匹配

参数列表指的就是你调用函数时候的实参,比如swap(2,5);这个2,5就是参数列表
多个重载函数指的是定义了多个swap(),也就是出现重名了,但是形参又不能区分该调用哪一个重载函数

9:随机数使用错误:
#include<time.h>
#include<stdlib.h>
for(int i=0;i<10;i++){
srand((unsigned int)time(NULL));
arr[i]=rand()%10+1;
}

结果:arr[10]中的数都是同一个,每次运行时候会换成另一个数。这是因为for每一次去srand,而机器运行比较快,所以srand时间取得就是一样的
如果用debug版本调试,因为手动比较慢,所以调试出的结果是arr[10]有不同的数

改正:把srand()放到for循环的外面

10:malloc和free
--malloc出来的指针一般比要求的空间多几个字节,用来记录内存块的大小,一般在指针左边
--free的时候,读取指针地址减去一个常数之后的内存,获取内存块的大小,free只是断开了指针与内存的联系,指针
  本身还是有内存的,存了一个地址,所以 最后要赋值NULL,以防后面对该指针所存的地址进行操作。
--如果改变了malloc指针的位置,则会读取到错误的内存块大小,所以free一个不是malloc来的指针是很危险的
--malloc申请一个0字节内存时返回正常内存地址,但是不能使用,此时验证内存是否分配成功时,if(NULL!=p)是不行    的,还要同时看size的大小要大于0







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值