[英]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_ptr
的next
字段的語法要復雜得多。 您可以使用箭頭語法來分配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。 在循環中,您應該分配內存,並使用atoi
將argv[i]
轉換為整數。 最后,您的循環應以i=1
開頭,因為argv[0]
是命令名稱本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.