| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1165 人关注过本帖, 1 人收藏
标题:刚学C语言,问题求解!
只看楼主 加入收藏
时光不再
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-5
结帖率:50%
收藏(1)
已结贴  问题点数:20 回复次数:17 
刚学C语言,问题求解!
#include<stdio.h>
#include<stdlib.h>
我没事喜欢自学一下C语言,前不久写完这个简易计算器程序运行后发现,输入y(或Y)并不能实现计算器的循环,而是在屏幕上显示y字符,按回车直接退出了!看了好久,可能是知识还不够,没能找出原因,请各位大神帮忙指正下,谢谢。下面是程序:

#include<conio.h>
main()
{
    int choose;  
    float data1,data2;  
    char yes_no;
    yes_no='y';
    while(yes_no=='y'||yes_no=='Y')
    {
   //----------------------程序段A--------------------------------------------------------
    system("cls");
    printf("\n\n");
    printf("\t\t********************************************\n");
    printf("\t\t*              简易计算器                  *\n");
    printf("\t\t********************************************\n");
    printf("\t\t*           1——加法                      *\n");
    printf("\t\t*           2——减法                      *\n");
    printf("\t\t*           3——乘法                      *\n");
    printf("\t\t*           4——除法                      *\n");
    printf("\t\t*           0——退出                      *\n");
    printf("\t\t********************************************\n");
    printf(" 请选择运算类型(0--4):");
    scanf("%d",&choose);
    //-----------------------程序段B---------------------------------------------------
    if(choose>=1&&choose<=4)
    {
        printf("请输入两个运算数(两数之间用空格隔开):");
        scanf("%f%f",&data1,&data2);
        printf("运算结果为:\n");
    }
    //----------------------程序段C----------------------------------------------------
    switch(choose)
    {
    case 1: printf("%f+%f=%.2f\n",data1,data2,data1+data2);break;
    case 2:    printf("%f-%f=%.2f\n",data1,data2,data1-data2);break;
    case 3: printf("%f*%f=%.2f\n",data1,data2,data1*data2);break;
    case 4:
   
        if(data2==0)
        printf("\t\t  除数不能为零!");
        else
        printf("%f/%f=%.2f\n",data1,data2,data1/data2);break;
    case 0: exit(0);
    default: printf("\t\t  输入选项错误!\n" );
   }
  //--------------------------------------------------------------------------
   printf("是否继续(输入'y'或'Y'继续)?\n");
   scanf("%c",&yes_no);
}
}
搜索更多相关主题的帖子: include C语言 知识 
2013-05-10 14:00
hebiaofu
Rank: 2
等 级:论坛游民
帖 子:6
专家分:21
注 册:2013-5-9
收藏
得分:1 
   printf("是否继续(输入'y'或'Y'继续)?\n");在这句话前面
加上getchar();试试
2013-05-10 16:07
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
二楼正解!

练就一身本领,只为笑傲江湖!
2013-05-10 16:17
我爱敲代码
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:70
专家分:165
注 册:2013-4-23
收藏
得分:3 
//帮你改了一下,可以运行了,最主要的问题是 scanf("%c",&yes_no)应该改成 scanf("%s",&yes_no),你定义的yes_no应该是字符串不是字符。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
 void main()
{
    int choose;  
    float data1,data2;  
    char yes_no;
    yes_no='y';
    system("cls");
    printf("\n\n");
    printf("\t\t********************************************\n");
    printf("\t\t*              简易计算器                  *\n");
    printf("\t\t********************************************\n");
    printf("\t\t*           1——加法                      *\n");
    printf("\t\t*           2——减法                      *\n");
    printf("\t\t*           3——乘法                      *\n");
    printf("\t\t*           4——除法                      *\n");
    printf("\t\t*           0——退出                      *\n");
    printf("\t\t********************************************\n");
    while(yes_no=='y'||yes_no=='Y')
    {
        
   
    printf(" 请选择运算类型(0--4):");
    scanf("%d",&choose);
    if(choose>=1&&choose<=4)
    {
        printf("请输入两个运算数(两数之间用空格隔开):");
        scanf("%f%f",&data1,&data2);
        printf("运算结果为:\n");
    }
    else
        printf("输入有误,请重新输入!\n");
        
    //----------------------程序段C----------------------------------------------------
 
   
    switch(choose)
    {
    case 1: printf("%f+%f=%.2f\n",data1,data2,data1+data2);break;
    case 2:    printf("%f-%f=%.2f\n",data1,data2,data1-data2);break;
    case 3: printf("%f*%f=%.2f\n",data1,data2,data1*data2);break;
    case 4:
   
        if(data2==0)
        printf("\t\t  除数不能为零!");
        else
        printf("%f/%f=%.2f\n",data1,data2,data1/data2);break;
    case 0:
        printf("谢谢使用,再见!\n");
        break;
    default:
        printf("\t\t  输入选项错误!\n" );
        break;
   }
   printf("是否继续(输入'y'或'Y'继续)?\n");
   scanf("%s",&yes_no);
    }
}
收到的鲜花
  • 时光不再2013-05-10 18:54 送鲜花  2朵   附言:我试了下,能运行了 刚玩贴吧 还不知道怎 ...
