2016-12-05 12 views
-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); 
} 
+0

"он просто задает тот же вопрос снова". 'scanf' не пытается каким-либо образом повторить попытку. Вам нужно сделать это самостоятельно. На самом деле 'scanf', вероятно, не подходит для обработки недопустимого ввода (он не будет использовать недопустимый ввод). Вместо этого предложите использовать 'fgets', а затем' sscanf'. – kaylum

+1

Проверьте возвращаемое значение 'scanf_s'. Если нуль, напечатайте сообщение об ошибке (необязательно) и очистите входной поток, используя 'int c; while ((c = getchar())! = '\ n' && c! = EOF); ​​'. См. Http://stackoverflow.com/a/4016721/3049655 –

ответ

2
  1. Scanf читает все, что может быть вход с терминала (символ или целое число)

Одним из способов вы можете сделать, это проверить возвращаемое заявление scanf ли вход считывания целое или а не целое число.

Вот пример кода

int num; 
    char term; 
    if(scanf("%d%c", &num, &term) != 2 || term != '\n') 
     printf("failure\n"); 
    else 
     printf("valid integer followed by enter key\n"); 

`

эта ссылка может оказаться полезным Check if a value from scanf is a number?

 Смежные вопросы

  • Нет связанных вопросов^_^