#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);
}