Ошибка активно e0165 слишком мало аргументов в вызове функции

I’ve been trying to learn my way through the winapi in C, and I’m trying to use the VirtualAlloc() function to allocate memory. The function clearly takes 4 arguments and I’m supplying 4 arguments as per the windows API documentation.

Function body:

VirtualAlloc(
  lpAddress,
  dwSize,
  flAllocationType,
  flProtect
);

How I’m supplying the function:

//values I inserted here have the correct types, again the problem is that it complains about few arguments
void* memory = VirtualAlloc(
        NULL,
        DRAWING_AREA_MEMORY_SIZE,
        MEM_RESERVE | MEM_COMMIT,
        PAGE_READWRITE
);

I tried using only one allocation type instead of piping, just in case that caused the problem for some reason, but to no avail
Error Copied from the compiler:

Error (active) E0165 too few arguments in function call

I can’t tell what could be the problem. Funny enough, no matter how many other arguments I throw in, it stays too few and never changes to too many. What is going on here?

2 oшибкe в строке 29 :1)Ошибка — E016 слишком мало аргументов в вызове функции 2)Ошибка — C2660 k: функция не принимает 1 аргумент

#include <cmath>         
#include <iostream>

using namespace std;

double k(double, double);
double k1(double, double);

void main()
{

    double p, q, h, j, k;
    cout << "p=";
    cin >> p;
    cout << "q=";
    cin >> q;
    cout << "Вiдповідь:" << k1(p, q);

}
double k(double x, double y)
{
    double f = sin(x) / y * y + cos(y) / x * x;
    return f;
}


double k1(double p, double q)
{
    double d = ((pow(k(1.0 + p), pow(q, 2))), 2) - k(q * p, 1) / (1 + k(pow(p, 2), q));
    return d;
}

В предыдущем сообщении ошибка, все работает, я ошибся в выводе типа данных — printf(«%cn», filek), надо было printf(«%sn», filek).

Строго не судите, но подскажите пожалуйста по такому вопросу, ни как не могу сообразить:

Если я правильно понял, то:

1)Конструкция FILE *»имя переменной» — это объявление переменной в виде того, что она будет указателем, на одномерный массив символов считанных из файла.
2)Соответственно само присвоение этой переменной значение через функцию fopen — это и есть сам указатель на этот массив.
3)Соответственно, если в функции getc указать название этого указателя на массив, то функция getc возвращает первый элемент этого массива в виде одного символа.

И вот в связи с этим два вопроса:
1)Подскажите, как получить из функции getc и второй элемент массива и третий и вообще все ? Я гуглиг, перегуглил, были примеры, но я так я не понял, как заставить getc возвратить n-ый элемент массива, а не только первый.
2)И можно ли как то определить размер этого массива(именно по кол-во элементов, а не то сколько он занимает место в памяти), который расположен по указателю fopen ?

rafamont

Как добавить с++ программу в автозагрузку?

Как реализовать автозагрузку на с++?


  • Вопрос задан

    более трёх лет назад

  • 650 просмотров

Пригласить эксперта

Записать путь к экзешнику вашей программы в реестр, ветку HKCU/Microsoft/Windows/Current Version/Run (вместо HKCU можно использовать HKLM, если вы под админом и хотите установить автозагрузку для всех юзеров компа).


  • Показать ещё
    Загружается…

13 июн. 2023, в 18:22

180000 руб./за проект

13 июн. 2023, в 18:21

2000 руб./в час

13 июн. 2023, в 18:12

1000 руб./за проект

Минуточку внимания

Некоторые мысли, прежде чем мы начнем

(Эта преамбула — мое мнение).

Хотя более старые стандарты C позволяют использовать тип int по умолчанию в ситуациях, когда вы явно не объявляете тип (например, возвращаемые значения функций, параметры для функции и т.д.), Мы всегда хотим избежать этой практики, поскольку это может привести к неверные предположения компилятора языка Си о характере переменной и, таким образом, приводят к неожиданным результатам. В то время как C, вероятно, самый мощный из всех языков, он также очень неумолимый, и вы должны рассказать ему все, что вы хотите для него делать. Предполагается, что вы знаете, что делаете. Таким образом, лучший способ избежать ошибок — быть явным и создавать небольшие значимые фрагменты кода и соткать их вместе.

Фактический ответ

Подумайте о том, как вы хотите продолжить.

Сначала позвольте разделить проблему на две простые проблемы:

Мы хотим получить соответствующие письма для данного класса.

Нам нужно выяснить взвешенную окончательную оценку для каждого человека, учитывая их оценки по каждой категории.

Side Note: Здесь вы хотите подумать о создании (или не хотите создавать функцию): Обратите внимание, что я предложил создать функции для конкретных «изменений», но я специально избегал функции делать процедурные вещи (например, печатать вещи из.)

ШАГ 1 — Общая структура

Сначала создайте нашу общую программу, у которой есть структура, которую мы хотим с пустыми функциями (они не делают ничего полезного, но мы ожидаем, что это будет сделано дальше)

#include <stdio.h>

int calc_final_grade(
int attendance,
int assignments,
int programs,
int quizzes,
int exam);

const char *grade_to_letters(int grade);

int main()
{

printf("Name: %s, Grade: %sn", "Tom, Adams",
grade_to_letters(calc_final_grade(95, 93, 95, 99, 94)));

return 0; /* successfully finished */
}

int calc_final_grade(
int attendance,
int assignments,
int programs,
int quizzes,
int exam)
{
/* TODO calculate something */
return 100; /* just return a value for now */
}

const char *grade_to_letters(int grade)
{
const char result[] = "A+";

/* TODO: actually do the conversion of grade to letters */

/* FIXME: trouble with 'return result' is we are returning a
* memory address value (where "A+" is stored, but it local to
* this function) so by the time our main function tries to
* _read_ the value at this memory address to print it,
* the function context has been lost and its
* contents would've disappeared from under us */

return result;

}

Вышеприведенная программа достаточно хороша для того, чтобы мы могли строить вещи, за исключением того, что исправляем проблему с памятью в class_to_letters.

Нам нужно место для сохранения оценки, но поскольку мы хотим сохранить строку (не базовый тип C), мы не можем просто вернуть ее по значению, мы должны ее где-то сохранить и вернуть адрес того, где мы ее сохранили. Кроме того, место, где мы храним его, должно быть действительным в контексте или области той части программы, которая пытается ее использовать.

Поэтому мы создаем место для письма класса, в котором мы работаем в рамках функции, в которой мы хотим ее использовать (в нашем случае мы grade_to_letters ее в main) и передаем адрес этого места вместе с функцией grade_to_letters чтобы фактически использовать как хранение его результата.

Это означает, что first grade_to_letters должен принимать адрес материала магазина — пусть это произойдет:

Таким образом, мы меняем определение grade_to_letters чтобы принять местоположение для результатов, в нашем случае мы хотим, чтобы этого было достаточно для трех символов (буквы, модификатора и символа окончания строки ):

const char *grade_to_letters(
char result[3], /* a place to store the results */
...); /* see below */

Обратите внимание, что теперь нам не нужно объявлять локальную переменную для результата, у нас уже есть пятно (хотя обратите внимание, что мы все равно можем вернуть результат!);

Мы также можем заметить, что наши оценки никогда не могут быть отрицательными, поэтому мы делаем их целыми без знака. Итак, наш прототип становится:

const char *grade_to_letters(char result[3], unsigned int grade) 

Шаг 2 — Внедрение grade_to_letters

Теперь мы можем пойти и создать простой класс_to_letters:

const char *grade_to_letters(char result[3], unsigned int grade) 
{
/* set result to an error string XX */
result[0] = result[1] = '?'; result[2] = 0;

if (grade > 100)
return result; /* error string ?? */

result[1] = ''; /* for simple grades this is '' */

result[0] = 'F'; /* everyone fails */
if(grade >= 60) result[0] = 'D'; /* or gets a D */
if(grade >= 70) result[0] = 'C';
if(grade >= 80) result[0] = 'B';
if(grade >= 90) result[0] = 'A';

/* TODO: figure out a way to do +/- and store it at result[1] */

return result;
}

Тестирование grade_to_letters

#include <stdio.h>

int calc_final_grade(
int attendance,
int assignments,
int programs,
int quizzes,
int exam);

const char *grade_to_letters(char result[3], unsigned int grade);

/* We change the main function to test the grade_to_letters
* scenarios
*/

int main()
{
char result[3]; /* storage for letters */

/* printf("Name: %s, Grade: %sn", "Tom, Adams",
grade_to_letters(result, calc_final_grade(95, 93, 95, 99, 94))); */

/* test out different scenarios */
printf("%3d: %2sn", 100, grade_to_letters(result, 100));
printf("%3d: %2sn", 98, grade_to_letters(result, 98));
printf("%3d: %2sn", 94, grade_to_letters(result, 94));
printf("%3d: %2sn", 90, grade_to_letters(result, 90));
printf("%3d: %2sn", 88, grade_to_letters(result, 88));
printf("%3d: %2sn", 83, grade_to_letters(result, 83));
printf("%3d: %2sn", 77, grade_to_letters(result, 77));
printf("%3d: %2sn", 75, grade_to_letters(result, 75));
printf("%3d: %2sn", 71, grade_to_letters(result, 71));
printf("%3d: %2sn", 65, grade_to_letters(result, 65));
printf("%3d: %2sn", 55, grade_to_letters(result, 55));

/* check boundaries (we should get ?? as a result) */
printf("%3d: %2sn", 105, grade_to_letters(result, 105));
printf("%3d: %2sn", -38, grade_to_letters(result, -38));

return 0; /* successfully finished */
}

int calc_final_grade(
int attendance,
int assignments,
int programs,
int quizzes,
int exam)
{
/* TODO calculate something */
return 100; /* just return a value for now */
}

const char *grade_to_letters(char result[3], unsigned int grade)
{
/* set result to an error string '??' */

result[0] = result[1] = '?';
result[2] = 0; /* always terminate the string */

if (grade > 100)
return result;

result[1] = 0; /* for simple grades this is also '' */

result[0] = 'F'; /* everyone fails */
if(grade >= 60) result[0] = 'D'; /* or gets a D */
if(grade >= 70) result[0] = 'C';
if(grade >= 80) result[0] = 'B';
if(grade >= 90) result[0] = 'A';

/* TODO: figure out a way to do +/- and store it at result[1] */

return result;
}

Добавление поддержки для + / —

Обратите внимание, что добавление + или — добавляется только тогда, когда единицы измерения находятся в [7,9] или [0,3] интервалах соответственно. Поэтому сначала мы должны собрать части. Хорошо, что легко, если мы получим оставшуюся часть класса после деления на 10 (например, 87/10 = 8 R 7), и мы хотим здесь остаток 7; мы можем выяснить + или -.

Остальная функция в C является оператором %; так что посмотрите на этот фрагмент:

  /* returns '+' / '-' or 0 depending on how high the grade units
value is */

char plus_minus(unsigned int grade)
{
unsigned int remainder = grade % 10; /* get the remainder */

if (remainder >= 7)
return '+'; /* 7,8,9 */

if (remainder <= 3)
return '-'; /* 0,1,2,3 */

return 0; /* return '' char for 4,5,6 */
}

Добавьте это к нашей функции grade_to_letters:

const char *grade_to_letters(char result[3], unsigned int grade)
{
/* set result to an error string ?? */
result[0] = result[1] = '?';
result[2] = 0; /* string terminator */

if (grade > 100)
return result;

result[1] = 0;
result[0] = 'F'; /* everyone fails */

if(grade >= 60) result[0] = 'D'; /* or gets a D */

if(grade >= 70) { /* everyone above 70 */
result[0] = 'C'; /* gets at least a C */
result[1] = plus_minus(grade); /* and a possibly a plus or minus */
}

if(grade >= 80) result[0] = 'B';
if(grade >= 90) result[0] = 'A';

if(grade >= 100)
result[1] = '+'; /* edge case for 100% */

return result;
}

ВАЖНЫЕ ЗАМЕТКИ:

Обратите внимание, что мы помещаем plus_minus в if(grade >= 70) где он принадлежит! Нам нужно только это сделать! Он будет работать для всех уровней C, B и A класса, поскольку B и A являются подмножествами (класс> = 70)

Когда вы запустите программу для значения класса = 100, вы не получите A+! что потому, что 10 делит 100 отлично, так что есть край:

    if(grade >= 100) 
result[1] = '+'; /* edge case for 100% */

Мы добавим это в конце и протестируем все это.

Здесь программа пока:

#include <stdio.h>

int calc_final_grade(int attendance,
int assignments, int programs, int quizzes, int exam);

const char *grade_to_letters(char result[3], unsigned int grade);
char plus_minus(unsigned int grade);

