因此,我正在爲我的C程序使用視覺工作室。在while循環中使用「continue」,跳過scanf(「%d」,var)
while循環以提示符和scanf開頭,如果用戶輸入非數字響應,則循環中的開關/情況將變爲默認值。這會打印一個錯誤並「繼續」循環。
問題是,當循環繼續下一次迭代時,它會完全跳過「scanf」,然後通過默認情況無限循環。我搜索了幾個小時,但似乎無法找到解決方案。
我的目標是跳過開關/大小寫後的代碼,然後回到開頭。任何幫助將非常感激。
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");
}
「繼續」表示「斷開當前執行並從開始啓動循環代碼」。所以它是循環的「短路」。另一方面,'break'將退出循環塊。在這裏,你可以簡單地跳過'conitinue',你的scanf_s將被執行。 – Antoniossss
然而'case' statemets,'break'打破當前case'不是外部循環 – Antoniossss
那麼我的目標是跳過開關案例後的代碼,如果默認情況下被激活。然後回到頂部並要求用戶重新輸入整數值。 – Abbie