Switch 内部变量 和 函数递归调用--接乘

Switch

初次学习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++用递归实现接乘

今天在编写用递归实现接乘的时候犯了一个很严重的错误:

//这是一个正确代码
#include<iostream>
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)

扫描二维码关注公众号,回复: 1002322 查看本文章

然后我对比了一下别人的代码,突然意识到,我对n没有进行判断,如果n无限-1的话,那么这个sum好“大”,

自然就会出现错误。


一步一步慢慢学,不怕学的比别人慢,就怕什么也没学懂。

----至自己

猜你喜欢

转载自blog.csdn.net/arctic_fox_cn/article/details/80304234