-2
所以這裏是我的代碼。它是一個學校作業。我不得不做一個程序,用巴比倫人開發的方法計算一個數的平方根等,這不是重要的部分。我想知道的是,如果可以忽略我的scanf
中的字母,那麼當我輸入一個字母時,它不會在我的終端中瘋狂。任何幫助,歡迎和不勝感激。是否可以忽略「scanf_s」中的某些字符?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double root_Approach(double s); // defines the two functions
void ask_Number(void);
int main() {
ask_Number(); // calls function ask_Number
printf("\n\n");
system("pause");
return 0;
}
double root_Approach(double s) {
double approach;
approach = s;
printf("%.2lf\n", s); // prints initial value of the number
while (approach != sqrt(s)) { // keeps doing iteration of this algorithm until the root is deterimened
approach = (approach + (s/approach)) * 0.5;
printf("%lf\n", approach);
}
printf("The squareroot of %.2lf is %.2lf\n",s, sqrt(s)); // prints the root using the sqrt command, for double checking purposes
return approach;
}
void ask_Number(void) {
double number;
while (1) {
printf("Input a number greater than or equal to 0: "); // asks for a number
scanf_s("%lf", &number); // scans a number
if (number < 0) {
printf("That number was less than 0!!!!!!\n");
}
else {
break;
}
}
root_Approach(number);
}
「只是問同樣的問題又來」。 'scanf'不會以任何方式重試。你需要自己做。事實上'scanf'可以說是不適合處理無效輸入(它不會消耗無效輸入)。相反,建議使用'fgets'然後'sscanf'。 – kaylum
檢查'scanf_s'的返回值。如果爲零,則輸出錯誤消息(可選)並使用int c;刷新輸入流。 while((c = getchar())!='\ n'&& c!= EOF);'。請參閱http://stackoverflow.com/a/4016721/3049655 –