函数返回值的问题

Problem with return value of the function

提问人:Vedant Sharma 提问时间:10/28/2023 更新时间:10/28/2023 访问量:55

问:

问题陈述如下

enter image description here

#include <stdio.h>
#include <string.h>

#define MAXP 80

char namelist[MAXP][11];
int num_per;
int numquery;

int common_friends(int friends[][MAXP], char name1[], char name2);

int main() {
    int num_pair, i, j, e;
    printf("Enter the number of persons:");
    scanf("%d", &num_per);
    int id[num_per];
    printf("\nEnter %d names\n", num_per);

    for (i = 0; i < num_per; i++) {
        scanf("%s", namelist[i]);
        id[i] = i;
    }

    printf("For corresponding persons the ID are as follows\n");
    for (i = 0; i < num_per; i++) {
        printf("The ID of %s is %d\n", namelist[i], id[i]);
    }

    printf("How many friend pairs do you know?\n");
    scanf("%d", &num_pair);
    printf("\nEnter the friend pairs\n");

    int friends[MAXP][MAXP];

    for (int g = 0; g < num_per; g++) {
        for (e = 0; e < num_per; e++) {
            friends[g][e] = 0;
        }
    }

    char dumname3[11], dumname4[11];

    for (j = 0; j < num_pair; j++) {
        char dumname1[11], dumname2[11];
        scanf("%s %s", dumname1, dumname2);
        int flag1 = 0;
        int flag2 = 0;

        for (i = 0; i < num_per; i++) {
            if (strcmp(dumname1, namelist[i]) == 0) {
                flag1 = 1;
                for (int k = 0; k < num_per; k++) {
                    if (strcmp(dumname2, namelist[k]) == 0) {
                        flag2 = 1;
                        friends[i][k] = 1;
                        friends[k][i] = 1;
                        printf("ok\n");
                    } else {
                        continue;
                    }
                }

                if (flag2 == 0)
                    printf("%s does not exist\n", dumname2);
            } else {
                continue;
            }
        }

        if (flag1 == 0) {
            printf("%s does not exist\n", dumname1);
        }
    }

    printf("The friends array is below\n");

    for (int erp = 0; erp < num_per; erp++) {
        for (int tut = 0; tut < num_per; tut++) {
            printf("%d ", friends[erp][tut]);
        }
        printf("\n");
    }

    printf("Enter the number of queries\n");
    scanf("%d", &numquery);

    for (int z = 0; z < numquery; z++) {
        int alpha;
        printf("Enter query %d\n", z + 1);
        scanf("%s", dumname3);
        scanf("%s", dumname4);

        alpha = common_friends(friends, dumname3, dumname4);

        if (alpha == -1) {
            printf("Either %s or %s or both don't exist\n", dumname3, dumname4);
        } else if (alpha == -2) {
            printf("%s and %s do not have a common friend.\n", dumname3, dumname4);
        } else {
            printf("%s is one common friend of %s and %s\n", namelist[alpha], dumname3, dumname4);
        }
    }

    return 0;
}

int common_friends(int friends[][MAXP], char name1[], char name2) {
    int frag1 = 0;
    int frag2 = 0;
    int storeval1 = -1, storeval2 = -1;

    for (int p = 0; p < num_per; p++) {
        if (strcmp(namelist[p], name1) == 0) {
            frag1 = 2;
            storeval1 = p;

            for (int u = 0; u < num_per; u++) {
                if (strcmp(namelist[u], name2) == 0) {
                    frag2 = 2;
                    storeval2 = u;
                    break;
                }
            }
        }
        break;
    }

    if (frag1 == 2 && frag2 == 2) {
        for (int r = 0; r < num_per; r++) {
            if (friends[storeval1][r] && friends[storeval2][r]) {
                return r;
            }
        }
        return -2;
    }
    return -1;
}

这是我的代码。

我的意见如下:

输入人数: 5

输入 5 个名称:

阿迈勒

巴伦

茶屋

迪亚

埃莎

有多少对好友?

4

输入好友对:

阿迈勒·迪亚

伊莎·巴伦

查亚迪亚

查亚·埃莎

查询数量:3

输入查询 1:

阿迈勒·巴伦

预期阿迈勒和巴伦没有共同的朋友。
实际上,迪亚是阿迈勒和巴伦的共同朋友。

输入查询 2

查亚迪亚

预期 *Chaya 和 Diya 没有共同的朋友* 实际 *
Chaya 或 Diya 都不存在。

输入查询 3

阿迈勒·查亚

预期Diya 是 Amal 和 Chaya
的共同朋友,实际上和预期的一样。

数组 C 函数

评论

0赞 Fe2O3 10/28/2023
int common_friends(int friends[][MAXP], char name1[], char name2)应该给你警告。 不是指向字符串的指针。没有读过这么多......char name2
0赞 Support Ukraine 10/28/2023
首先为编译器设置高警告级别。例如,对于 do 修复所有警告(它们将由于 而显示为错误),然后开始调试。gccgcc -Wall -Wextra -Werror ...-Werror
0赞 Vedant Sharma 10/28/2023
我不是专业的程序员。
0赞 Vedant Sharma 10/28/2023
请说明确切的问题。
1赞 Support Ukraine 10/29/2023
@VedantSharma 你问:“请说明确切的问题”。好吧,用户 Fe2O3 已经告诉您一个重要问题。为了更明确一点,我会重复一遍。这是错误的。你想传递两个字符串,但由于某种原因,你的代码不同。像这样更正它:换句话说,应该像 .顺便说一句:你也可以这样写:int common_friends(int friends[][MAXP], char name1[], char name2);name1name2int common_friends(int friends[][MAXP], char name1[], char name2[]);name2name1int common_friends(int friends[][MAXP], char* name1, char* name2);

答: 暂无答案