2015-09-23 101 views
-2

我需要創建一個處理很多情況的c程序。C,從單個輸入行讀取多個數字

爲了解決所有的情況很容易我需要把所有的輸入元素在一行中用逗號分隔。

例如用戶給定的輸入這樣

5,60,700,8000 

應該創建這樣{5,,,60,,,700,,,8000} 陣列,這意味着陣列是尺寸7的和一個[1],[3],A [5]值是逗號,

謝謝

+3

什麼是你的問題? – ouah

+0

告訴我們你試過了什麼? –

回答

1

編輯:其實有幾個方法可以做到你是什麼問:結構數組(可能包含幾種數據類型),帶有union的結構數組(允許運行時選擇數據類型),字符串數組(需要轉換數值)

字面上構造一個數組以保存數字和字符串變量類型的唯一方法是使用 union顯然(通常)有更好的方法來處理字母數字數據的字符串,但由於工會在您的問題的評論中提到,我將使用該方法來解決您的具體要求:

以下示例的結果:
enter image description here

代碼示例:

typedef union { 
    int num;  //member to contain numerics 
    char str[4]; //member to contain string (",,,") 
}MIX; 
typedef struct { 
    BOOL type;//type tag: 1 for char , 0 for number 
    MIX c; 
}ELEMENT; 

ELEMENT element[7], *pElement;//instance of array 7 of ELEMENT and pointer to same 

void assignValues(ELEMENT *e); 

int main(void) 
{ 
    char buf[80];//buffer for printing out demonstration results 
    buf[0]=0; 
    int i; 

    pElement = &element[0];//initialize pointer to beginning of struct element 

    //assign values to array: 
    assignValues(pElement); 

    for(i=0;i<sizeof(element)/sizeof(element[0]);i++) 
    { 
     if(pElement[i].type == 1) 
     { //if union member is a string, concatenate it to buffer 
      strcpy(element[i].c.str, pElement[i].c.str); 
      strcat(buf,pElement[i].c.str); 
     } 
     else 
     { //if union member is numeric, convert and concatenate it to buffer 
      sprintf(buf, "%s%d",buf, pElement[i].c.num); 
     } 
    } 
    printf(buf); 

    getchar(); 

    return 0; 
} 

//hardcoded to illustrate your exact numbers 
// 5,,,60,,,700,,,8000 
void assignValues(ELEMENT *e) 
{ 
    e[0].type = 0; //fill with 5 
    e[0].c.num = 5; 

    e[1].type = 1; //fill with ",,," 
    strcpy(e[1].c.str, ",,,"); 

    e[2].type = 0; //fill with 60 
    e[2].c.num = 60; 

    e[3].type = 1; //fill with ",,," 
    strcpy(e[3].c.str, ",,,"); 

    e[4].type = 0; //fill with 700 
    e[4].c.num = 700; 

    e[5].type = 1; //fill with ",,," 
    strcpy(e[5].c.str, ",,,"); 

    e[6].type = 0; //fill with 8000 
    e[6].c.num = 8000; 
} 
1

號無需存儲,。使用類似的東西來

int a[4]; 
scanf("%d,%d,%d,%d", &a[0], &a[1], &a[2], &a[3]); 

如果你需要把逗號後面打印後,您可以使用

printf("%d,%d,%d,%d", a[0], a[1], a[2], a[3]); 
+0

謝謝你的回答。但在我的程序中,我希望只允許輸入之間的逗號,因此需要將逗號存儲在數組中,以便我們可以放置一些條件,如[1] =',',如果程序不是 – user1934439

+0

@ user1934439 - 所以你的數組需要存儲字符串,而不是數字值,在那種情況下(或者是一個int和一個帶有標籤的char)的聯合)可以用於你的目的嗎? –

+0

@ user1934439這並未在您的問題中指出,並提出了完全不同的問題。 – IKavanagh