当给定输入时,我的while循环在结束循环之前额外打印一次。例如,8 7 38 3 -5 -1 q是我的输入,打印出
为蛮力方程求解器提供6个整数系数:解:x = 3, y = 2
再次运行程序?键入'q'退出或任何其他键继续:
为蛮力方程求解器提供6个整数系数:解:x = 3, y = 2
再次运行程序?键入'q'退出或任何其他键继续:
在第一次迭代后何时结束。有人能帮我一下吗?我的代码粘贴在
下面#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int main(void)
{
//Equations should be a1x + b1y = c2 and a2x + b2y = c2
int a1, b1, c1, a2, b2, c2, x, y;
char input;
bool solFound = false;
bool runAgain = true;
//brute force x and y [-10, 10]
while (runAgain == true)
{
printf("Provide 6 integer coefficients for the brute force equation solver: ");
scanf("%d %d %d %d %d %d", &a1, &b1, &c1, &a2, &b2, &c2);
for (x = -10; x<=10; x++)
{
for (y = -10; y<=10; y++)
{
if (a1*x + b1*y == c1 && a2*x + b2*y == c2)
{
printf("nSolution found: x = %d, y = %dnn", x, y);
solFound = true;
runAgain = false;
}
}
}
if (solFound != true)
{
printf("No solution foundnn");
runAgain = false;
}
scanf("%c", &input);
printf("Run program again? Type 'q' to quit or any other key to continue:");
if (input != 'q')
{
runAgain = true;
}
printf("nn");
}
} ```
对于初学者来说,变量sqlFound
应该在while循环中声明,或者至少在while循环中重新初始化。例如
while (runAgain == true)
{
bool solFound = false;
//...
否则,它将保留循环前一次迭代的值。
if语句
if (solFound != true)
{
printf("No solution foundnn");
runAgain = false;
}
设置变量runAgain
runAgain = false;
没有意义,因为在这个if语句之后,您再次询问是否重复循环
printf("Run program again? Type 'q' to quit or any other key to continue:");
if (input != 'q')
{
runAgain = true;
}
所以删除这个设置
runAgain = false;
if语句。
另一个问题是scanf 的调用scanf("%c", &input);
必须跟在问题后面
printf("Run program again? Type 'q' to quit or any other key to continue:");
而且格式字符串必须包含前导空白
scanf(" %c", &input);
^^^^^
否则将从输入流中读取空白字符。也就是你需要写
printf("Run program again? Type 'q' to quit or any other key to continue:");
scanf(" %c", &input);
runAgain = input != 'q' && input != 'Q';
在您要求用户再次运行之前,您将花费很多精力来确保runAgain
是false
。这不是你想的那样:
if (solFound != true)
{
printf("No solution foundnn");
runAgain = false;
}
一旦solFound
变成true
,它就保持这种状态,如果程序循环时没有解决方案,则无法打印&;no solution found&;以及未能将runAgain
更改为false。
如果runAgain
已经是true
,这会导致一个问题:
if (input != 'q')
{
runAgain = true;
}
这允许您将false
(如果没有解决方案)更改回true
(通过输入'q'
以外的其他内容)。但是输入'q'
不能将true
更改为false
!
只有当runAgain
为false时,输入'q'
,问题才会停止。
如果您希望仅基于q
条目停止,您可以消除solFound
和runAgain
之间的第一个块中的连接,并将第二个块替换为:
runAgain = (input != 'q');
这样,runAgain
总是根据用户的选择进行更改,而不是单独更改。