2013-05-10 16:34
时光不再
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-5
收藏
得分:0 
回复 4楼 我爱敲代码
想再请教一下您,输入Y的时候 我得在键盘上连敲ENTER键三下,能不能减少次数啊  比如输入Y后敲一次就循环到新界面了  求赐教
2013-05-10 18:57
时光不再
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-5
收藏
得分:0 
回复 2楼 hebiaofu
我不是很能理解这样改的原因,求解释一下 谢谢
2013-05-10 18:58
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:3 
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main()
{
    int choose;  
    float data1,data2;  
    char yes_no;
    yes_no='y';
    while(yes_no=='y'||yes_no=='Y')
    {
   //----------------------程序段A--------------------------------------------------------
    system("cls");
    printf("\n\n");
    printf("\t\t********************************************\n");
    printf("\t\t*              简易计算器                  *\n");
    printf("\t\t********************************************\n");
    printf("\t\t*           1——加法                      *\n");
    printf("\t\t*           2——减法                      *\n");
    printf("\t\t*           3——乘法                      *\n");
    printf("\t\t*           4——除法                      *\n");
    printf("\t\t*           0——退出                      *\n");
    printf("\t\t********************************************\n");
    printf(" 请选择运算类型(0--4):");
    scanf("%d",&choose);
    //-----------------------程序段B---------------------------------------------------
    if(choose>=1&&choose<=4)
    {
        printf("请输入两个运算数(两数之间用空格隔开):");
        scanf("%f%f",&data1,&data2);
        printf("运算结果为:\n");
    }
    //----------------------程序段C----------------------------------------------------
    switch(choose)
    {
    case 1: printf("%f+%f=%.2f\n",data1,data2,data1+data2);break;
    case 2:    printf("%f-%f=%.2f\n",data1,data2,data1-data2);break;
    case 3: printf("%f*%f=%.2f\n",data1,data2,data1*data2);break;
    case 4:
   
        if(data2==0)
        printf("\t\t  除数不能为零!");
        else
        printf("%f/%f=%.2f\n",data1,data2,data1/data2);break;
    case 0: exit(0);
    default: printf("\t\t  输入选项错误!\n" );
   }
  //--------------------------------------------------------------------------
   printf("是否继续(输入'y'或'Y'继续)?\n");
   getchar();               //吸收回车键;
   scanf("%c",&yes_no);
}
}
这个就可以!

[ 本帖最后由 笑傲 于 2013-5-10 21:42 编辑 ]

练就一身本领,只为笑傲江湖!
2013-05-10 21:37
松花江的冰
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-3-21
收藏
得分:0 
顶楼上,没事还是要多看谭浩强的书啊,呵呵。
2013-05-10 23:19
雨中人X
Rank: 2
等 级:论坛游民
帖 子:8
专家分:18
注 册:2013-3-9
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>

 main()

 {
     int choose;
     float data1,data2;
     char yes_no;
     yes_no='y';
     do
     {
    //----------------------程序段A--------------------------------------------------------
    system("cls");
     printf("\n\n");
     printf("\t\t********************************************\n");
     printf("\t\t*              简易计算器                  *\n");
     printf("\t\t********************************************\n");
     printf("\t\t*           1——加法                      *\n");
     printf("\t\t*           2——减法                      *\n");
     printf("\t\t*           3——乘法                      *\n");
     printf("\t\t*           4——除法                      *\n");
     printf("\t\t*           0——退出                      *\n");
     printf("\t\t********************************************\n");
     printf(" 请选择运算类型(0--4):");
     scanf("%d",&choose);
     //-----------------------程序段B---------------------------------------------------
    if(choose>=1&&choose<=4)
     {
         printf("请输入两个运算数(两数之间用空格隔开):");
         scanf("%f%f",&data1,&data2);
         printf("运算结果为:\n");
    }
    else if(choose!=0)
    {
        printf("输入错误!\n");
        printf("正在退出....\n");
        exit(0);
    }
     //----------------------程序段C----------------------------------------------------
    switch(choose)
     {
     case 1: printf("%f+%f=%.2f\n",data1,data2,data1+data2);break;
     case 2: printf("%f-%f=%.2f\n",data1,data2,data1-data2);break;
     case 3: printf("%f*%f=%.2f\n",data1,data2,data1*data2);break;
     case 4:
         {
             if(data2==0)
             {
                printf("\t\t  除数不能为零!");break;
             }
             else
             {
                 printf("%f/%f=%.2f\n",data1,data2,data1/data2);break;
             }
         }
     case 0:printf("正在退出....\n");break;
     }

   //--------------------------------------------------------------------------
    if(choose!=0)
    {
       printf("是否继续(输入'y'或'Y'继续)?\n");
           getchar();//屏蔽上次输入时回车键
            scanf("%c",&yes_no);
        getchar();//再次屏蔽输入yes_no时的回车键
    }
    else
        break;
     }while(yes_no=='y'||yes_no=='Y');

 }
2013-05-11 12:28
雨中人X
Rank: 2
等 级:论坛游民
帖 子:8
专家分:18
注 册:2013-3-9
收藏
得分:1 
有些按键不会再控制台显示出来,会存留在缓存器中,所以需要用getshar函数把那个键值除去。
2013-05-11 12:31
快速回复:刚学C语言,问题求解!
数据加载中...
 
   



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

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