| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 642 人关注过本帖
标题:小弟我实在受不了了,第一个大一点的程序就出了这么个问题
只看楼主 加入收藏
huxiangwenhu
Rank: 4
等 级:业余侠客
威 望:1
帖 子:191
专家分:262
注 册:2010-6-1
结帖率:90.91%
收藏
已结贴  问题点数:30 回复次数:6 
小弟我实在受不了了,第一个大一点的程序就出了这么个问题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
#include<time.h>
void println()
{
    printf("        ---------------------------------------------------\n");
    printf("              //////////////////@\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");
    printf("        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("                           系—统—大—全\n") ;
    printf("        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\n");
    printf("        ---------------------------------------------------\n");
    printf("                        请输入你想进入的系统:\n");
    printf("                        0—年度收入统计系统\n");
    printf("                        1—个人所得税计算系统\n");
    printf("                        2—猜价格游戏软件系统\n");
    printf("                        3—卡拉OK大奖赛评分系统\n");
    printf("                        4—汉诺塔游戏答案告知系统\n");
    printf("                        5—退出系统系统\n");
    printf("        ---------------------------------------------------\n\n");
    printf("请输入选择:");
}

void incomestatics()
{
    printf("         *************************************************\n\n");
    printf("                        年度收入统计系统\n\n");
    printf("         *************************************************\n\n");
    int i;
    float sr[12];
    float sum=0,max=0,min=0,ave=0;
    float temp=0;
    for(i=0;i<12;i++)
    {
        printf("请输入第%d个月的公司收入:",i+1);
        scanf("%f",&sr[i]);
    }
    for(i=0;i<12;i++)
    {
        sum+=sr[i];
        ave=sum/12;        
    }
    max=min=sr[0];
    for(i=1;i<12;i++)
    {
        if(sr[i]>max)
            max=sr[i];
        if(sr[i]<min)
            min=sr[i];
    }
    printf("骏腾公司全年的总收入为%f\n",sum);
    printf("骏腾公司全年的平均收入为%f\n",ave);
    printf("骏腾公司全年的最大月收入为%f\n",max);
    printf("骏腾公司全年的最小月收入为%f\n",min);
}

void revenue()
{
    printf("         *************************************************\n\n");
    printf("                        个人所得税计算系统\n\n");
    printf("         *************************************************\n\n");
    float wage,revenue;
    printf("请输入你的月工资数(以元为单位):");
    scanf("%f",&wage);
    printf("请输入当地的个税起征点(如果不知道马上baidu一下):");
    scanf("%f",&revenue);
    if(wage<revenue)
        printf("这点钱也缴税,忒爱国了吧!");
    else if(wage>revenue&&wage<(revenue+500))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.05);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.05));
    }
    else if(wage>=(revenue+500)&&wage<(revenue+2000))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.10);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.10));
    }
    else if(wage>=(revenue+2000)&&wage<(revenue+5000))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.15);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.15));
    }
    else if(wage>=(revenue+5000)&&wage<(revenue+20000))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.20);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.20));
    }
    else if(wage>=(revenue+20000)&&wage<(revenue+50000))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.20);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.20));
    }
    else
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.30);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.30));
    }
    printf("纳税光荣!!!");
   

}

void guess()
{
    char hd[8];
    int s=1;
    printf("         *************************************************\n\n");
    printf("                        猜价格游戏软件系统\n\n");
    printf("         *************************************************\n\n");
    printf("他的价格在1-1000之间,谁猜中归谁,前提先回到一个问题\n\n\n");
    printf("当今世界谁最牛:");
    while(s)
    {

        //getchar();
        gets(hd);
        if(strcmp(hd,"huxiang")==0)
        {
            
            printf("算你识相,可以继续了");
            s=0;
        }
        else  
        {
            printf("这都不知道?给你个提示,我是谁?");
        }
    }
    int price,pricei,s1=1;
    srand((unsigned)time(NULL));
    price=rand()%1000;
    int i=0;
        while(s1&&i<10)
        {
            printf("请输入第%d次:",i+1);
            scanf("%d",&pricei);
            if(pricei==price)
            {
            printf("你真是个天才,答对了!!!\n");
            s1=0;
            }
            if(pricei<price)
                printf("一看就知道是个小气鬼!!!\n");
            if(pricei>price)
                printf("有这么大吗?\n");
            if(i==8)
                printf("你真是无敌了,再给你一次机会!!!\n");
            if(i==9&&pricei!=price)
            {
                printf("你注定没戏!!!\n");
            }
            i++;
        }
}

