| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 585 人关注过本帖
标题:初学C的一些迷茫
只看楼主 加入收藏
xcx901223
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-12-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
初学C的一些迷茫
以下是一个简单个人理财程序,程序的问题出现在void income()和void disburse(),当输入一个具体的数字后sum函数并没有执行,程序可以运行,余额一直为0。。。。。。
#include <stdio.h>
float sum;
void calculator()
{
    int op1, op2, res;
    char open;
    scanf("%d", &op1);
    open=getchar();
    res=op1;
    while(open!='=')
        {
            scanf("%d",&op2);
            if(open=='s')
            res=res+op2;
            if(open=='d')
            res=res-op2;
            if(open=='*')
            res=res*op2;
            if(open=='/')
            res=res/op2;
            open=getchar();
        }
    printf("%d\n", res);
}

void inquire()
{
    printf("当前余额为:%d元:\n",sum);
}
void income()
{
    float x;
    sum=0;
    printf("请输入进账数额:\n");
    scanf("%f",&x);
    sum=sum+x;
}
void disburse()
{float x;
printf("请输入支出数额:\n");
scanf("%f",&x);
sum=sum-x;
}
void account()
{
int x;
printf("***********************************\n");
printf("1.支出 2.进账 3.退出 4.查询余额\n");
printf("***********************************\n");
scanf("%d",&x);
switch(x)
{
  case 1:  disburse();break;
  case 2:  income();break;
  case 3:  printf("欢迎使用,再见!\n");break;
  case 4:  inquire();break;
}
}
void password()
{
    long int a;
    int b=1;
    do
    {
    printf("请输入密码!\n");
    scanf("%d",&a);
    if(a==123456)
        {
        printf("密码输入正确,欢迎进入个人理财系统!\n\n\n\n\n");
        b=0;
        }
    else
        printf("密码输入错误!\n");
    }
    while(b);
}
void main()
{
password();
loop: int x;
printf("\n******************************\n");
printf("\n个人理财系统1.0 by xiaochenxi\n");
printf("\n******************************\n");
printf("请选择管理项目:\n");
printf("1.详细账目输入\n");
printf("2.查询当前余额\n");
printf("3.小工具(计算器)\n");
printf("4.退出\n");
scanf("%d",&x);
    switch(x)
    {
        case 1: account();goto loop;
        case 2: inquire();goto loop;
        case 3: calculator();goto loop;
        case 4: printf ("欢迎再次使用,再见!"); break;
        default:printf ("输入错误!"); break;
    }
}
搜索更多相关主题的帖子: 个人 
2010-12-29 14:42
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
#include <stdio.h>
static float sum=0;
void calculator()
{
    int op1, op2, res;
    char open;
    scanf("%d", &op1);
    open=getchar();
    res=op1;
    while(open!='=')
        {
            scanf("%d",&op2);
            if(open=='s')
            res=res+op2;
            if(open=='d')
            res=res-op2;
            if(open=='*')
            res=res*op2;
            if(open=='/')
            res=res/op2;
            open=getchar();
        }
    printf("%d\n", res);
}

void inquire()
{
    printf("当前余额为:%d元:\n",sum);
}
void income()
{
    float x;
    //sum=0不要
     printf("请输入进账数额:\n");
    scanf("%f",&x);
    sum=sum+x;
}
void disburse()
{float x;
printf("请输入支出数额:\n");
scanf("%f",&x);
sum=sum-x;
}
void account()
{
int x;
printf("***********************************\n");
printf("1.支出 2.进账 3.退出 4.查询余额\n");
printf("***********************************\n");
scanf("%d",&x);
switch(x)
{
  case 1:  disburse();break;
  case 2:  income();break;
  case 3:  printf("欢迎使用,再见!\n");break;
  case 4:  inquire();break;
}
}
void password()
{
    long int a;
    int b=1;
    do
    {
    printf("请输入密码!\n");
    scanf("%d",&a);
    if(a==123456)
        {
        printf("密码输入正确,欢迎进入个人理财系统!\n\n\n\n\n");
        b=0;
        }
    else
        printf("密码输入错误!\n");
    }
    while(b);
}
void main()
{
password();
loop: int x;
printf("\n******************************\n");
printf("\n个人理财系统1.0 by xiaochenxi\n");
printf("\n******************************\n");
printf("请选择管理项目:\n");
printf("1.详细账目输入\n");
printf("2.查询当前余额\n");
printf("3.小工具(计算器)\n");
printf("4.退出\n");
scanf("%d",&x);
    switch(x)
    {
        case 1: account();goto loop;
        case 2: inquire();goto loop;
        case 3: calculator();goto loop;
        case 4: printf ("欢迎再次使用,再见!"); break;
        default:printf ("输入错误!"); break;
    }
}

   唯实惟新 至诚致志
