Слишком много аргументов для формата [-Wformat-дополнительные аргументы] и другого

#c

Вопрос:

 double drake_equation(double RofSF, double FSwP, int NofPSL, double PDL, double PwIL, double CwDC, int LofTRS);

int main(int argc, char **argv)
{
  double RofSF[] = {1.0, 1.0, 1.5, 3.0};
  double FSwP[] = {0.2, 0.5, 1.0, 1.0};
  int NofPSL[] = {1, 5, 3, 5};
  double PDL[] = {1.0, 1.0, 1.0, 1.0};
  double PwIL[] = {1.0, 1.0, 0.0001, 1.0};
  double CwDC[] = {0.1, 0.2, 0.001, 0.1};
  int LofTRS[] = {1000, 1000000000, 304, 10000000};
  double N;
  int i;
  for (i=1; i< 5; i  )
  {
    N = drake_equation(RofSF[i], FSwP[i], NofPSL[i], PDL[i], PwIL[i], CwDC[i], LofTRS[i]);
  printf("N=", "R*=", "fp=", "ne=%d", "fl=", "fi=", "fc=", "L=%d", N, RofSF[i], FSwP[i], NofPSL[i], PDL[i], PwIL[i], CwDC[i], LofTRS[i]);  
  }
  return 0;
}
 

«я просмотрел другие сообщения об этой ошибке, но я действительно не понимаю, что мне нужно сделать с моим кодом, я получаю ошибку:

слишком много аргументов для формата [-Wformat-дополнительные аргументы] amp; «%f «ожидает аргумент типа «double», но аргумент 2 имеет тип » char *’ в строке 18.

любая помощь в том, что мне нужно изменить, была бы полезна, спасибо.

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

1. Вы неправильно используете printf, вам следует указать только одну строку формата, за которой следует N параметров : printf("N=, R*=, fp=, ne=%d, fl=, fi=, fc=, L=%dn", N, RofSF[i], FSwP[i], NofPSL[i], PDL[i], PwIL[i], CwDC[i], LofTRS[i]);

Ответ №1:

В вашем printf() вызове у вас есть одна строка формата "N=" , за которой следуют 15 дополнительных аргументов. Поскольку в строке формата есть только один оператор форматирования, должен быть только один дополнительный аргумент. Это то, что «слишком много аргументов в пользу формата» пытается вам сказать.

И первым аргументом должен быть a double (или a float , который будет обновлен до double из-за стандартных рекламных акций), так как именно этого ожидает формат, но ваш первый аргумент-строка. Это то, что «%f» ожидает, что аргумент тубе «двойной»» пытается вам сказать.

Проблема в том, что вы разделяете строку формата на 8 отдельных аргументов. Это должна быть одна строка.

   printf("N=, R*=, fp=, ne=%d, fl=, fi=, fc=, L=%d", N, RofSF[i], FSwP[i], NofPSL[i], PDL[i], PwIL[i], CwDC[i], LofTRS[i]);  
 

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

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