2016-12-05 80 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 return語句讀取輸入是否是整數或不是一個整數。

下面是示例代碼

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?