2010-12-29 15:11
xcx901223
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-12-24
收藏
得分:0 
回复 2楼 qq1023569223
试验了哈,还是有错,余额查询依旧为0。。。。
2010-12-29 15:40
东东88
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-12-29
收藏
得分:0 
给力
2010-12-29 15:44
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:20 
#include <stdio.h>
static float sum=0;
void calculator()
{
    int op1, op2, res;
    char open;
    scanf("%d", &op1);
    open=getchar();
    res=op1;
            scanf("%d",&op2);
            if(open=='s')
            res=res+op2;
            if(open=='d')
            res=res-op2;
            if(open=='*')
            res=res*op2;
            if(open=='/')
            res=res/op2;
           printf("%d\n", res); //计算器用一次就好了
}

void inquire()
{
    printf("当前余额为:%.2f元:\n",sum); //sum为小数的,%f,2限制用两位小数输出
}
void income()
{
    float x;
    //sum=0不要
     printf("请输入进账数额:\n");
    scanf("%f",&x);
    sum=sum+x;
}
void disburse()
{float x;
printf("请输入支出数额:\n");
scanf("%f",&x);
sum=sum-x;
}
void account()
{
int x;
printf("***********************************\n");
printf("1.支出 2.进账 3.退出 4.查询余额\n");
printf("***********************************\n");
scanf("%d",&x);
switch(x)
{
  case 1:  disburse();break;
  case 2:  income();break;
  case 3:  printf("欢迎使用,再见!\n");break;
  case 4:  inquire();break;
}
}
void password()
{
    long int a;
    int b=1;
    do
    {
    printf("请输入密码!\n");
    scanf("%d",&a);
    if(a==123456)
        {
        printf("密码输入正确,欢迎进入个人理财系统!\n\n\n\n\n");
        b=0;
        }
    else
        printf("密码输入错误!\n");
    }
    while(b);
}
void main()
{
password();
loop: int x;
printf("\n******************************\n");
printf("\n个人理财系统1.0 by xiaochenxi\n");
printf("\n******************************\n");
printf("请选择管理项目:\n");
printf("1.详细账目输入\n");
printf("2.查询当前余额\n");
printf("3.小工具(计算器)\n");
printf("4.退出\n");
scanf("%d",&x);
    switch(x)
    {
        case 1: account();goto loop;  break;
        case 2: inquire();goto loop;  break;  //break是最关键的
        case 3: calculator();goto loop;  break;
        case 4: printf ("欢迎再次使用,再见!"); break;
        default:printf ("输入错误!"); break;
    }
}

   唯实惟新 至诚致志
2010-12-29 16:02
xcx901223
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-12-24
收藏
得分:0 
回复 5楼 qq1023569223
成功了,谢谢你。
但是我还是有点不懂的是,
为什么要用静态变量去对sum赋值?1开始用全局变量不行么?
2010-12-29 16:09
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
回复 6楼 xcx901223
那个static去掉应该也是可以的,加上是为了保险。因为每一次钱的进出都要存档,保留上一次的钱数。也就是说无论函数怎么运行,他都要记忆上一次钱的余额。这就真正体现了静态变量的作用。
结贴啊,给分呢。

[ 本帖最后由 qq1023569223 于 2010-12-29 16:25 编辑 ]

   唯实惟新 至诚致志
2010-12-29 16:24
快速回复:初学C的一些迷茫
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017284 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved