Невозможно распечатать числа, введенные в массив в обратном порядке - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь написать программу с массивом, в котором:

  • Пользователь вводит 10 целых чисел, а затем целые числа отображаются в обратном порядке, или
  • Пользователь вводит до 10 целых чисел и выходит из цикла while, используя 0, и введенные целые числа затем отображаются в обратном порядке.

Приведенный ниже код - мое лучшее усилие (моя 5-я попытка решить проблему), но он собирает целое ноль и отображает его в индексе массива (я пытался присоединить остальные пять, но он продолжает выдавать ошибку ):

enter image description here

int main()
{
   #define ARRAY_LENGTH 10

   int numbers[ARRAY_LENGTH];
   int numbersEntered = 0;

   for (int i = 0; i < ARRAY_LENGTH; i++)
   {
       numbers[i] = 0;
   }

   int number = 0;
   printf("Enter an integer; 0 to quit: ", ARRAY_LENGTH - 1);
   scanf_s("%d", &number);

   while (number != 0 && numbersEntered < ARRAY_LENGTH - 1)
   {
       numbersEntered++; 
       numbers[numbersEntered] = number;
       printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
       scanf_s("%d", &number);
   }

   for (int i = numbersEntered; i >= 0; i--)
   {
       printf("index %d -> %d\n", i, numbers[i]);
   }
}

Ответы [ 4 ]

0 голосов
/ 10 ноября 2018

Это моё решение, которое включает в себя несколько хороших практик, это настройка вашего кода:

1) вы хотите, чтобы ваши определения были вне функции (или основной функции), чтобы вы могли использовать одну и ту же константу во всей программе;

2) любая функция, имеющая тип возврата (например, int main), должна возвращать что-то в конце, поэтому вы должны иметь «return 0» в конце вашей основной функции;

3) часть do-while будет гарантировать, что ваш фрагмент кода будет выполнен один раз до проверки условия;

4) numbers[numbersEntered++] = number; присвоит «numbers [numbersEntered]» значение «number», а затем увеличит «numbersEntered» на единицу; Это должно уменьшить количество кода, который вы должны написать:);

Надеюсь, это помогло, и если у вас есть еще вопросы, я надеюсь, что смогу ответить на них:).

#define ARRAY_LENGTH 10

int main()
{

    int numbers[ARRAY_LENGTH];
    int numbersEntered = 0;

    for (int i = 0; i < ARRAY_LENGTH; i++)
        numbers[i] = 0;

    int number = 0;

    do
    {

        printf("Enter an integer; 0 to quit: ");
        scanf_s("%d", &number);

        if (number == 0)
            break;

        numbers[numbersEntered++] = number;


    } while (number != 0 && numbersEntered < ARRAY_LENGTH);

    if (numbersEntered > 0)
    {

        for (int i = numbersEntered - 1; i >= 0; i--)
            printf("index %d -> %d\n", i, numbers[i]);

    }

    return 0;

}
0 голосов
/ 10 ноября 2018

Я думаю, это потому, что вы не вставляете ни одного числа в первое место в массиве (место [0]), потому что вы запрашиваете значение numbersEntered слишком рано. Попробуйте написать свой цикл так:

while (number != 0 && numbersEntered < ARRAY_LENGTH - 1){
   numbers[numbersEntered] = number;
   printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
   scanf_s("%d", &number);
   numbersEntered++; 
}
0 голосов
/ 10 ноября 2018
  1. Строка printf("Enter an integer; 0 to quit: ", ARRAY_LENGTH - 1); должна быть printf("Enter an integer; 0 to quit: ");
  2. Вы должны использовать scanf, а не scanf_s

Может работать следующее code:

#include <stdio.h>

#define ARRAY_LENGTH 10

int main()
{
    int numbers[ARRAY_LENGTH];
    int i;
    int k;

    for (k = 0; k != ARRAY_LENGTH; ++k)
    {
        printf("Enter an integer; 0 to quit: ");
        if (scanf("%d", numbers + k) != 1 || numbers[k] == 0)
            break;
    }

    for (i = k - 1; i >= 0; --i)
        printf("index %d -> %d\n", i, numbers[i]);
    return 0; 
}
0 голосов
/ 10 ноября 2018

Видите, проблема в том, что вы сначала инициализируете весь массив с нуля здесь

for (int i = 0; i < ARRAY_LENGTH; i++)
   {
   numbers[i] = 0;
   }  

Тогда вы делаете это

while (number != 0 && numbersEntered < ARRAY_LENGTH - 1)
   {
   numbersEntered++; 
   numbers[numbersEntered] = number;
   printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
   scanf_s("%d", &number);
   } 

Итак, что происходит, так как numbersEntered уже инициализировано с нуля, вы увеличиваете его на 1, поэтому первая цифра вводится в массив numbers равно 0, как вы инициализировал весь массив в начале.

Таким образом, быстрое решение - просто переместить строку вниз и изменить код цикла while на этот

while (number != 0 && numbersEntered < ARRAY_LENGTH - 1)
   {
   numbers[numbersEntered] = number;
   numbersEntered++; 
   printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
   scanf_s("%d", &number);
   }

Также, как отметил Киран в комментариях, печать для цикла должна быть изменена на этот

for (int i = numbersEntered-1; i > 0; i--)
   {
   printf("index %d -> %d\n", i, numbers[i]);
   }
...