【发布时间】:2020-03-07 19:46:13
【问题描述】:
我有一个 for 循环,它遍历一个 struct 类型的数组,但是当我将用户输入传递给检索值的函数时,它会打印 10 次。我需要我的 main() 询问用户要打印的地址簿中的哪一个,然后将其传递给打印出来的函数,但该函数会检查数组中是否有这样的数字,如果有则打印输出那个输入#的值。 这是保持打印 printAddress() 十次的代码:
STRUCTURE FOR
struct addressBook
{
int entryNum;
char name[100];
char address[100];
};
void printAddress(struct addressBook addresses, int num)
{
int n = 0;
for(n=0; n < 10; n++)
{
if (addresses.checkNum == num)
{
printf("\nBELOW IS ADDRESS # %i DETAILS: \n", num);
printf("Address Book Number: %i \n", addresses.entryNum);
printf("Name: %s", addresses.name);
printf("Address: %s \n", addresses.address);
}
}
}
my main function:
int main()
{
// create a addressBook array of at least 10
struct addressBook addresses[10];
//if statements where user can select to
//add a name to address book, display a single name or quit the program
//this is if they choose to display a single name using a number
else if (choice == 2)
{
int num;
int i = 0;
printf("Enter book number: ");
scanf("%i", &num);
printAddress(addresses[i], num);
}
return 0
}
【问题讨论】:
-
在
if() { ...}块的末尾添加一个break;。 (你也必须传递(指向)整个数组,而不是单个项目) -
在打印信息后添加
break或return。哪个更好取决于循环后是否有任何代码要执行。如果您返回,很容易在循环后打印“未找到”消息。如果你打破了,你必须知道你是否找到了匹配。请在就 SO 提问之前修正错别字(adresses应该是addresses)。请注意,您的函数只有一个地址,但您循环,而不索引数组 - 您需要重新考虑该代码。 -
发布的代码在通过编译器运行时会产生一些错误和警告消息。编译时,始终启用警告然后修复这些警告。 (对于
gcc,至少使用:-Wall -Wextra -Wconversion -pedantic -std=gnu11)注意:其他编译器使用不同的选项来产生相同的结果 -
请发minimal reproducible example,以便我们重现问题并帮助您调试。
-
在函数中:
printAddress(),以语句:if (adresses.checkNum == num)开头并包括if代码块中的所有语句,将adresses(和addresses)替换为addresses[n]
标签: c arrays structure user-input