簡體   English   中英

從命令行參數創建鏈接列表

[英]Making a linked list from command line arguments

我必須從命令行輸入的參數中創建一個鏈表。 您應該輸入整數並從中創建一個鏈表。 輸入-1時,請停止從命令行讀取。 相當簡單,但是我遇到了麻煩。 我所擁有的是:

#include <stdlib.h>

struct node
{
  int grade;
  struct node *next;
};

int
main (int argc, char *argv[])
{
  struct node *root;
  root = (struct node *) malloc (sizeof (struct node));
  root->next = 0;
  root->grade = 0;
  int i;
  for (i = 0; i < argc; i++)
    {
      if (&argv[i] == -1)
        {
          break;
        }
      else
        {
          struct node *new_item_ptr;
          new_item_ptr = malloc (sizeof (struct node));
          new_item_ptr->grade = (*int) argv[i];
          (*new_item_ptr).next = root;
          root = new_item_ptr;
        }
    }
}

我認為我已經很接近了,但是有些事情無法正常運行。 例如,我不認為for(i = 0; i < argc; i++)是正確的。 編譯器說new_item_ptr->grade = (*int) argv[i]; 也錯了。 誰能幫我這個忙嗎? 我想我快要結束了,這里有一些小錯誤。

各種argv[i]是C字符串(char *),而不是整數。 您需要將它們轉換為整數,最好的方法是使用atoi函數:

int value = atoi(argv[i]);
if (value == -1) {
    break;
} else {
    // etc.
}

函數名稱atoi應該是“ ASCII到整數”的助記符。 用來分配new_item_ptrnext字段的語法要復雜得多。 您可以使用箭頭語法來分配next字段,就像分配grade字段一樣。 此部分應如下所示:

new_item_ptr->grade = atoi(argv[i]);
new_item_ptr->next = root;

或者,更好的是,重新使用在for循環的此迭代頂部創建的value變量,而不是再次運行atoi

new_item_ptr->grade = value;
new_item_ptr->next = root;

首先,您已經malloc '了一個完全沒有必要的結構。 如果用戶不輸入任何數據,則可以返回由root = NULL指示的空列表。 因此,初始部分可能是:

root = ( struct node * ) NULL;
if ( argc < 2 )
    return ( 0 );

如您的代碼所示,第一個節點的root->grade始終為0。 在循環中,您應該分配內存,並使用atoiargv[i]轉換為整數。 最后,您的循環應以i=1開頭,因為argv[0]是命令名稱本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM