注册 登录
编程论坛 C++教室

求助!!!!!!!新手问个简单的问题!!

zhxhhyqj 发布于 2008-03-21 22:15, 1064 次点击
我的目的是输入底数和指数,计算结果,并且能实现循环输入,而不会出现程序运行一次就跳出;

#include<iostream>

using namespace std;
   
int myFunc(unsigned short x,unsigned short y);
  int sum=1,i=1;
  main()
{
    
      int x=0,y=0;
           int sum=1,i=1;  //................................此处为标记处

    double t;
      cout<<"输入底数:";
      cin>>x;
      cout<<"\n输入指数:";
      cin>>y;
      t=myFunc(x,y);
      cout<<"\n结果为:"<<t<<endl;
    
      main();
      
  return 0;
    
}
  int myFunc(unsigned short a,unsigned short b)
  {
    
     if(i<=b)
     {
         sum*=a;
         i++;
         myFunc(a,b);
     }
     return sum;
    
  }
编译没有错,当我运行的时候~~第一次输入出来结果是对的!!!但是再次输入时结果就出错!!
运行结果如下:
输入底数:3
输入指数: 2
结果为:9
输入底数:5
输入指数: 2
结果为:9
但是我在上面的标记处那行int 去掉,程序运行时就不会出错了,也就是  int sum=1,i=1;改成 sum=1,i=1;.程序就对了.
高手能给我解释下为什么吗?
7 回复
#2
aipb20072008-03-22 00:29
作为一个新手,我只能说你的代码风格一塌糊涂。
一些规范要遵守:
main要写成 int main 并返回0(编译通过不等于正确);
你的程序是个无穷递归,没有出口,在main中调用它本身是不推荐的;
你要有全局和局部的概念,不要混用,造成阅读的困难,和你自己的错误;

接下来说你的问题:
首先你定义了全局的sum和i,并在函数中使用,记住myFunc中的sum和i是main外定义的sum和i。
在main中,你再次定义了局部的sum和i,此时全局的被隐藏,不可见,所以你第2次执行时myFunc中的sum和i是没有更新的依然保留了上次的值。
如果你在main中把int去掉,那么这里的sum和i就是可见的全局变量了,并被更新,再去myFunc里,都是1,1了,结果正常。
#3
zhxhhyqj2008-03-24 13:54
谢谢了~~现在明白了!!
#4
flyue2008-03-24 14:02
把main后面的代码放在
while(1)
{
...
}
内,用if(getchar() == VK_ESCAPE)return 0;
来结束程序
#5
zhxhhyqj2008-03-24 14:17
if(getchar() == VK_ESCAPE)return 0
是什么意思?
输入什么字符结束程序?
#6
飞陨2008-03-24 19:08
那个捕获输入的按键..要是程序运行时按了Esc键就执行return 0 结束
#7
xiaxiang19862008-03-24 20:17
回复 6# 的帖子
怎么加呀?你能把那个结束语句加到那个程序去吗?是不是还要什么头文件!
#8
zhxhhyqj2008-03-25 18:23
回复4#:
if(getchar() == VK_ESCAPE)return 0;这个代码怎么写进去啊~~~~
有这个代码后~~运行有错!!!提示如下!!
要添加个什么头文件吗?
error C2065: 'VK_ESCAPE' : undeclared identifier
1