如何用C编写一个程序来计算作为参数的数字?

时间:2016-06-30 19:12:51

标签: c arguments

我只是玩弄

  int main(int argc, int *argv[void])

函数,我试图创建一个读取数字参数的程序。

理论上(在我自己疯狂的妄想心中),这应该有效:

#include <stdio.h>

int main(int argc, char *argv[])
{
 int count;
 printf("%d\n", sizeof(int));
}

但无论我在命令行中作为参数放置什么,我总是得到4(一个字4个字节?)

如何稍微调整此代码,以便在我输入

./program 9 8 2 7 4 3 1

我得到:

7

非常感谢!

2 个答案:

答案 0 :(得分:6)

$(function () { $(document).ready(function() { var options = { chart: { renderTo: 'divGraficoBarraUnidade', type: 'column' }, title: { text: 'Browser market shares. January, 2015 to May, 2015' }, subtitle: { text: 'Click the columns to view versions. Source: <a href="http://netmarketshare.com">netmarketshare.com</a>.' }, xAxis: { type: 'category' }, yAxis: { title: { text: 'Total percent market share' } }, legend: { enabled: false }, plotOptions: { series: { borderWidth: 0, dataLabels: { enabled: true, format: '{point.y:.1f}%' } } }, tooltip: { headerFormat: '<span style="font-size:11px">{series.name}</span><br>', pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>' }, series: {}, drilldown: { series: {} } }; function ajaxGraficoBarraUnidade() { $.ajax({ type: "GET", data: window.formData + '&strMundo=' + "<?php echo ($strMundo); ?>" + '&strGraph=Unidade', dataType: "json", url: "https://api.myjson.com/bins/42c59", beforeSend: function () { }, success: function (strRetorno) { options.series = strRetorno.geos; options.drilldown.series = strRetorno.unidades; var chart = new Highcharts.Chart(options); console.log('options', options) }, error: function (txt) { // Report errors here... } }); } ajaxGraficoBarraUnidade(); }); }); 表示传入的命令行参数的数量。您可以将其用作main的第二个参数argc的索引。如果你想要所有的参数不包括第一个(程序名),那么你需要减少argc,并增加argv。

argv

答案 1 :(得分:1)

正如其他人在评论中指出的那样,sizeof并不能完成你的想法。

您将获得argcargv。其中第二个是与命令行中的内容对应的字符串数组。这个argv字符串数组长argc,并且它的第一个元素可能包含可执行程序的名称。

你需要遍历argv的其余元素(如果有的话)并查看哪些是数字,而不是非数字。

要检查字符串是否为数字,我们可以使用strtol()(来自stdlib.h)尝试将其转换为long。如果转换失败,则不是数字。如果您想接受浮点值,那么请使用strtod(),它以相同的方式几乎(不会使{{1}的最后一个参数确实)。 编辑:我实际上已将代码更改为使用strtol(),因为它接受更多种类的&#34;数字&#34;。

如果字符串从一开始就是空的,或者我们提供给函数的指针(strtod())在调用之后没有指向字符串的最末端,则转换失败。 / p>

然后,如果参数是一个数字,只需计算它,最后告诉用户他或她可能已经知道了什么。

您在此处所做的工作称为验证用户输入,知道如何操作是一件非常好的事情。不要仅仅因为你问他们而信任用户给你数字。通过读入字符串并尝试转换它们来检查它们是否真的数字。

endptr

运行它:

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

bool is_number(const char *string)
{
    char *endptr;

    strtod(string, &endptr);

    return (*string != '\0' && *endptr == '\0');
}

int main(int argc, char **argv)
{
    int i;
    int numcount = 0;

    for (i = 1; i < argc; ++i) {
        if (is_number(argv[i]))
            numcount++;
    }

    printf("There were %d numbers on the command line\n", numcount);

    return EXIT_SUCCESS;
}