| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1216 人关注过本帖
标题:一道字符输入/输出的问题
只看楼主 加入收藏
lzadddxxx
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-10-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
一道字符输入/输出的问题
图片附件: 游客没有浏览图片的权限,请 登录注册

本人目前在自学C primerplus,这是一道来自本书的练习题
以下是我的代码
程序代码:
#include<stdio.h>
#include<ctype.h>
char get_choice();
double get_number();
char get_first_char();


void main()
{
    char ch;
    double first,second,ans;
    while((ch=get_choice())!='q')
    {
        printf("Enter first number:");
        first=get_number();
        printf("Enter second number:");
        while((second=get_number())==0&&ch=='d')
            printf("Enter a number other than 0:");
        switch(ch)
        {
            case 'a':ans=first+second;
                    printf("%.1f + %.1f = %.1f\n",first,second,ans);
                    break;
            case 's':ans=first-second;
                    printf("%.1f - %.1f = %.1f\n",first,second,ans);
                    break;
            case 'm':ans=first*second;
                    printf("%.1f * %.1f = %.1f\n",first,second,ans);
                    break;
            case 'd':ans=first/second;
                    printf("%.1f / %.1f = %.1f\n",first,second,ans);
                    break;
            default :printf("Systme error!");
                    break;
        }
    }
    printf("Bye.");
    //putchar(menu());
}
char get_choice()
{
    char ch;

    printf("Enter the operation of your choice:\n");
    printf("a.add          s.subtract\n");
    printf("m.multiply     d.divide\n");
    printf("q.quit\n");

    ch=get_first_char();
    while(ch!='a'&&ch!='s'&&ch!='m'&&ch!='d'&&ch!='q')
    {
        printf("Please respond with a, s, m, d, or q.\n");
        ch=get_first_char();
    }

    return ch;
}

char get_first_char()
{
    char ch;

    while(isspace(ch=getchar()))
    {
        if(ch=='\n')
            printf("No alpha received,please try again.\n");
    }
    while(getchar()!='\n')
        continue;
    return ch;
}

double get_number()
{
    double n;
    char ch;

    while(scanf("%f",&n)!=1)
    {
        while((ch=getchar())!='\n')
          putchar(ch);
        printf(" is not an number.\n");
        printf("Please enter a number, such as 2.5, -1,7E8, or 3:");
    }
    return n;
}


运行到读入数据的函数时发现无法读入浮点数,自己找不到问题出在哪,发帖希望大家指点一下。
谢谢!
搜索更多相关主题的帖子: 练习题 second 
2016-03-08 00:25
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:20 
n要定义为浮点型
float  n = 0;
2016-03-08 09:11
lzadddxxx
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-10-29
收藏
得分:0 
感谢,将所有的double换为float后,问题已解决。
不过还是有小小的疑问:
1.double型浮点数应该用%f读取,为什么此处不能读入?
2.假如我要在此例使用更长的浮点精度应该如何实现?
2016-03-08 10:36
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 3楼 lzadddxxx
double是用lf%吧?记得好像是;你把所有的float全部改回double,把对应的f%改成lf%再试下呢?
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2016-3-8 10:58编辑过]

2016-03-08 10:53
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
双精度的话就用scanf("%lf", &n)
2016-03-08 10:56
lzadddxxx
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-10-29
收藏
得分:0 
真是个再简单不过的错误,谢谢各位解答
2016-03-10 11:24
快速回复:一道字符输入/输出的问题
数据加载中...
 
   



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

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