gpt4 book ai didi

c - 程序可以在onlineGDB编译器上运行,但用MinGW编译时出现逻辑错误

转载 作者:行者123 更新时间:2023-11-30 16:18:46 24 4
gpt4 key购买 nike

我在名为 onlineGDB 的在线编译器上将以下程序编写为单个 block 。在这个网站上它工作得很好,但是当我将模块分割成单独的源文件并使用 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

最佳答案

你的问题可能是因为你声明getInput返回一个float但它的定义返回一个int

当你执行salaries[i] = getInput();时,代码会从int生成一个float,但因为它已经是一个float转换错误,经过符号测试也是错误的

除此之外,我强烈建议您测试 scanf 的结果,以确保完成了有效的输入,否则您肯定不会获得 value 值,因为永远不会绕过无效值

关于c - 程序可以在onlineGDB编译器上运行,但用MinGW编译时出现逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com