C 在循环遍历数组并找到匹配元素后,如何停止for循环?
我有一个for循环,它遍历struct类型的数组,但是当我将用户输入传递给检索值的函数时,它会打印10次。我需要main()来询问用户要打印通讯簿的哪个#,然后将其传递给打印它的函数,但该函数检查数组中是否有这样的数字,如果有,然后打印出输入的#的值。 下面是将printAddress()打印十次的代码:C 在循环遍历数组并找到匹配元素后,如何停止for循环?,c,arrays,structure,user-input,C,Arrays,Structure,User Input,我有一个for循环,它遍历struct类型的数组,但是当我将用户输入传递给检索值的函数时,它会打印10次。我需要main()来询问用户要打印通讯簿的哪个#,然后将其传递给打印它的函数,但该函数检查数组中是否有这样的数字,如果有,然后打印出输入的#的值。 下面是将printAddress()打印十次的代码: STRUCTURE FOR struct addressBook { int entryNum; char name[100]; char address[100]; }; void
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
}
的结构
结构地址簿
{
int entryNum;
字符名[100];
字符地址[100];
};
无效打印地址(结构地址簿地址,int num)
{
int n=0;
对于(n=0;n<10;n++)
{
if(addresses.checkNum==num)
{
printf(“\n流是地址#%i详细信息:\n”,num);
printf(“通讯簿号码:%i\n”,addresses.entryNum);
printf(“名称:%s”,地址。名称);
printf(“地址:%s\n”,addresses.Address);
}
}
}
我的主要职能是:
int main()
{
//创建至少为10的通讯簿数组
结构地址簿地址[10];
//if语句,用户可以在其中选择
//向通讯簿添加姓名、显示单个姓名或退出程序
//这是如果他们选择使用数字显示单个名称
else if(选项==2)
{
int-num;
int i=0;
printf(“输入书号:”);
scanf(“%i”和&num);
打印地址(地址[i],数量);
}
返回0
}
下面是对您的代码的一个修改,它似乎可以按照我的预期工作:
#include <stdio.h>
struct addressBook
{
int entryNum;
char name[100];
char address[100];
};
static
void printAddress(int n_addr, struct addressBook addresses[n_addr], int num)
{
for (int n = 0; n < n_addr; n++)
{
if (addresses[n].entryNum == num)
{
printf("\nBELOW IS ADDRESS # %i DETAILS:\n", num);
printf("Address Book Number: %i\n", addresses[n].entryNum);
printf("Name: %s\n", addresses[n].name);
printf("Address: %s\n", addresses[n].address);
}
}
}
int main(void)
{
struct addressBook addresses[10] =
{
{ 1, "John Doe", "1234 Any St, Some Town, CA 94301" },
{ 2, "Mary Fog", "1270 Some St, Any Town, CA 94303" },
{ 3, "Anne Pit", "1240 Any Rd, Some City, CA 94301" },
{ 4, "Bill Zoo", "1252 Some St, Any Town, CA 94303" },
{ 5, "Phil Tin", "1258 Any Rd, Some City, CA 94301" },
};
int num;
printf("Entry number? ");
scanf("%i", &num);
printAddress(5, addresses, num);
return 0;
}
添加一个
break代码>在if(){…}
块的末尾。(您还必须传递(指向)整个数组的指针,而不是单个项)在打印信息后添加中断
或返回
。哪个更好取决于循环后是否有代码要执行。如果您返回,则很容易在循环后打印“未找到”消息。如果你输了,你必须知道你是否找到了比赛。在询问您的SO问题之前,请先纠正打字错误(地址
应该是地址
)。请注意,您的函数只有一个地址,但您在循环时没有对数组进行索引,因此您需要重新考虑该代码。当在编译器中运行发布的代码时,会产生多条错误和警告消息。编译时,始终启用警告,然后修复这些警告。(对于gcc
,至少使用:-Wall-Wextra-Wconversion-pedantic-std=gnu11
)注意:其他编译器使用不同的选项来产生相同的结果请发布一个,以便我们可以重现问题并帮助您调试。在函数中:printAddress()
,从语句开始:如果(adreses.checkNum==num)
并包括中的所有语句如果代码块,用地址[n]替换地址
(和地址
)
我仍然收到一个错误。我相信这是因为我没有正确地传递数组。我在这里共享的这个程序不是我的任务,但与它类似。我很想共享我的整个程序,但我担心有人会窃取它。你应该只需要在函数调用中命名数组,如我的示例所示。如果你有对于你的“真实”程序,你可以通过电子邮件发送给我-查看我的个人资料。包括一个指向此问题的链接,以便我知道它是关于什么的。
$ addr83
Entry number? 4
BELOW IS ADDRESS # 4 DETAILS:
Address Book Number: 4
Name: Bill Zoo
Address: 1252 Some St, Any Town, CA 94303
$