Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中帮助铸造浮子_C - Fatal编程技术网

在C中帮助铸造浮子

在C中帮助铸造浮子,c,C,我只是想运行一个程序,将两个数字相加,并以浮点形式输出 例如: $Me./mc+12.3 应该产生 给我3.3美元或3.3000美元 以下是我所拥有的: #include <stdio.h> int main( int ac, char* args[] ) { float sum=0; if ((strcmp(args[1],"+")) == 0) { sum=atof(args[2])+atof(args[3]); prin

我只是想运行一个程序,将两个数字相加,并以浮点形式输出

例如: $Me./mc+12.3

应该产生 给我3.3美元或3.3000美元

以下是我所拥有的:

#include <stdio.h>

int main( int ac, char* args[] )
{
    float sum=0;
    if ((strcmp(args[1],"+")) == 0)
    {
        sum=atof(args[2])+atof(args[3]);
        printf("%f\n", sum);
    }
    else
        printf("exit");
    return 0;
}
#包括
int main(int ac,char*args[]
{
浮点数和=0;
如果((strcmp(args[1],“+”)==0)
{
sum=atof(args[2])+atof(args[3]);
printf(“%f\n”,总和);
}
其他的
printf(“退出”);
返回0;
}

您应该改用
strod

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

void usage(const char *const program)
{
    fprintf(stderr, "usage: %s x y [where x and y are numbers.]\n", program);
    return -1;
}

void conversionFailed(const char *const program)
{
    fprintf(stderr, "arguments should be numbers\n");
    return usage(program);
}

int main( int ac, char* args[] )
{
    float sum;
    char *endptr;

    if (ac < 4)
        return usage(argv[0]);
    if (strcmp(argv[1], "+") == 0)
    {
        sum = strtod(args[2], &endptr);
        if (*endptr != '\0')
            return conversionFailed(argv[0]);
        sum += strtod(args[3], &endptr);
        if (*endptr != '\0')
            return conversionFailed(argv[0]);
        printf("%f\n", sum);
    }
    return 0;
}
#包括
#包括
无效用法(常量字符*常量程序)
{
fprintf(stderr,“用法:%s x y[其中x和y是数字]\n”,程序);
返回-1;
}
无效转换失败(常量字符*常量程序)
{
fprintf(stderr,“参数应该是数字\n”);
返回使用(程序);
}
int main(int ac,char*args[]
{
浮点数;
char*endptr;
if(ac<4)
返回用法(argv[0]);
if(strcmp(argv[1],“+”==0)
{
sum=strtod(args[2],&endptr);
如果(*endptr!='\0')
返回转换失败(argv[0]);
sum+=strtod(args[3],&endptr);
如果(*endptr!='\0')
返回转换失败(argv[0]);
printf(“%f\n”,总和);
}
返回0;
}

首选
strod()
,因为它允许输入有效性检查。

您应该使用
strod

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

void usage(const char *const program)
{
    fprintf(stderr, "usage: %s x y [where x and y are numbers.]\n", program);
    return -1;
}

void conversionFailed(const char *const program)
{
    fprintf(stderr, "arguments should be numbers\n");
    return usage(program);
}

int main( int ac, char* args[] )
{
    float sum;
    char *endptr;

    if (ac < 4)
        return usage(argv[0]);
    if (strcmp(argv[1], "+") == 0)
    {
        sum = strtod(args[2], &endptr);
        if (*endptr != '\0')
            return conversionFailed(argv[0]);
        sum += strtod(args[3], &endptr);
        if (*endptr != '\0')
            return conversionFailed(argv[0]);
        printf("%f\n", sum);
    }
    return 0;
}
#包括
#包括
无效用法(常量字符*常量程序)
{
fprintf(stderr,“用法:%s x y[其中x和y是数字]\n”,程序);
返回-1;
}
无效转换失败(常量字符*常量程序)
{
fprintf(stderr,“参数应该是数字\n”);
返回使用(程序);
}
int main(int ac,char*args[]
{
浮点数;
char*endptr;
if(ac<4)
返回用法(argv[0]);
if(strcmp(argv[1],“+”==0)
{
sum=strtod(args[2],&endptr);
如果(*endptr!='\0')
返回转换失败(argv[0]);
sum+=strtod(args[3],&endptr);
如果(*endptr!='\0')
返回转换失败(argv[0]);
printf(“%f\n”,总和);
}
返回0;
}

首选
strod()
,因为它允许输入有效性检查。

您应该包括
stdlib.h
。否则,
atof
的隐式定义将返回
int

~$ man atof
      1 ATOF(3)                                                         Linux Programmer's Manual                                                         ATO      1 F(3)
      2
      3
      4
      5 NAME
      6        atof - convert a string to a double
      7
      8 SYNOPSIS
      9        #include <stdlib.h>
     10
     11        double atof(const char *nptr);
~$man atof
1 ATOF(3)Linux程序员手册1 ATOF(3)
2.
3.
4.
5姓名
6 atof-将字符串转换为双精度字符串
7.
8概要
9#包括
10
11双atof(常量字符*nptr);
为了避免这些问题,正如@Keith Thompson提到的:

您应该在启用警告的情况下编译,以便编译器可以告诉您 关于这样的问题。对于gcc,使用-Wall-Wextra,并且可能 -标准=-迂腐的


您应该包括
stdlib.h
。否则,
atof
的隐式定义将返回
int

~$ man atof
      1 ATOF(3)                                                         Linux Programmer's Manual                                                         ATO      1 F(3)
      2
      3
      4
      5 NAME
      6        atof - convert a string to a double
      7
      8 SYNOPSIS
      9        #include <stdlib.h>
     10
     11        double atof(const char *nptr);
~$man atof
1 ATOF(3)Linux程序员手册1 ATOF(3)
2.
3.
4.
5姓名
6 atof-将字符串转换为双精度字符串
7.
8概要
9#包括
10
11双atof(常量字符*nptr);
为了避免这些问题,正如@Keith Thompson提到的:

您应该在启用警告的情况下编译,以便编译器可以告诉您 关于这样的问题。对于gcc,使用-Wall-Wextra,并且可能 -标准=-迂腐的


main
的两个参数的常规名称是
argc
argv
。使用这些名称可以使您的代码更容易阅读。您没有说问题出在哪里。@KeithThompson:OP中有关该程序的评论中提到了
argc
argv
这两个参数的常规名称是
argc
argv
。使用这些名字可以让你的代码更容易阅读。你没有说问题出在哪里。@KeithThompson:OP关于这个程序的评论中提到了
argc
argv
,他没有检查签名。他正在找接线员。。。在本例中,“+”可能是因为他想在将来处理其他运算符(例如,“*”、“-”、“/”等)。我没有注意到这一点,因为我认为程序调用是
/mc12.3
,没有
+
符号,对不起。。。这就是为什么我修复了答案,比删除它要好,还因为它显示了首选的用法,至少对我来说是这样的,
strod()
。但是OP应该选择徐丁的答案,因为他是解决问题的人。使用strtod可以更好地检查错误,但这不是问题所在。问题是缺少
#include
。请看另一个答案。@KeithThompson是的,a已经评论过。。。看我之前的评论。他没有检查签名。他正在找接线员。。。在本例中,“+”可能是因为他想在将来处理其他运算符(例如,“*”、“-”、“/”等)。我没有注意到这一点,因为我认为程序调用是
/mc12.3
,没有
+
符号,对不起。。。这就是为什么我修复了答案,比删除它要好,还因为它显示了首选的用法,至少对我来说是这样的,
strod()
。但是OP应该选择徐丁的答案,因为他是解决问题的人。使用strtod可以更好地检查错误,但这不是问题所在。问题是缺少
#include
。请看另一个答案。@KeithThompson是的,a已经评论过。。。请参阅我之前的评论。更重要的是,您应该在编译时启用警告,以便