所以我有这个程序,我读了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
任何帮助人员?
答案 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类似,但它用于输入。