main()
{
    println();
    int xtxz,s=1;
    while(xtxz)
    {
        scanf("%d",&xtxz);
        switch(xtxz)
        {
        case 0:
            incomestatics();break;
        case 1:
            revenue();break;
        case 2:
            guess();break;
        }
    }

}
当调用函数guess(),也就是进入第三个系统“ 猜价格游戏软件系统”,输入2后,直接将printf("这都不知道?给你个提示,我是谁?");语句执行了,然后我讲注释去掉,加入第一次输入答案正确,就能够执行,如果第一次输入错误,以后就执行不正确了,程序无限执行printf("这都不知道?给你个提示,我是谁?");语句,但是我讲这个函数的内容单独建立一个程序运行,完全没问题,我用的是VC++编译器,小弟实在是无法了,求各位大哥大姐帮我看看问题,我估计这个地方我肯定是没学过的,谢谢了!!!
搜索更多相关主题的帖子: include 
2010-06-21 19:26
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:25 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
#include<time.h>
void println()
{
    printf("        ---------------------------------------------------\n");
    printf("              //////////////////@\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");
    printf("        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("                           系—统—大—全\n") ;
    printf("        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\n");
    printf("        ---------------------------------------------------\n");
    printf("                        请输入你想进入的系统:\n");
    printf("                        0—年度收入统计系统\n");
    printf("                        1—个人所得税计算系统\n");
    printf("                        2—猜价格游戏软件系统\n");
    printf("                        3—卡拉OK大奖赛评分系统\n");
    printf("                        4—汉诺塔游戏答案告知系统\n");
    printf("                        5—退出系统系统\n");
    printf("        ---------------------------------------------------\n\n");
    printf("请输入选择:");
}

void incomestatics()
{
    printf("         *************************************************\n\n");
    printf("                        年度收入统计系统\n\n");
    printf("         *************************************************\n\n");
    int i;
    float sr[12];
    float sum=0,max=0,min=0,ave=0;
    float temp=0;
    for(i=0;i<12;i++)
    {
        printf("请输入第%d个月的公司收入:",i+1);
        scanf("%f",&sr[i]);
    }
    for(i=0;i<12;i++)
    {
        sum+=sr[i];
        ave=sum/12;        
    }
    max=min=sr[0];
    for(i=1;i<12;i++)
    {
        if(sr[i]>max)
            max=sr[i];
        if(sr[i]<min)
            min=sr[i];
    }
    printf("骏腾公司全年的总收入为%f\n",sum);
    printf("骏腾公司全年的平均收入为%f\n",ave);
    printf("骏腾公司全年的最大月收入为%f\n",max);
    printf("骏腾公司全年的最小月收入为%f\n",min);
}

void revenue()
{
    printf("         *************************************************\n\n");
    printf("                        个人所得税计算系统\n\n");
    printf("         *************************************************\n\n");
    float wage,revenue;
    printf("请输入你的月工资数(以元为单位):");
    scanf("%f",&wage);
    printf("请输入当地的个税起征点(如果不知道马上baidu一下):");
    scanf("%f",&revenue);
    if(wage<revenue)
        printf("这点钱也缴税,忒爱国了吧!");
    else if(wage>revenue&&wage<(revenue+500))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.05);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.05));
    }
    else if(wage>=(revenue+500)&&wage<(revenue+2000))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.10);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.10));
    }
    else if(wage>=(revenue+2000)&&wage<(revenue+5000))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.15);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.15));
    }
    else if(wage>=(revenue+5000)&&wage<(revenue+20000))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.20);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.20));
    }
    else if(wage>=(revenue+20000)&&wage<(revenue+50000))
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.20);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.20));
    }
    else
    {
        printf("您应该缴纳的个税为:%f\n",(wage-revenue)*0.30);
        printf("您的实际收入为:%f\n",(wage-(wage-revenue)*0.30));
    }
    printf("纳税光荣!!!");
   

}

