как завершить работу после отсутствия ввода в программе на c

#c

#c

Вопрос:

Привет, ребята, я новичок в c , я просто написал этот код, чтобы найти минимальное / максимальное значение массива чисел.
Я просто хочу знать, как я могу сделать количество записей гибким (я имею в виду, что пользователь должен иметь возможность вводить как можно больше записей, не указывая, сколько в начале)
Вот код, но он не работает, может кто-нибудь, пожалуйста, помочь? Код благодарности:

 #include <iostream>
using namespace std;
int main(){

    cout<<"Program to calculate max/min/second maxn";
    int *A;
    A=new int[5];
    bool flag=false;
    int x=0,i=0;
    cout<<"Enter the numbersn";

    do{

        cin>>x;
        if(x==''){
            flag=true;
        }
        *(A i)=x;
        i  ;

    }
    while(!flag);

    for(int j=0;j<i;j  ){


        cout<<*(A j)<<"n";

    }

    return 0;
}
  

Комментарии:

1. Я бы тоже был разочарован, если бы в моем коде не было такого отступа. Пожалуйста, научитесь правильно расставлять отступы в коде даже для самых маленьких программ. [Этот комментарий относится к более ранней правке, до того, как кто-то исправил ваш код за вас.]

Ответ №1:

Вас смущает, что нажатие enter просто выдаст вам нулевой ограничитель. Этого не произойдет. В зависимости от вашей платформы это даст вам возврат каретки / перевод строки ( rn в Win, n в * ix). Лучший способ сделать это — просто попросить их использовать букву типа ‘q’ для выхода или число типа -1, а затем сравнить по этому.

Комментарии:

1. Вам нужно изменить прямые косые черты на обратные 🙂

Ответ №2:

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

В противном случае использование класса vector поверх массива, вероятно, лучше (и с ним проще справиться, чем напрямую с использованием указателей.)

http://www.cplusplus.com/reference/stl/vector / — хорошее место для начала. Посмотрите на синтаксис для создания вектора и push_back() функции-члена для выполнения вашей задачи.

Удачи,

SegFaults Макги

Комментарии:

1. Согласен, но это, скорее всего, вопрос CS101 / high school CS, где концепция векторов поразила бы n00b, и их обучают указателям, на самом деле не обучая указателям.

2. Совершенно верно, но если Амир хочет изучить еще немного синтаксиса, векторы могут превратить ситуацию : ( или: O или D: в ситуацию 🙂

Ответ №3:

Вам придется использовать какую-то структуру данных переменной длины, и Vector — лучший выбор для этого, поскольку вы работаете на C . Следовательно, вместо вашего массива фиксированной длины:

 int *A;
A=new int[5];
  

используйте вектор, подобный этому:

 std::vector<int> input;
  

А затем, чтобы добавить значения к этому, используйте следующее:

 input.push_back(10);
  

На этой странице приведен пример использования векторов.

Ответ №4:

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

С учетом вышеуказанного требования и имеющегося у вас кода вы можете ввести в массив не более 5 элементов.

 do{ 
    cin>>x;
    if(x==''){
       flag=true;
    }
    *(A i)=x;
    i  ;
}while(!flag);
  

Используйте std::vector вместо этого для требования, когда оно неявно управляет памятью для вас.

Ответ №5:

Если вы используете

 std::vector<int> a;
  

тогда ввод становится просто

 while (std::cin >> x)
    a.push_back(x);
  

Затем пользователь может нажать ^ D (Unix / Linux / etc) или ^ Z (DOS / Win), когда они ввели все цифры, или использовать программу, как в:

 echo 1 4 22 | program
program < input_file
  

Если вы хотите, чтобы пустая строка обозначала конец ввода, то с помощью проверки ввода:

 std::string line;
while (getline(std::cin, line))
{
    char c;
    std::istringstream iss(line);
    int x;
    if (iss >> x)
    {
        a.push_back(x);
        char c;
        if (iss >> c)
        {
            std::cerr << "unexpected character '" << c << "' in line '" << line << "', terminatingn";
            exit(EXIT_FAILURE);
        }
    }
    else if (!iss.eof())
        break;  // empty line...
    else
    {
        std::cerr << "unexpected characters in line '" << line << "', terminatingn";
        exit(EXIT_FAILURE);
    }
}