我已经坚持了一段时间。该程序将文本文件中的行读入结构数组。这里有几行,以便您了解存储在结构数组中的内容。
A|Baltimore Orioles|Oriole Park|333 West Camden Street|Baltimore|MD|21201|(410) 685-9800|orioles.com
N|Washington Nationals|Nationals Park|1500 South Capitol Street, SE|Washington|DC|20003-1507|(202) 675-6287|nationals.com
在使用正确的数据加载数组时没有问题。我使用这段代码测试了内容,它显示了正确的数据。
scanf("%i",&userChoice);
if(userChoice == 1){
for(index=0; index<count; index++)
{
if(strcmp("A", teams[index].leagueName)== 0)
{
americanLeague(&teams[index]);
}
}
}
该程序有一个主菜单,选项1是显示来自美国联盟的所有团队或来自文本文件的“A”。现在我不希望for loop / if语句在main函数中运行。我希望它只是为userchoice运行if语句并调用americanLeague函数。这是我的尝试
scanf("%i",&userChoice);
if(userChoice == 1){
americanLeague(&teams[0]);
}
这只是调用了美国联盟的功能
void americanLeague(team_t *aTeamPtr)
{
int index;
for(index=0; index<=MAX_TEAMS; index++){
if(strcmp("A", aTeamPtr[index].leagueName)== 0)
{
printf("LEAGUE:%s TEAM:%s PARKNAME:%s ADDRESS:%s CITY:%s STATE:%s ZIPCODE:%s PHONE#:%s WEBADDRESS:%s\n\n",
aTeamPtr[index].leagueName, aTeamPtr[index].teamName,
aTeamPtr[index].parkName, aTeamPtr[index].teamAddress,
aTeamPtr[index].teamCity, aTeamPtr[index].teamState,
aTeamPtr[index].zipCode, aTeamPtr[index].phoneNumber,
aTeamPtr[index].webAddress);
}
}
}
这是我尝试显示团队信息将结构数组传递到另一个函数的尝试。代码不起作用,但它不会给我任何错误它只输出空格。我还将添加结构和如何为了以防万一,我读了文件。
typedef struct
{
char leagueName[LEAGUE_NAME + 1];
char teamName[LEN_NAME + 1];
char parkName[PARK_NAME + 1];
char teamAddress[TEAM_ADDRESS + 1];
char teamCity[TEAM_CITY + 1];
char teamState[TEAM_STATE + 1];
char zipCode[ZIP_CODE + 1];
char phoneNumber[PHONE_NUMBER + 1];
char webAddress[WEB_ADDRESS + 1];
} team_t;
int main(void)
{
FILE * filePtr;
int index, count;
char line[LEN_LINE + 1];
char repeat;
team_t teams[MAX_LINES];
filePtr = fopen("MLBteams.txt", "r");
if(filePtr == NULL)
{
printf("Unable to open file.\n");
}
else
{
index = 0;
while(index<MAX_LINES && fgets(line, LEN_LINE, filePtr))
{
if(9 == sscanf(line,"%5[^|]| %40[^|]| %35[^|]| %40[^|]| %30[^|]| %5[^|]| %10[^|]| %30[^|]| %25[^\n]", teams[index].leagueName, teams[index].teamName,
teams[index].parkName, teams[index].teamAddress,
teams[index].teamCity, teams[index].teamState,
teams[index].zipCode, teams[index].phoneNumber,
teams[index].webAddress)
)
{
index++;
}
}
fclose(filePtr);
count = index;
将正确的数据读入结构数组时没有问题。我已经在main函数中多次测试了输出。无论如何,任何帮助都会非常感激。
答案 0 :(得分:0)
您显然将数组(或指针)传递给一个函数,该函数也将其视为指向单个实例的指针。您可以在aTeamPtr[index].leagueName
以及aTeamPtr->leagueName
处看到代码中的差异。
你想要哪一个?
考虑这段代码及其输出:
int size = 10;
struct iint {
int i;
};
void foo(struct iint* i) {
for (int j = 0; j < size; ++j) {
printf("%d", i[j].i);
}
printf("\n%d\n", i->i);
}
int main() {
struct iint i[size];
for (int j = 0; j < size; ++j) {
i[j].i = j;
}
foo(i);
return 0;
}
// Output:
// 0123456789
// 0
那是因为指向数组的指针指向第一个元素。如果您选择互换使用,C并不在意。