在此任务中,您将获得最关键的审阅者列表。一种 关键审阅者定义为:
具有相同否定建议('n')的评论者 作为评论最多的评论者。
使用这个定义来定义关键审阅者, 查看审阅者的建议列表,并确定它们是否 是不是重要的评论者。
**该函数的返回值应为关键审阅者人数。 **
此外,由...创建的重要评论者姓名列表 该功能也必须在该功能之外可以访问。
在此示例中,针对 一位审阅者是2。确定最高数量的 ‘n’条推荐,您可以查看哪些评论者 “重要评论者”。在此示例中,我们可以确定审阅者 “ Larry”,“ Judi”,“ Manisha”,“ Dora”和“ Nick”是评论者 因为它们是由数组索引1、3、6、8表示的审阅者 和9。数字5将由函数的 返回值,因为这是在 清单。此功能没有打印语句。
努力将只有重要评论者的姓名传递给要显示在main中的数组。
//Function prototypes
void Recommendations(); //task 1
int criticalReviewers(); //task 2
//MAIN FUNCTION
int main(void) {
//Variables
char reviewerNames[NUMBER_REVIEWERS][30] = { "Ritu",
"Larry",
"Dan",
"Judi",
"Eric",
"Isabelle",
"Manisha",
"Terra",
"Dora",
"Nick" };
char movieNames[NUMBER_MOVIES][50] = { "Star Wars",
"Incredibles",
"Gone with the wind" };
char userReviews[NUMBER_REVIEWERS][NUMBER_MOVIES];
char reviewerAnswers[10][3];
char negativeReviewers[10][30];
//TASK TWO
printf("\n**********************************************\n");
printf("Task 2: Get names of critical reviewers\n\n");
//call to task 2 function
printf("Number of Critical Reviewers: %d\n", criticalReviewers(reviewerAnswers, reviewerNames, negativeReviewers));
printf("Critical Reviewers: ");
for (int k=0; k<criticalReviewers(reviewerAnswers, reviewerNames, negativeReviewers); k++) {
printf("%s, ", negativeReviewers + k);
}
printf("%s", negativeReviewers + criticalReviewers(reviewerAnswers, reviewerNames, negativeReviewers));
//CALL TO TASK 3 FUNCTION
mostRecommended(reviewerAnswers, movieNames);
WINPAUSE; // REMOVE BEFORE SUBMITTING
return 0;
}
//执行一项功能
//TASK 2 FUNCTION
int criticalReviewers(char userAnswers[10][3], char Reviewers[][30], char critReviewers[][30]) {
int i=0;
int j=0;
int numCriticalReviewers = 0;
int criticalScore = 0;
int criticalReviewers[10];
int timesSkipped=0;
//loop to determine number of critical REVIEWERS
for (i=0; i<10; i++) {
criticalReviewers[i] = 0;
for (j=0; j<3; j++) {
if (userAnswers[i][j] == 'n') {
criticalReviewers[i] = criticalReviewers[i] + 1;
}
if (criticalReviewers[i] > criticalScore) {
criticalScore = criticalReviewers[i];
}
}
}
for (i=0; i<10; i++) {
if (criticalReviewers[i] == criticalScore) {
numCriticalReviewers = numCriticalReviewers + 1;
for (int k=i; k<i+1; k++) {
critReviewers[k-timesSkipped][30] = Reviewers[k][30];
timesSkipped = 0;
}
}
else {
timesSkipped = timesSkipped + 1;
}
}
for (i=0; i<10; i++) {
if (criticalReviewers[i] == criticalScore) {
critReviewers = Reviewers + i;
}
}
return numCriticalReviewers;
}
我已经正确地在主栏中打印了关键审稿人的数量,但在下面应打印我不知道的关键审稿人的姓名。每次我尝试传递值时,它都会打印随机的字母和符号字符串。
答案 0 :(得分:0)
问题是,您需要在功能critReviewers
中将检查者分配到criticalReviewers
数组。请注意如何将第二个索引设置为30。这样做是在数组中仅分配第30个索引(这超出了数组的范围,索引为0-29,但这是另一个问题)。
您应该做的是要么遍历字符串以逐个复制每个索引,要么使用string.h
库中的strcpy之类的函数复制字符串。否则,看起来一切正常。
解决方案1:
for(i = 0; i < 30; i++) {
array1[someIndex][i] = array2[someIndex][i];
}
这将一个一个地复制array2[someIndex]
中的每个条目。
解决方案2:
strcpy(array1[someIndex], array2[someIndex]);
这会将array2[someIndex]
中的整个字符串复制到array1[someIndex]
。
如果您在阅读完2d数组后仍然感到困惑,我还将花一些时间来阅读它。我总是喜欢geeksforgeeks.com这样的东西:https://www.geeksforgeeks.org/multidimensional-arrays-c-cpp/