无法在c中的命令行参数中传递元素数组

时间:2017-10-02 12:52:17

标签: c command-line

以下程序是查找数组中的第一个和第二个最大元素

INPUT: 5 10 11 23

  //To find max and second max element in an array

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

  int main(int argc, char * argv[]) {
    int l, arr[100], n;

    int first = arr[0];
    int second = arr[0];
    int i;

    for (i = 0; i <= n; i++) {
      arr[i] = atoi(argv[i]);
    }
    for (i = 0; i < 10; i++) {
      if (first < arr[i]) {
        second = first;
        first = arr[i];
      } else if (second < arr[i]) {
        second = arr[i];
      }

    }

    printf("First = %d\n", first);
    printf("Second = %d\n", second);

    return 0;
  }

输出:

首先= 242475432
第二名= 242425128

有垃圾值但没有排序值

3 个答案:

答案 0 :(得分:3)

代码的行为是未定义。在将其设置为值之前,您正在阅读arr[0]

n永远不会被初始化;更多未定义的行为。为什么不将其设置为argc,并确保您将i投放到< argc?另外,不要忘记argv[1]是命令行中的第一个参数:考虑从1开始运行i

一个好的逐行调试器有助于识别这些问题。

答案 1 :(得分:1)

要从命令行加载数组,我建议:

int main(int argc, char * argv[]) {
    int l, arr[100];

    for (int i = 1; i < argc; i++) {
      arr[i-1] = atoi(argv[i]);
    }
    int n= argc - 1;
    int first = arr[0];
    int second = arr[0];

答案 2 :(得分:0)

这是一个经过纠正但仍然很简单的代码,可以解决您的问题:

//float[][][] ftemp=net.wagi;
List<float[][][]> temp = new List<float[][][]>();
for (int i = 0; i < 2; i++) 
{
   float[][][] ftemp = new float[a][b][c];  // pseudo code

   ... 

   temp.Add(ftemp);
 }

您可以考虑使用strtol之类的内容,以便在转换错误时设置错误编号。看一下这个answer