2017-02-16 64 views
1

我正在編寫一個程序來顯示名稱和公寓的數量,但是,存儲名稱的數組無法顯示名稱,表明它們未識別。反正有數組中的字符串可以顯示嗎?另外,我似乎在顯示屏的公寓數量下面顯示了n的值,有沒有辦法擺脫這種情況?這是我的代碼:程序不輸出存儲在數組中的字符串

#include <stdio.h> 

int main(void) 
{ 
    int i; 
    char name[] = {North, West, South, East}; 
    int apt[] = {24, 30, 14, 18}; 
    const int n = 5; 

    printf("Name No. of Apartments\n"); 
    for (i = 0; i < n; i++) 
      printf("%c  %d\n", name[i], apt[i]); 

    return 0; 

} 
+0

您的代碼甚至不進行編譯的。您所描述的問題似乎與您發佈的代碼無關。 'char name [] = {North,West,South,East};'對於初學者來說完全無效 - 你甚至沒有把字符串放在引號中,更不用說正確地定義數組了。你想'char * name [] = {「North」,「West」,「South」,「East」} –

+0

看看http://stackoverflow.com/questions/9907160/how-to-convert-enum-名稱到字符串在C是對你有好處 – chux

+0

嘗試把名稱放在雙引號,'「北」,...' – AntonH

回答

1

當聲明一個名稱爲一維數組時,它需要是一個二維數組。

char name[number of names][length of longest name + 1]

另外,用於定向名字符串需要用雙引號括被封裝。 所以,你應該聲明看起來是這樣的:

char name[4][6] = {"North", "West", "South", "East"};

當打印的字符數組,使用標誌%S。 %C僅用於單個字符:

printf("%s %d\n", name[i], apt[i]);

另外,由於用於循環開始於索引0中, 'n' 應該從5到4被改變:

const int n = 4;

+0

我沒有想過使用二維數組,因爲我只學過一維數組。清楚簡潔,謝謝你的幫助。 – Jinto

1

什麼從你的問題出現,你是新的strings在C. 的概念所以,你需要知道指針數組。

解決方案

#include <stdio.h> 

int main(void) { 
    // your code goes here 
    int i; 

    char *name[4];//Array of pointers to store 2d array of characters. 
    name[0]="North";name[1]="West";name[2]="South";name[3]="East"; 
    int apt[] = {24, 30, 14, 18}; 
    const int n = 5; 
    printf("Name No. of Apartments\n"); 
    for (i = 0; i < n; i++) 
      printf("%s  %d\n", name[i], apt[i]); 

    return 0; 
} 

而且,由於你的數組中字符串的數量爲4而已,所以你不應該爲n=5次運行循環,它會產生一些垃圾值i=4

2

這裏是你的代碼,修正:

#include <stdio.h> 

int main(void) 
{ 
    int i; 
    char *name[] = {"North", "West", "South", "East"}; /* You're declaring an array of characters, you need an array of strings/pointers */ 
    int apt[] = {24, 30, 14, 18}; 
    const int n = 4; /* you have 4 elements in your array, not 5 */ 

    printf("Name No. of Apartments\n"); 
    for (i = 0; i < n; i++) 
     printf("%s %d\n", name[i], apt[i]); /* %c is for characters, you need %s for strings */ 

    return 0; 
}