Как завершить пользовательский массив ввода - PullRequest
0 голосов
/ 27 апреля 2020

Так что это для лабораторного задания, и оно у меня уже работает, но меня беспокоит одна вещь. Назначение включает в себя создание одномерного массива и последующее управление им. Я должен разрешить максимум 100 входов, но пользователю не нужно использовать все 100. Сейчас я использую оператор while, чтобы либо прервать, либо разрешить ввод другого ввода. Чтобы нарушить утверждение, вы должны ввести отрицательное число (это то, что мне не нравится и я хочу изменить). Какие есть еще варианты, чтобы завершить ввод пользователя, когда он введет свои номера? Можно ли завершить l oop после того, как вы нажмете Enter, ничего не печатая?

Я искал stackoverflow в течение последних 3 дней и нашел несколько интересных вещей, но так и не смог заставить его работать.

Обратите внимание, я понимаю, что функция void здесь избыточна, но это не имеет значения (если только она фактически не влияет на мою способность достичь того, чего я хочу).

Кроме того, заранее спасибо.

вот мой код (мой оператор while в основном) ... будьте добры, я новичок ie в кодировании.

#include <iostream>

using namespace std;

void reverseElements(int array[], int size)
{
    int tmp;
    int j;
    int i = size;

    j = i - 1;
    i = 0;

    while (i < j)
    {
        tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
        i++;
        j--;
    }

    cout << "I will now reverse the elements of the array." << endl;
    cout << endl;

    for (i = 0; i < size; i++)    
    {
        cout << array[i] << " " << endl;
    }
}

int main()
{
    const int NUM_ELEMENTS = 100;
    int iArr[NUM_ELEMENTS];
    int i;
    int myInput;

    cout << "Enter your numbers, then enter a negative number to finish" << endl;
    cout << endl;

    for (i = 0; i < NUM_ELEMENTS; i++)  //loop to obtain input
    {
        cin >> myInput;

        if (myInput < 0)   //checks for negative number to end loop
        {
            break;
        }

        else   //continues to allow input
        {
            iArr[i] = myInput;
        }
    }

    cout << endl;

    reverseElements(iArr, i);

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Я немного отредактировал основную функцию. Здесь пользователя спрашивают, сколько элементов он хочет ввести. и динамическое распределение памяти для экономии места

int main()
{   int n=101;
    while(n>100){
    cout<<"How many numbers do you want to enter";
        cin>>n;
    }
    int *ptr=new(nothrow)int[n]; 
    for (int i=0;i<n;i++){
        cout << "Enter your number" << endl;
        cin>>ptr[i];
    }

cout << endl;

reverseElements(ptr, n);

return 0;
}
0 голосов
/ 27 апреля 2020

Пожалуй, самое простое решение: пусть ваш пользователь выберет, сколько чисел записать, прежде чем их на самом деле писать.

int readNumbersCount()
{
  int const numbersMin = 1;
  int const numbersMax = 100;
  int numbersCount = -1;
  while (numbersCount < numbersMin || numbersCount > numbersMax)
  {
    std::cout <<
      "How many numbers are you going to enter? Choose from " <<
      numbersMin << " to " << numbersMax << ":\n";
    std::cin >> numbersCount;
  }
  return numbersCount;
}

int main()
{
  int const numbersCount = readNumbersCount();
  for (int i = 0; i < numbersCount; ++i)
  {
    // read the numbers etc.
  }
  return 0;
}

Я написал readNumbersCount() как отдельную функцию для извлечения numbersMin и других "одно- использовать "идентификаторы main() и main() numbersCount const.

...