2017-12-02 167 views
-2

如何使用list()在C中創建列表?不是一個鏈表,只是一個常規的元素列表。我來自python,我可以使用list = []。但是,當我在Google「C列表」中唯一出現的是鏈接列表。看來有一個函數列表(),我假設創建一個列表。我無法弄清楚如何提取第一和第二值:如何使用list()在C中創建一個列表? (試圖保存和從列表中提取元素)

int L = list(1,2,3,4,5); 
    int a = L[0]; 
    int b = L[1]; 

我需要在C列表存儲兩個值,一個分子(n)和分母(d)。我正在創建一個分數計算器,我希望n和d是存儲在分數(列表)中的兩個值。我不想寫f1 =(n1,d1)到fk =(nk,dk)的程序。

+0

C未列表。如果你想[鏈表](https://en.wikipedia.org/wiki/Linked_list)你需要對它們進行編碼(使用包含指針的堆'struct') –

回答

1

我看到2個問題有:

  1. 如何使用數據結構來存儲非原子型可變
  2. 如何創建這樣的結構的一個(同質)陣列。

Python列表沒有直接的等價物,因爲C無法在任意長度的貨架上存儲異構數據類型。你可能需要一些更深層次的背景閱讀,但這裏的一些示例代碼,這可能有助於:

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

// Define a structure type, no builtin tuples 
typedef struct { 
    int n; 
    int d; 
} Fraction; 


int main(int argc, char **argv) { 
    int i; 
    int N = 5; 
    Fraction f0 = {2, 3}; // Directly create & initialize data 
    Fraction *fractions; // variable length ponter to array of Fractions 


    // Using dynamic allocation of arrays 
    fractions = (Fraction *) malloc(N*sizeof(Fraction)); 
    fractions[0] = f0;     
    fractions[1] = (Fraction) {5, 7}; // This needs to be explicitly casted to Fraction type 
    fractions[2] = (Fraction) {11, 13}; 
    fractions[3] = (Fraction) {17, 19}; 
    fractions[4] = (Fraction) {23, 29}; 


    printf ("Fraction0 -> numerator: %d, denominator: %d\n", f0.n, f0.d); 

    for (i=1; i < N; i++) { 
     printf ("Fractions[%d] -> numerator: %d, denominator: %d\n", i, fractions[i].n, fractions[i].d); 
    } 
} 

這應該打印:

Fraction0 - >分子:2,分母:3個

分數[ 1] - >分子:5,分母:7個

級分[2] - >分子:11,分母:13

級分[3] - >分子:17,分母:19個

級分[4] - >分子:23,分母:29

+0

這更接近我想要完成的事情。我試圖掃描分子和分母。謝謝你的幫助。 –

+0

還有一個問題:如果我試圖使用scanf給n和d一個值,我該怎麼做?我曾嘗試使用&(f-> Fraction.n),&Fraction.n,Fraction.n,並簡單地&n但沒有任何工作。 –

+0

不客氣。嘗試:'scanf(「%d%d」,&f0.n,&f0.d);'。如果你使用「f」作爲數組/指針,那麼它就像'f = &f0; scanf(「%d%d 「,&(f-> n),&(f-> d));'只要記住首先將」f「賦值給一個已分配的結構,否則就會發生段錯誤。 – clocker

1

C中沒有這樣一個列表。list不在C標準庫中,所以我不確定你在哪裏找到了。在C中,你通常會使用一個數組。

int L[] = {1,2,3,4,5}; 
int a = L[0]; 
int b = L[1]; 
+0

謝謝。事實證明,如果我把()放在它後面,Sublime Text顏色就會編碼一個單詞。我認爲它會識別它,因爲它會顯示爲相同的顏色,所以它會顯示int或結構體。 –

+0

@ DanO'Connell沒問題。如果其中一個答案解決了您的問題,請確保接受它。 –

0

在C中的等效將是元件的陣列:

int x[10]; 

int秒的陣列及其大小= 10

初始化C中的陣列可以以幾種進行例如:

int x[10] = {0,1,2,3,4,5,6,7,8,9}; 
int x[] = {0,1,2,3,4,5,6,7,8,9}; 

或者您可以分配單個元素:

int x[10]; 
x[0] = 0; 
x[1] = 1; 
. 
. 
x[9] = 9; 

您應該閱讀更多關於數組以及它們如何在c中工作的內容。

相關問題