int main()
{
char result[3]; /* storage */

/* printf("Name: %s, Grade: %sn", "Tom, Adams",
grade_to_letters(result, calc_final_grade(95, 93, 95, 99, 94))); */

printf("%3d: %2sn", 100, grade_to_letters(result, 100));
printf("%3d: %2sn", 98, grade_to_letters(result, 98));
printf("%3d: %2sn", 94, grade_to_letters(result, 94));
printf("%3d: %2sn", 90, grade_to_letters(result, 90));
printf("%3d: %2sn", 88, grade_to_letters(result, 88));
printf("%3d: %2sn", 83, grade_to_letters(result, 83));
printf("%3d: %2sn", 77, grade_to_letters(result, 77));
printf("%3d: %2sn", 75, grade_to_letters(result, 75));
printf("%3d: %2sn", 71, grade_to_letters(result, 71));
printf("%3d: %2sn", 65, grade_to_letters(result, 65));
printf("%3d: %2sn", 55, grade_to_letters(result, 55));

printf("%3d: %2sn", 155, grade_to_letters(result, 155));
printf("%3d: %2sn", -38, grade_to_letters(result, -38));

return 0; /* successfully finished */
}

int
calc_final_grade(int attendance,
int assignments, int programs, int quizzes, int exam)
{
/* TODO calculate something */
return 100; /* just return a value for now */
}

const char *grade_to_letters(char result[3], unsigned int grade)
{
/* set result to an error string XX */
result[0] = result[1] = 'X';
result[2] = 0; /* always NUL terminate */

if (grade > 100)
return result;

result[1] = 0;
result[0] = 'F'; /* everyone fails */

if (grade >= 60)
result[0] = 'D'; /* or gets a D */

if (grade >= 70) {
result[1] = plus_minus(grade);
result[0] = 'C';
}

if (grade >= 80)
result[0] = 'B';
if (grade >= 90)
result[0] = 'A';
if (grade >= 100)
result[1] = '+'; /* edge case for 100% */

/* TODO: figure out a way to do +/- and store it at result[1] */

return result;
}

char plus_minus(unsigned int grade)
{
unsigned int remainder = grade % 10; /* get the remainder */

if (remainder >= 7)
return '+'; /* 7,8,9 */

if (remainder <= 3)
return '-'; /* 0,1,2,3 */

return 0; /* return '' char for 4,5,6 */
}

Шаг 3 — Рассчитать окончательную оценку:

Пусть фиксирует основную функцию и проверяет окончательные вычисления оценок для одного ученика. Наша функция:

int calc_final_grade(int attendance,
int assignments, int programs, int quizzes, int exam)
{
return ( 5 * attendance
+ 20 * assignments
+ 30 * programs
+ 25 * quizzes
+ 20 * exam) / 100;
}

Сначала добавление значений, а затем деление результата на 100 дает нам лучшее целочисленное значение в конце (может быть полезно использовать функцию останова здесь для округления, или нет)

Проверка функции сортировки:

Мы можем изменить main чтобы проверить нашу функцию оценки:

int main()
{
char result[3]; /* storage */
int grade;

grade = calc_final_grade(100, 0, 0, 0, 0);
printf("Name: %s, Grade: %s (%d)n", "Attender", grade_to_letters(result, grade), grade);

grade = calc_final_grade(0, 100, 0, 0, 0);
printf("Name: %s, Grade: %s (%d)n", "Homer worker", grade_to_letters(result, grade), grade);

grade = calc_final_grade(0, 0, 100, 0, 0);
printf("Name: %s, Grade: %s (%d)n", "Programmer", grade_to_letters(result, grade), grade);

grade = calc_final_grade(0, 0, 0, 100, 0);
printf("Name: %s, Grade: %s (%d)n", "Mr. Tester", grade_to_letters(result, grade), grade);

grade = calc_final_grade(0, 0, 0, 0, 100);
printf("Name: %s, Grade: %s (%d)n", "Exam Wizard", grade_to_letters(result, grade), grade);

return 0; /* successfully finished */
}

Шаг 5 Сложив все это вместе

Объединяя это вместе, остается в качестве упражнения для читателя

Последние мысли

Надеюсь, это даст вам представление о том, как разрушить такие проблемы и начать думать о них.

Понравилась статья? Поделить с друзьями:
  • Ошибка активный капот mercedes w212
  • Ошибка активно e0070 недопустимый неполный тип
  • Ошибка активации windows 10 после обновления
  • Ошибка активное рулевое управление бмв е70
  • Ошибка активированы динамики телевизора филипс пишет