Цепочка операторов cin для оптимизации вывода системы

#c #loops #io #cin

#c #циклы #io #cin

Вопрос:

Добрый день,

У меня есть некоторый код, который просит пользователя ввести число, чтобы получить некоторые полиномиальные значения. Первое число — это количество полиномов, которые требуется ввести (int N), следующие числа являются указателями на значения в связанном списке и вводятся в наборах коэффициентов (int amp; coe ) и мощности (int amp; pow).

Когда я запускаю программу, она каждый раз запрашивает у пользователя необходимые значения. Однако, если вы введете все значения сразу, запрос будет выводиться N раз. Есть ли способ, которым я могу установить элемент управления, который будет определять, сколько у меня входных данных, а затем корректно выводить количество запросов, необходимых перед вычислением значений?

например, если я ввожу 3, ему требуется 3 набора чисел, и я мог бы делать это по одному набору за раз или все сразу/ Если я введу 3 4 9 3 0 5 7, то он пропустит сообщение «Enter …» и продолжит. Аналогично, если я введу 5 для полиномиального запроса и введу 5 8 5 3 7 6 4, сообщение будет напечатано только один раз, и все еще будет два набора, прежде чем продолжить работу с программой.

Код:

 int N = 0;
printf("Enter N polynomials: ");
cin >>N;
Node *node = NULL;
int pow, coe;
for (int i = 0; i < N;   i)
{
    printf("Enter coeff. amp; pow. of poly.: term %d separated by " ": ", i);
    cin >> coe >> pow;
    createNode(coe, pow, amp;node);
}
  

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

1. О чем cin вы говорите?

2. Извините, я использовал printf в качестве cin, код был скорректирован с учетом вопроса

3. » Я использовал printf как cin» Теперь вы находите меня совершенно сбитым с толку? Не printf() для вывода?

4. Самый близкий подход к чистому C , который вы, вероятно, получите, — это прочитать всю строку ввода, используя getline() , а затем прочитать значения из нее в ваши отдельные переменные, а затем запросить, что вам нужно дальше. Фактически определить, были ли заранее предоставлены несколько строк (путем перенаправления ввода из файла или вставки нескольких строк из буфера обмена и т. Д.), Выходит за рамки стандартного ввода-вывода C и требует использования некоторого специфичного для ОС кода.

Ответ №1:

Используется std::getline() для чтения введенных пользователем данных в a std::string , а затем std::istringstream для чтения целых чисел из этой строки, пока их не останется, затем вернитесь к std::cin и запросите дополнительные целые числа по мере необходимости.

 int N = 0;
cout << “Enter N polynomials: ";
cin >> N;
string input;
getline(cin, input);
istringstream iss(input);
Node *node = NULL;
int pow, coe;
for (int i = 0; i < N;   i)
{
    if (!(iss >> coe >> pow))
    {
        cout << “Enter coeff. amp; pow. of poly.: term “ << i << ” separated by " ": ";
        cin >> coe >> pow;
    }
    createNode(coe, pow, amp;node);
}