我只是玩弄
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
非常感谢!
答案 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
并不能完成你的想法。
您将获得argc
和argv
。其中第二个是与命令行中的内容对应的字符串数组。这个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;
}