void guess()
{
    char hd[8];
    int s=1;
    printf("         *************************************************\n\n");
    printf("                        猜价格游戏软件系统\n\n");
    printf("         *************************************************\n\n");
    printf("他的价格在1-1000之间,谁猜中归谁,前提先回到一个问题\n\n\n");
    printf("当今世界谁最牛:");
    while(s)
    {

        //getchar();
        gets(hd);
        if(strcmp(hd,"huxiang")==0)
        {
            
            printf("算你识相,可以继续了");
            s=0;
        }
        else  
        {
            printf("这都不知道?给你个提示,我是谁?");
        }
    }
    int price,pricei,s1=1;
    srand((unsigned)time(NULL));
    price=rand()%1000;
    int i=0;
        while(s1&&i<10)
        {
            printf("请输入第%d次:",i+1);
            scanf("%d",&pricei);
            if(pricei==price)
            {
            printf("你真是个天才,答对了!!!\n");
            s1=0;
            }
            if(pricei<price)
                printf("一看就知道是个小气鬼!!!\n");
            if(pricei>price)
                printf("有这么大吗?\n");
            if(i==8)
                printf("你真是无敌了,再给你一次机会!!!\n");
            if(i==9&&pricei!=price)
            {
                printf("你注定没戏!!!\n");
            }
            i++;
  
        }
}
int main()
{
      println();
    int xtxz,s=1;
    scanf("%d",&xtxz);
   
    while(getchar()!='\n')
         continue;

    while(xtxz!=5)
    {
        
        switch(xtxz)
        {
        case 0:
            incomestatics();break;
        case 1:
            revenue();break;
        case 2:
            guess();break;
        }
       println();
        scanf("%d",&xtxz);
        
       while(getchar()!='\n')
         continue;

    }
   
      return 0;
}
2010-06-21 20:46
笨到家啦
Rank: 2
等 级:论坛游民
帖 子:19
专家分:73
注 册:2010-6-7
收藏
得分:5 
把语句getchar();放在循环体前面,也就是while(s)前面,不参加循环就OK了。

2010-06-21 22:10
huxiangwenhu
Rank: 4
等 级:业余侠客
威 望:1
帖 子:191
专家分:262
注 册:2010-6-1
收藏
得分:0 
回复 2楼 heartnheart
能帮我说说原因吗?呵呵,有点不太理解哦
2010-06-21 23:05
huxiangwenhu
Rank: 4
等 级:业余侠客
威 望:1
帖 子:191
专家分:262
注 册:2010-6-1
收藏
得分:0 
回复 3楼 笨到家啦
getchar()不是读入字符的函数吗?怎么还有这用途呢?如果方便的话,给我讲讲原理吧,呵呵
2010-06-21 23:08
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 


int main()
{
      println();
    int xtxz,s=1;
    scanf("%d",&xtxz);
   
    while(getchar()!='\n')
         continue;//是为了除掉输入选项后的回车符等,否则你的gets()会读取回车符,而不是用户输入的字符串

    while(xtxz!=5)//照你原来的怎么选0
    {
        
        switch(xtxz)
        {
        case 0:
            incomestatics();break;
        case 1:
            revenue();break;
        case 2:
            guess();break;
        }
       println();//执行完一次循环后再次打印列表让用户选择
        scanf("%d",&xtxz);//让用户输入选项
        
       while(getchar()!='\n')
         continue;//此处同上,这种方式比写一个getchar()好,为什么呢,
                        //因为作为一个小软件来说,用户可能输入2空格回车,这样只有一个getchar()还是不能正常运行

    }
   
      return 0;
}
2010-06-21 23:27
笨到家啦
Rank: 2
等 级:论坛游民
帖 子:19
专家分:73
注 册:2010-6-7
收藏
得分:0 
还是2楼想到全面,我那样没解决根本问题。
2010-06-22 08:24
快速回复:小弟我实在受不了了,第一个大一点的程序就出了这么个问题
数据加载中...
 
   



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

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