Это мой первый раз работающий с va_list
и прочее, поэтому я не знаю, что я делаю. Хорошо, что у меня есть куча чисел (1, 2, 3, 4, 5) в упорядоченной функции, и я получаю их для распечатки. Это прекрасно работает.Как я могу заставить аргументы va_list повторяться?
#include <iostream>
#include <cstdarg>
using namespace std;
void ordered(int num1, double list ...);
void main()
{
ordered(5, 1.0, 2.0, 3.0, 4.0, 5.0);
}
void ordered(int num1, double list ...)
{
va_list arguments;
va_start(arguments, num1);
list = va_arg(arguments, double);
cout << "There are " << num1 << " numbers" << endl;
do {
cout << list << endl; // prints out 1 then 2 then 3 then 4 then 5
list = va_arg(arguments, double);
} while (list != 0);
// at this point, list = 0
va_end(arguments);
}
проблема, после того, как va_end(arguments);
или перед ней, я хотел бы получить программу, чтобы распечатать мой список во второй раз; в основном распечатывать 1, 2, 3, 4, 5 еще раз, не выполняя другую функцию. Я попытался дублировать код:
va_start(arguments, num1);
do {
cout << list << endl;
list = va_arg(arguments, double);
} while (list != 0);
va_end(arguments);
без успеха. Как программа может повторить list
еще раз, или это невозможно сделать в той же функции?
Хороший вопрос на самом деле, но я думаю, вам также нужно повторите также 'va_start' и' va_end'. – RedX
Я пробовал это, но это не сработало :(хорошо я только что отредактировал код, чтобы показать, что –
Я не думаю, что подпись функции правильная. 'Void ordered (int x, double y ...)' означает 'void ordered (int x, double y, ...)'. То есть, varargs не является последовательностью «double», а последовательностью неизвестных типов, которая возникает после двойного аргумента. В то же время это означает, что ваша реализация неверна (отбрасывает второй аргумент функции) –