Как заставить функцию scanf печатать весь массив - PullRequest
1 голос
/ 06 апреля 2019

Я написал простой код, который должен прочитать массив и напечатать его, но он ничего не печатает.

Что я заметил, так это то, что, когда я делаю первый цикл for, перейдем к n-1 вместо n (но второй цикл по-прежнему идет к n), он на самом деле работает.Пример:

Ввод: 1 2 3 4 5 6
Выход: 1 2 3 4 5 0

Он также работает, когда второй цикл переходит на n-1, поэтому ошибка в первом цикле или scanf функция.

Что я могу сделать, чтобы он печатал весь массив?

#include <stdio.h>

#define MAX_LENGTH 50

int main() {
    int a[MAX_LENGTH];
    int n, i;
    printf("Insert the length of array: ");
    scanf("%d", &n);
    printf("Insert elements of array: ");
    for (i = 0; i < n; i++)
        scanf("%d ", &a[i]);
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
}

1 Ответ

1 голос
/ 06 апреля 2019

Проблема в том, что у вас есть завершающий пробел в формате scanf(): scanf продолжает ждать ввода, пока вы не введете что-то, не являющееся пробелом, символом новой строки будет пробел.

Вы должны простоиспользуйте "%d" в качестве scanf() формата.

Кроме того, вы должны проверить возвращаемое значение scanf(), чтобы избежать неопределенного поведения при неверном вводе.

Вот исправленная версия:

#include <stdio.h>

#define MAX_LENGTH 50

int main() {
    int a[MAX_LENGTH];
    int n, i;

    printf("Insert the length of array: ");
    if (scanf("%d", &n) != 1)
        return 1;
    if (n > MAX_LENGTH) {
        printf("too many numbers, limiting to %d\n");
        n = MAX_LENGTH;
    }
    printf("Insert elements of array: ");
    for (i = 0; i < n; i++) {
        if (scanf("%d", &a[i]) != 1)
            return 1;
    }
    for (i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}
...