0

我需要将-51.235文件中的哪个分开并将其作为 - , 51 , .235 我的问题是,当我尝试从文件中读取它并在代码块中打印它时,我可以将它作为一个 int 并同时浮动时间所以我可以减去int(51)和float(51.235),我怎样才能分开我把它作为一个字符的符号?这是我到目前为止所拥有的

if (comand == 'S')
{
  fscanf(entrada, "%d %f",&y, &a);
  printf("\n\nthe separate number is: %d , %f",y,a); 
}

它给了我:单独的数字是:-510.235000(我怎样才能消除最后的 3 个零?)

在记事本中显示:

S -51.235
4

4 回答 4

1

你可以这样做:

#include<stdio.h>
#include<math.h>

int main(void)
{
  float num = -51.235;
  char sign;
  int intpart;
  float floatpart;

  sign=(num>=0.00f)?'+':'-';
  intpart=floor(fabs(num));
  floatpart=fabs(num)-intpart;
  printf("%c,%d,%g",sign,intpart,floatpart);
  return 0;
}
于 2012-08-23T15:41:40.153 回答
1

只有几步:

  1. 检查是否是肯定的,如果是的话:把你的-
  2. 您的号码 = 您的号码的绝对值(如果为正则删除-,如果不是则删除)。
  3. 转换为int以获取不带小数的数字
  4. 得到小数:只需用Int值减去原始浮点数,结果 = 0.XXX

所有这些都集中在一行中:

float num = -51.235555;
printf("%c %d %.3f", ((num > 0.0 ) ? ' ' : '-'), (int)num, (num - (float)((int)num)));
于 2012-07-13T15:47:05.630 回答
0

问题:它给了我:单独的数字是:-51,0.235000(我怎样才能消除最后的 3 个零?)

答案是消除最后的 3 个零?

printf("\n\nthe separate number is: %d , %.3f",y,a); 
于 2012-07-13T15:23:28.937 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char getChar(char **p){
    return *(*p)++;
}

void skipSpace(char **p){
    while(isspace(getChar(p)));//skip space char
    --(*p);//unget
}

char getSign(char **p){
    if(**p=='+' || **p=='-') return *(*p)++;
    return ' ';
}

void getNatural(char **p, char *buff){
    while(isdigit(**p))
        *buff++=*(*p)++;
    *buff='\0';
}

void getFloatPart(char **p, char *buff){
    char point;
    point = getChar(p);
    if(point != '.'){
        *buff = '\0';
    } else {
        *buff++ = point;
        getNatural(p, buff);
    }
}

void separate_float(char **p, char *sign, char *int_part, char *float_part){
    skipSpace(p);
    *sign = getSign(p);
    getNatural(p, int_part);
    getFloatPart(p, float_part);
}

int main(){
    char line[128]="S -51.235";
    char *p = line;
    char command;
    char sign, int_part[32], float_part[32];

    command = getChar(&p);
    if(command == 'S'){
        separate_float(&p, &sign, int_part, float_part);
        printf("%c,%s,%s\n", sign, int_part, float_part);//-,51,.235
        printf("%d %g\n", atoi(int_part), atof(float_part));//51 0.235
    }
    return 0;
} 
于 2012-07-13T20:08:15.783 回答