我被賦予了創建一個掃描浮點的過程,稱爲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;
}
複合賦值運算符的'= -'等形式在第一個標準被批准之前已經被廢除。 'sign = -1;'在過去(至少)30年中編寫的所有C編譯器中都是明確的'sign = -1;'(只有更少的可讀性)。 [「在B和C早期,操作員拼寫= +而不是+ =;這個錯誤在1976年修復,...」](http://cm.bell-labs.com/cm/cs/who/ DMR/chist。html)迂腐的筆記:「c採用字母的ASCII代碼」不一定是真的,它也可能是EBCDIC(或者不同的編碼,但是與ASCII兼容,EBCDIC是我知道使用的唯一的)。 –
@Daniel Fischer我很少看到一個非間距的'= - ',我和你一樣,確信它已經過時。我對代碼的測試_儘管做了' - ='函數。我會稍後再回顧一下。一般來說,關於「c採用ASCII ...不必是真的」,但OP的「如果我輸入」1「它打印49」肯定指向ASCII。順便說一句,在ASCII或EBCDIC中,(c - '0')將'c'轉換爲其數值。 – chux
當我在'sign = -1;'後面打印'sign'時,我的代碼調試出錯了(我假設它是一個'int'類型與'float'類似的類型,看到一個'0' (儘管已經過時)'C'語法。mea culpa) – chux