在阅读C中的字符时遇到问题

时间:2013-11-10 23:13:14

标签: c char

所以我有这个程序,我读了5个数字和一个逗号作为字符,并将它们全部代表。我已经设法这样做,但输出超级奇怪..

以下是代码:

#include <stdio.h>
#include <stdlib.h>

int main ()
{

int i=0;
float number = 0.0;
    char f;



printf("Introduce a number in the following format (ccc,cc):\n");

for(i=1; i<=6; i++){
    f=getchar();


    if(f=='\n' && i<6){
        printf("the number is not correct.\n");
        exit(1); }
    if(i==4 && f!=','){
        printf("The number doesn't have a comma.\n");
        exit(1); }
    if(i==4)
        continue;
    if((f<'0') || (f>'9')){
        printf(" %d is not a number .\n", i);
        exit(1); }



        switch (i)
        {
            case 1 : number = (f*100);
                break;
            case 2 : number += (f*10);
                break;
            case 3 : number = number + f;
                break;
            case 4: ;
                break;
            case 5 : number += (f * 0.1);
                break;
            case 6 : number += (f*0.01);
                break;
        }



}
    printf("The number you inserted is :%f\n",number);
}

数字123,45的输出应该是完全相同的数字,但不是这样我得到一个超级尴尬的事情:

Introduce a number in the following format (ccc,cc):  

123,45  

The number you inserted is :5456.729980  

任何帮助人员?

2 个答案:

答案 0 :(得分:1)

f包含字符代码,而不是数字的数值(例如'0'的代码是48,而不是零),这就是为什么你得到'奇怪'的输出。

您必须将f从数字(字符)翻译为其数值:在计算中使用f - '0'而不是f(在switch内)。或者只是将f = f - '0';放在switch之前。

f - '0'是一个有效的转换:数字的所有字符代码按顺序从“0”到“9”(如果查看ASCII表,很容易看到)。因此,如果f包含'0',则f - '0'0(注意:数字,而不是字符),如果f'1',{ {1}} f - '0' == '1' - '0'等等。

答案 1 :(得分:0)

您获得的每个字符都具有ASCII值。例如,如果你的char是“1”,那么它的数值是49.也许你想要查找函数scanf。它与printf类似,但它用于输入。