Я написал следующую программу для онлайн-компилятора под названием onlineGDB как отдельный блок. На этом сайте он работает отлично, но после того, как я разделил модули на отдельные исходные файлы и скомпилировал его с MinGW, он застревает в первом цикле (validateInput).
bool validateInput(float input) {
if (input < 0)
return true;
return false;
}
int main() {
float salaries[SIZE] = { 0 };
float newSalaries[SIZE] = { 0 };
int i = 0;
float *salriesPtr = salaries;
float *newSalariesPtr = newSalaries;
bool exit = false;
bool inputDone = false;
welcome();
do {
do {
salaries[i] = getInput();
inputDone = validateInput (salaries[i]);
newSalaries[i] = payRise (salaries[i]);
i++;
} while (inputDone == false);
output(salriesPtr, newSalariesPtr);
exit = exitProgram ();
} while (exit == false);
return 0;
}
Предполагается, что программа будет продолжать добавлять значения в массив до тех пор, пока не будет введено отрицательное число. Это работает на онлайн-компиляторе, но создает бесконечный цикл при компиляции с MinGW.
РЕДАКТИРОВАТЬ: Вот MVCE
#define SIZE 100
bool validateInput (float input)
{
if (input < 0)
return true;
return false;
}
int getInput ()
{
int input;
printf ("Enter salary: ");
scanf ("%d%*c", &input);
return (input);
}
int main () {
float salaries[SIZE] = { 0 };
bool inputDone = false;
do
{
salaries[1] = getInput ();
inputDone = validateInput (salaries[1]);
}
while (inputDone == false);
return 0;
}
И заголовочный файл. Все остальные исходные файлы - это просто функции, скопированные в собственный файл .c.
#ifndef MAIN
#define MAIN
void welcome();
float getInput();
float payRise(float salary);
void output(float* salaries, float* newSalaries);
bool validateInput(float input);
bool exitProgram();
#endif