2017-04-17 68 views
0

我写了一个将命令行参数转换为数字的c程序。现在我想要这些数字存储在一个数组中。问题是,当我打印出数组中那些奇怪的元素。数组从第六个元素开始打印。C数组在第四个元素后开始读取

这里是我的代码:

int main(int argc, char *argv[]) 
{ 
    int i, j, num, randint, arrCount = 0; 
    int arrList[1000] = {0}; 

    for(i=1; i<argc; ++i) 
    { 
     for(j=0; argv[i][j] != '\0'; ++j) 
     { 
      if (argv[i][j] >= 'A' && argv[i][j] <= 'Z') 
      { 
       num = argv[i][j] - 'A'; 
       //arrList[j] = num; 
      } 
      else if (argv[i][j] >= 'a' && argv[i][j] <= 'z') 
      { 
       num = argv[i][j] - 'a'; 
       //arrList[j] = num; 
      } 
      num = num + '0' - 47; 
      arrList[j] = num; 
      arrCount++; 
      printf("%d ", num); 
     } 
    } 
    printf("\n"); 

    for(i=0; i<arrCount; i++) 
    { 
     printf("%d ", arrList[i]); 
    } 
} 

,我跑测试的命令是:

./encript Hello World 

输出:

8 5 12 12 15 23 15 18 12 4 
23 15 18 12 4 0 0 0 0 0 

正如你的看看数组是印刷从数组的第六个元素开始,我可以找出它为什么这样做。额外的零是因为该数组打印该数组中实际不存在的元素。我能想到的最多的是,用于查找需要打印多少元素的arrCount被搞乱了。 我一直在寻找这个太久,我不明白这里有什么问题,即使它很可能是明显的。

+0

'arrList [j] = num; arrCount ++;' - >'arrList [arrCount ++] = num;'? – BLUEPIXY

+1

你的代码只知道如何处理一个单词作为参数,因为每个单词都会覆盖最后一个单词,也许不是写入arrList [j],而是写入arrList [arrCount] – areller

回答

3

您填补arrList这样的:

arrList[j] = num; 

j但在0重新开始针对每个命令行参数,即World结果改写的Hello结果。您应该存储到arrList[arrCount],因为arrCount跨所有参数增加。

相关问题