Итак, вот мой код. Это школьное задание. Я должен был сделать программу для вычисления квадратного корня числа, используя метод, разработанный вавилонянами и т. Д., Это не важная часть. Мне было интересно, можно ли игнорировать письма в моем 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 –