проблема при передаче строк из двумерного массива, которые удовлетворяют условию главной функции из отдельной функции - PullRequest
0 голосов
/ 29 марта 2019

В этом задании вы получите список самых критичных рецензентов.Критический рецензент определяется как:

Рецензент, имеющий столько же отрицательных рекомендаций ('n'), что и рецензент с наиболее отрицательными рекомендациями.

Использование этого определения критическогорецензент, вы должны просмотреть список рекомендаций рецензента и определить, являются ли они критическими рецензентами.

** Возвращаемое значение функции должно быть числом критических рецензентов.**

Кроме того, список имен критических рецензентов, созданных функцией, также должен быть доступен за пределами функции.

В этом примере наибольшее количество «n» рекомендаций дляодин рецензент - 2. Как только вы определили наибольшее количество «n» рекомендаций, вы можете проверить, какие из рецензентов являются «критическими».В этом примере мы можем определить, что рецензенты «Ларри», «Джуди», «Маниша», «Дора» и «Ник» являются критическими рецензентами, поскольку они являются рецензентами, представленными индексами массива 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;

 }

Я правильно напечатал в основном количество критических рецензентов, но ниже следует напечатать имена критических рецензентов, которые я не могу выяснить.каждый раз, когда я пытаюсь передать значения, он печатает случайную строку букв и символов.

1 Ответ

0 голосов
/ 29 марта 2019

Проблема в том, что вы присваиваете рецензенты массиву critReviewers в функции criticalReviewers. Обратите внимание, что у вас есть второй индекс как 30. Делая это, вы назначаете только 30-й индекс в массиве (который находится за пределами массива, индексы 0-29, но это другая проблема).

То, что вам нужно сделать, это либо циклически проходить по строке, чтобы копировать каждый индекс один за другим, либо копировать строку, используя функцию типа strcpy в библиотеке string.h. В противном случае все выглядит так, как будто все работает нормально.

Решение 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...