Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在循环遍历数组并找到匹配元素后,如何停止for循环?_C_Arrays_Structure_User Input - Fatal编程技术网

C 在循环遍历数组并找到匹配元素后,如何停止for循环?

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

我有一个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 
}



的结构
结构地址簿
{ 
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
$