2017-10-19 33 views
1

我的程序到目前爲止的目的是創建4個數組。 1個'char'數組,每個元素最多可以包含25個字符,這個數組將包含10個不同的字符串值。和其他3個數組,將採取10個整數值並將它們存儲到我的數組中。我編譯並運行我的程序,並循環遍歷我的for循環,一旦完成,我在我的teamName數組中找到一些奇怪的整數值,對於'teamWins''teamLosses'和'teamTies'數組,它給了我爲這些數組中的所有元素輸入的第一個值。我真的很想了解數組是如何工作的,但是我很難聲明它們,並在輸入和輸出中使用它們。 任何人都可以看到並解釋如何在每個元素中取10個字符串中的25個字符的值,並將10個元素中的10個整數取入另外的3個數組中?我會在下面附上我的源代碼。我的程序編譯和運行時,它不會給我我輸入的輸入

#include <stdio.h> 
#include <stdlib.h> 
#define NUM_TEAM 10 

void displayWelcome(void); 

int main(void) 
{ 

char * teamName[NUM_TEAM + 1][30] = { "" }; 

int teamWins[NUM_TEAM] = {0}; 
int teamLosses[NUM_TEAM] = {0}; 
int teamTies[NUM_TEAM] = {0}; 
int i, bestPercent, worstPercent; 

displayWelcome(); 

//Team Name 
for (i = 0; i < NUM_TEAM; i++) 
{ 
    //Prompt and enter team name 
    printf("Enter %i's team name: ", i + 1); 
    fgets (teamName[NUM_TEAM], sizeof teamName[NUM_TEAM], stdin); 
    //Data validation 
} 

//Team wins 
for (i = 0; i < NUM_TEAM; i++) 
{ 
    printf("Enter wins for team number %i : ", i + 1); 
    scanf("%i", &teamWins[ i ]); 
    /*Data validation 
    while (1 != scanf("%i", & teamWins) || teamWins <= 0) 
    { 
     fflush(stdin); 
     printf("Enter a numerical value greater than zero: "); 
    }*/ 
} 
//Team losses 
for (i = 0; i < NUM_TEAM; i++) 
{ 
    printf("Enter losses for team number %i : ", i + 1); 
    scanf("%i", &teamLosses[ i ]); 
    /*Data validation 
    while (1 != scanf("%i", & teamLosses) || teamLosses <= 0) 
    { 
     fflush(stdin); 
     printf("Enter a numerical value greater than zero: "); 
    }*/ 
} 
//Team ties 
for (i = 0; i < NUM_TEAM; i++) 
{ 
    printf("Enter ties for team number %i : ", i + 1); 
    scanf("%i", &teamTies[ i ]); 
    /*Data validation 
    while (1 != scanf("%i", & teamTies) || teamTies <= 0) 
    { 
     fflush(stdin); 
     printf("Enter a numerical value greater than zero: "); 
    }*/ 
} 
//Display Data 
for (i = 0; i < NUM_TEAM; i++)/* output each word read */ 
{ 
    printf("%s", teamName); 
    printf("wins losses ties\n"); 
    printf("%i %i %i\n", teamName[i], teamWins[i], teamLosses[i], teamTies[i]); 
} 

return 0; 
} 

void displayWelcome(void) 
{ 
    printf("Welcome to my Football Stats\n\n"); 
} 
+1

您打印'teamName',而不是'temName [I]',在過去'printf'格式字符串與參數不匹配。你的編譯器沒有警告過你嗎? –

+0

如果使用'gcc'將'-Wall -Wextra'添加到您的編譯字符串中。在Windows('cl.exe' - VS)上,添加'/ Wall'。在沒有警告的情況下編譯之前不要接受代碼。 (你可以在窗口上使用'/ W4','/ Wall'會觸發一些非代碼警告,如果沒有特定的'/ wdXXX'禁止選項,你將無法消除這些警告。) –

回答

1

你有四個方面的問題:

  1. 聲明teamNamechar * teamName[NUM_TEAM + 1][30] = { "" };是不正確;如果你想要一個字符串數組,聲明char teamName[NUM_TEAM + 1][30] = { "" };就足夠了(你需要一個chars的二維數組,而不是char * s)。

  2. fgets (teamName[NUM_TEAM], sizeof teamName[NUM_TEAM], stdin);中,您將每個團隊名稱寫入同一個未使用的元素。相反,使用fgets (teamName[i], sizeof teamName[NUM_TEAM], stdin);在每次迭代期間寫入適當的團隊。

  3. 使用printf("%s", teamName);打印不正確;您希望打印每個團隊名稱而不是嘗試打印teamName陣列的地址:printf("%s", teamName[i]);

  4. 您在printf("%i %i %i\n", teamName[i], teamWins[i], teamLosses[i], teamTies[i]);中有額外的參數;因爲你已經在3點印刷teamName[i],你應該在這個printf()通話將其刪除:printf("%i %i %i\n", teamWins[i], teamLosses[i], teamTies[i]);

+0

對於2.-更好的是, 30'並使用它來代替':)' –

相關問題