1

所以我有这个程序,我在其中读取 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  

有什么帮助吗?

4

2 回答 2

1

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

您必须f从数字(字符)转换为其数值:在计算中使用f - '0'而不是f(内部switch)。或者只是f = f - '0';放在switch.

f - '0'是有效的转换:数字的所有字符代码按顺序从“0”到“9”(如果您查看 ASCII 表很容易看到)。所以 if fcontains '0', f - '0'is 0(注意:一个数字,而不是一个字符), if fis '1', f - '0'is '1' - '0'==1等等。

于 2013-11-10T23:15:19.997 回答
0

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

于 2013-11-10T23:23:38.607 回答