gpt4 book ai didi

c - 在 while 循环中使用 "continue",跳过 scanf ("%d",var)

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:25 26 4
gpt4 key购买 nike

所以我正在为我的 C 程序使用 visual studio。

while 循环以提示和 scanf 开始,如果用户输入非数字响应,循环中的 switch/case 将变为默认值。这将打印错误并“继续”循环。

问题是,当循环继续到下一次迭代时,它会完全跳过“scanf”,然后无限循环遍历默认情况。我已经搜索了几个小时,但似乎找不到解决方案。

我的目标是跳过 switch/case 之后的代码,然后回到开头。任何帮助将不胜感激。

while (userInput != 'N' && userInput != 'n') {

printf("Enter input coefficients a, b and c: "); // prompt user input
scanf_s("%d %d %d", &a, &b, &c); // look for and store user input

/* ----- Break up the quadratic formula into parts -----*/

inSqRoot = (pow(b, 2) - (4.0 * a * c)); // b^2 - 4ac
absInSqRoot = abs((pow(b, 2) - (4.0 * a * c))); // absolute value of b^2 - 4ac
denom = 2.0 * a; // get denomiator 2.0 * a
negB = -1.0 * b; // take negative of b

/*------ Determine number of roots -------*/

if (!isdigit(a) || !isdigit(b) || !isdigit(c)) {

rootNum = 4;

} // end if

else if (a == 0 && b == 0 && c == 0) {

rootNum = 0;
} // end if

else if (inSqRoot == 0) {

rootNum = 1;
} // end if

else if (inSqRoot > 0) {

rootNum = 2;
} // end if

else if (inSqRoot < 0) {

rootNum = 3;

} // end if


/*------ Begin switch case for rootNum ------*/

switch (rootNum) {

case 0: // no roots

printf("The equation has no roots.\n");
break;

case 1: // one root

root1 = (-b + sqrt(inSqRoot)) / denom;

printf("The equation has one real root.\n");
printf("The root is: %.4g\n", root1);
break;

case 2: // two roots

root1 = (-b + sqrt(inSqRoot)) / denom;
root2 = (-b - sqrt(inSqRoot)) / denom;

printf("The equation has two real roots.\n");
printf("The roots are: %.4g and %.4g\n", root1, root2);
break;

case 3: // imaginary roots

printf("The equation has imaginary roots.\n");
printf("The roots are: %.1g + %.4gi and %.1g - %.4gi \n", negB / denom, sqrt(absInSqRoot) / denom, negB / denom, sqrt(absInSqRoot) / denom);
break;

default:
printf("ERROR: The given values are not valid for a quadratic equation.\n");
continue;
}

printf("Enter Y if you want to continue or N to stop the program: ");
scanf_s("%*c%c", &userInput);
printf("\n");
}

最佳答案

scanf 实际上并没有被跳过,它只是一遍又一遍地读取相同的错误输入。您可以使用 scanf 的返回值来查看读取了多少参数。在错误输入的情况下,它将小于 3。要清除错误输入,您可以调用这样的函数

void flushInput() {
int c;
while ((c = getchar()) != '\n' && c != EOF);
}

并在默认情况下添加对 flushInput 的调用

default:
printf("ERROR: The given values are not valid for a quadratic equation.\n");
flushInput();
continue;

关于c - 在 while 循环中使用 "continue",跳过 scanf ("%d",var),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39433247/

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