初次学习Switch遇到了内部变量问题,不懂,便记录下来。
运用switch的例子:
switch(22%2) { case 0: cout<<"偶数"<<endl; break; case 1: cout<<"奇数"<<endl; break; default: ; }
这部分挺简单理解的,就是switch括号里有一个表达式,根据表达式返回的值去做匹配。如果匹配到case 里的值就执行case 那部分,执行完跳出switch语句外面。
然后我就遇到了一个问题,就是switch内部变量的定义问题:
switch(22%3) { case 0: int var_st; var_st=0; // string var_st; // var_st="偶数"; cout<<var_st<<endl; break; case 1: // var_st="奇数"; var_st=1; cout<<var_st<<endl; break; default: ; }
调用注释部分内容时出错(定义string 与 in 类型 互换),没有调用时正确。
经过查找及学习,整理结论:
在定义string var_st时,系统会隐士赋值,var_st="\0"。而在switch内部会跳过初始化变量,而不会跳过未初始化定义。就算case 0 没有执行,但是系统也会执行定义语句。
C++用递归实现接乘
今天在编写用递归实现接乘的时候犯了一个很严重的错误:
//这是一个正确代码 using namespace std; int f(int n); int main() { int a; cout<<"请输入你想要计算的数字:"<<endl; cin>>a; cout<<f(a)<<endl; return 0; } int f(int n) { int sum=1; if(n==1) return 1; else { sum=n*f(n-1); } return sum; }
我最开始的程序中函数定义部分:
int f(int n) { int sum=1; sum=n*f(n-1); return sum; }
但是每次会出现
Segmentation fault (core dumped)
然后我对比了一下别人的代码,突然意识到,我对n没有进行判断,如果n无限-1的话,那么这个sum好“大”,
自然就会出现错误。
一步一步慢慢学,不怕学的比别人慢,就怕什么也没学懂。