Почему мой код печатает неправильные числа в c?

Это мой код. Предполагается сканировать 2 числа (m и n) в первой строке. Затем он должен сканировать массивы размером n. Затем он должен проверить числа (от 1 до m), существуют ли они во второй строке или нет. Если они не существуют, он должен напечатать числа.

#include <stdio.h>

int main()
{
    int m = 0;
    int n;
    int i , j;
    int x[100];
    scanf("%d", &m);
    scanf("%d", &n);
    for(i = 0 ;i < n;i++)
    {
        scanf("%d", &x[i]);
    }
    for(j = 1;j <= m;j++)
    {
        for(i = 0; i < n;i++)
        {
            if (x[i] != j)
            {
                printf("%d", j);
            }
        }
    }
}

например:

input :
3 3
1 2 4
output:
4

Он печатает неправильные числа. Я ожидал, что он напечатает номер 4. Но он печатает 1122333.

вы прошли код в отладчике или добавили больше операторов printf?

OldProgrammer 11.04.2023 15:18
if (x[i] != j), вероятно, не то, что вы хотели...
Lundin 11.04.2023 15:20

Вам нужно перебрать все значения, чтобы убедиться, что j не существует в массиве, прежде чем вы напечатаете, что оно отсутствует.

Jonathan Leffler 11.04.2023 15:20

@JonathanLeffler Как я могу это сделать?

code 11.04.2023 15:25

Удалите печать из внутренней петли. Установите флаг в 0 перед циклом; когда вы найдете значение в цикле, установите флаг в 1 и прервите. После цикла, если флаг не установлен, выведите j.

Jonathan Leffler 11.04.2023 15:29

Другие проблемы: всегда проверяйте возвращаемое значение scanf. (Многие функции имеют код возврата, который сообщит вам, было ли это успешно или нет, поэтому вы должны проверить его.) Ваш формат printf не содержит пробела или новой строки, поэтому все числа печатаются без разделения. 1122333 на самом деле 1122333.

Bodo 11.04.2023 15:30

@JonathanLeffler Можете ли вы опубликовать ответ, пожалуйста?

code 11.04.2023 15:46
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
7
86
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
#include <stdio.h>
#include <stdbool.h>

int main()
{
    int m = 0;
    int n;
    int i, j;
    int x[100];
    bool exists[100] = { false }; // initialize all values to false
    scanf("%d", &m);
    scanf("%d", &n);
    for(i = 0; i < n; i++)
    {
        scanf("%d", &x[i]);
        exists[x[i]-1] = true; // mark the number as existing in the array
    }
    for(j = 1; j <= m; j++)
    {
        if (!exists[j-1]) // if the number doesn't exist in the array
        {
            printf("%d ", j);
        }
    }
    printf("\n"); // add a newline at the end
    return 0;
}

Сначала отсканируйте значения m и n. Затем отсканируйте массив из n элементов. Если число не присутствует в массиве, напечатайте число и продолжите со следующим числом.

Вам нужно изменить внутренний цикл ur

#include <stdio.h>

int main() {
    int m, n;
    int x[100];
    scanf("%d", &m);
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &x[i]);
    }
    for (int i = 1; i <= m; i++) { // loop over the numbers 1 to m
        int found = 0;
        for (int j = 0; j < n; j++) { // loop over array x to check if i is present
            if (x[j] == i) {
                found = 1;
                break;
            }
        }
        if (!found) { // if i was not found in array x, print it to output
            printf("%d ", i);
        }
    }
    return 0;
}

Выдает ошибку времени выполнения. Я не мог это исправить.

code 11.04.2023 17:29

У меня это работает — плюс-минус добавление putchar('\n'): перед return 0;. Код должен проверять, что scanf() работает должным образом, но это уточнение.

Jonathan Leffler 11.04.2023 17:41

@JonathanLeffler, вы можете изменить мой код..... для лучших результатов

Deepak Kumar 12.04.2023 02:36

Не нужно — то, что вы написали, работает. Мне просто не нравится, что приглашение командной строки появляется в той же строке, что и последняя строка вывода программы, поэтому я напечатал новую строку после цикла.

Jonathan Leffler 12.04.2023 06:25

я вижу, что другой ответ был принят автором этого вопроса, может быть, это лучшее решение

Deepak Kumar 12.04.2023 16:07

Другие вопросы по теме