2016-01-23 61 views
1

我的程序中有錯誤的輸入問題。它讀取座標並根據數組中的座標計算最大長度。它應該讀取直到EOF。正確的座標格式是[5,10]。問題是,當我寫例如「asdf」。然後我得到4x不正確的輸入,我只需要一次。有人能幫助我嗎?先謝謝你。不正確的輸入警告來了不止一次

while ((c1=(scanf(" %c %lf %c %lf %c", &f, &cx, &g, &cy, &h))) != EOF){ 
if (c1 != 5 || h != ']' || g != ',' || f != '['){ 
     printf("Incorrect input. \n"); 
     continue; 
    } 


    for (int i = 0; i < pocet; i++) { 
     u = polex[i] - cx; 
     v = poley[i] - cy; 

     result = sqrt((u*u) + (v*v)); 
     if (result>max){ 
      max = result; 
     } 

    } 
    printf("Max: %g\n", max); 
    max = 0; 
} 
+0

通過使用int c清除無效輸入上的stdin; while((c = getchar())!='\ n');' –

+0

謝謝,它可以工作,但EOF(CTRL + D)不會結束程序。 –

回答

5

如果scanf不讀取所有格式(即它在你的情況下返回小於5),那麼你會不同步爲scanf下一個電話將嘗試從最後一個離開的地方閱讀關閉。

我建議你先用fgets來讀取整行,然後用sscanf來解析輸入。即像

while (fgets(buffer, sizeof(buffer), stdin) != NULL) 
{ 
    c1 = sscanf(buffer, ...); 
    ... 
}