提问人:Vedant Sharma 提问时间:10/28/2023 更新时间:10/28/2023 访问量:55
函数返回值的问题
Problem with return value of the function
问:
问题陈述如下
#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
的共同朋友,实际上和预期的一样。
答: 暂无答案
评论
int common_friends(int friends[][MAXP], char name1[], char name2)
应该给你警告。 不是指向字符串的指针。没有读过这么多......char name2
gcc
gcc -Wall -Wextra -Werror ...
-Werror
int common_friends(int friends[][MAXP], char name1[], char name2);
name1
name2
int common_friends(int friends[][MAXP], char name1[], char name2[]);
name2
name1
int common_friends(int friends[][MAXP], char* name1, char* name2);