a98 发表于 2018-3-8 17:48:52

for里面初始化i = 0+(tag == -1)是什么意思呀



题目是这样的:写一函数 float getfloat(char s[]);把字符串s中的字符串转换成float型值。如果s中的字符串是“-123.45”,则应返回-123.45。



#include<stdio.h>
#include<string.h>
float getfloat(char*s)
{
    floatans = 0, tmp = 0;
    int i, tag = 1;
    if(s == '-')
    {
      tag = -1;
    }
    for(i = 0+(tag == -1); s != '.'; i++)    //i = 0+(tag == -1)这句话是什么意思呀
    {
      ans = ans *10+s-'0';
      
    }
    for(i = strlen(s)-1; s != '.'; i--)
    {
      tmp = tmp/10+s-'0';
    }
    ans += (tmp/10);
    returnans*tag;
}
int main()
{
        char s;
        float a;

        gets(s);
        a = getfloat(s);
        printf("%f\n", a);

        return 0;
}




问题是注释的那里for里面初始化 i = 0+(tag == -1) 是什么意思呀能不能简单的讲(翻译)一下这句话~

还有一个问题是我的输出格式不知道怎么改,没办法输入几位小数就输出几位小数,能不能帮忙改一下。

a98 发表于 2018-3-8 18:04:46

emmmm 我知道第一个问题了

tag=-1的时候,(tag==-1)为真,i从1开始,因为s是-号,tag不等于-1的时候,(tag==-1)为假,即i从0开始。

继续请教大神输出格式的问题

a98 发表于 2018-3-8 18:06:39

怎么能输入的有几位小数就输出有几位小数呀

人造人 发表于 2018-3-8 19:31:39

本帖最后由 人造人 于 2018-3-8 19:33 编辑

a98 发表于 2018-3-8 18:06
怎么能输入的有几位小数就输出有几位小数呀

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

int GetLength(char *str)
{
        int i = 0;

        for(i = 0; str != '.'; ++i)
                ;

        return strlen(str) - i - 1;
}

int main(void)
{
        char *val = "123.45678987654321";
        char fmt;

        sprintf(fmt, "%%.%dlf\n", GetLength(val));      // 构建输出格式
        printf(fmt, atof(val));                                        // 使用构建的格式输出

        return 0;
}


123.45678987654321
请按任意键继续. . .

人造人 发表于 2018-3-8 19:34:44

怎么对不齐?





页: [1]
查看完整版本: for里面初始化i = 0+(tag == -1)是什么意思呀