扫描浮动,看似随机的值

时间:2013-06-11 16:23:54

标签: math floating-point getch

我被赋予了一个赋值,用于创建一个扫描浮点数的过程,称为getfloat。

由于某种原因,我得到随机值。如果我输入“1”则打印49.为什么会这样?而且,当我输入值时,我在屏幕上看不到它们?当我使用scanf时,我会在小黑屏上看到我点击的内容。但现在屏幕只是空白,当我点击进入它时显示输出错误:

示例 - 输入:-1。产量:499.00000 这是我的代码:

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <ctype.h>
void getfloat(float* num);
void main()
{
    float num=0;
    printf("Enter the float\n");
    getfloat(&num);
    printf("\nThe number is %lf\n",num);
    getch();
}
void getfloat(float* num)
{
    float c,sign=1,exponent=10;
    c=getch();
    if((!isdigit(c))&&(c!='+')&&(c!='-')) //if it doesnt start with a number a + or a -, its not a valid input
    {
        printf("Not a number\n");
        return;
    }
    if(c=='-') //if it starts with a minus, make sign negative one, later multiply our number by sign
        sign=-1;
    for(*num=0;isdigit(c);c=getch())
        *num=(*num*10)+c; //scan the whole part of the number
    if(c!='.') //if after scanning whole part, c isnt a dot, we finished
        return;
    do //if it is a dot, scan fraction part
    {
        c=getch();
        if(isdigit(c)) 
        {
            *num+=c/exponent;
            exponent*=10;
        }
    }while(isdigit(c));
    *num*=sign;
}

3 个答案:

答案 0 :(得分:1)

49是数字1的Ascii代码。因此,当(0'<=c && c <='9')需要减去'0'以获取数字时。

答案 1 :(得分:1)

有很多问题。

1)您发布的代码与您的示例不匹配&#34;输入:-1。输出:499.00000&#34;,由于在找到'-'后缺少getch(),我得到0。见#6。

1)&#39; c&#39;是一个角色。当您输入'1'时,c接受了字母1的代码,在您的情况下为ASCII编码,为49.要将数字从其ASCII值转换为数字值,请减去48(字母'0'的ASCII代码,通常以c - '0'

完成
*num=(*num*10)+c;
*num+=c/exponent;

变为

*num = (*num*10) + (c-'0');
*num += (c-'0')/exponent;

2)虽然您将c声明为float,但建议您将其声明为intint是来自getch()的返回类型。

3)函数getch()是&#34;用于从控制台获取角色但不回显到屏幕&#34;。这就是你没有看到它们的原因。请考虑使用getchar()

4)[编辑:删除避免=-。谢谢@Daniel Fischer]

5)您的指数计算需要返工。注意:你的指数可能会收到一个符号字符。

6)当您测试if(c=='-')时,您不会再获取另一个c。您还可能希望测试else if(c=='+')并使用c

祝你好运C

答案 2 :(得分:0)

一个小提示:49是ASCII的{​​{1}} 1。您正在使用getch(),它会返回值character