Поиск всех целых чисел, встречающихся дважды в векторе - PullRequest
0 голосов
/ 19 декабря 2018

В университете я получил задание ввести не более 10 целых чисел, которые должны храниться в одномерном векторе.После этого каждое целое число вектора должно отображаться на дисплее (через printf).

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

Вот что я пробовал:

#include <stdio.h>

int main(void)
{
    int vector[10];
    int a;
    int b;
    int c;
    a = 0;
    b = 0;
    c = 0;

    printf("Please input 10 integers.\n\n");

    while (a <= 10);    
    {
        for (scanf_s("%lf", &vektor[a]) == 0)
            {
                printf("This is not an integer. Please try again.\n");
                fflush(stdin);
            }
        a++;
    }

    for (b <= 10);
        {
            if (vector[b] != vector[c]);
                {
                    printf("&d", vector[b]);
                    c++;
                }
            b++;
        }

    return 0;
}

1 Ответ

0 голосов
/ 19 декабря 2018

Ваш код имеет несколько проблем, некоторые синтаксические и некоторые семантические.Ваш компилятор поможет со многими предыдущими типами, такими как

  • неправильное написание имени переменной vector в одном месте (хотя, возможно, это было пропущено после фактического редактирования), и
  • неверный синтаксис для цикла for

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

Но я думаю, что наиболее важной проблемой является то, что детали вашего подхода к печати только недублирующиеся элементы просто не будут служить.Для этой цели я рекомендую выяснить, как описать словами , как компьютер (или человек) должен решить эту проблему, прежде чем пытаться написать C-код для его реализации.Это действительно два разных упражнения, особенно для тех, чье знакомство с Си ограничено.Вы можете рассуждать о прозаическом описании, не отвлекаясь и не отвлекаясь на синтаксис Си.

Например, вот несколько слов, которые могут подойти:

  1. Рассмотрим каждый элемент E измассив в свою очередь, от первого к последнему.
  2. Проверьте все элементы, предшествующие E в массиве, на наличие элемента с одинаковым значением.
  3. Если ни один из элементов до E не содержит одинаковое значениетак как E, то E содержит первое появление его значения, поэтому выведите его.В противном случае значение E уже было напечатано при обработке какого-либо предыдущего элемента, поэтому не печатайте его снова.
  4. Рассмотрите следующий E, если таковой имеется (вернитесь к шагу 1).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...