2017-02-06 49 views
0

當第一個數據輸入中輸入「exit」等單詞時,需要我的代碼終止。我不知道實現這一點的正確功能或方法。我的數據是正確的,只需要用一個字命令來終止。請任何意見或提示與解釋將不勝感激。當輸入「退出」而不是第一個輸入數據時終止程序

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(void) { 
    double xminA, xmaxA, yminA, ymaxA, xminB, xmaxB, yminB, ymaxB; 
    double xminC, xmaxC, yminC, ymaxC; 
    char end; 
    while(1){ 
     printf("Rectangle A:"); 
     scanf("%lf%lf%lf%lf", &xminA, &yminA, &xmaxA, &ymaxA); 
     printf("Rectangle B:"); 
     scanf("%lf%lf%lf%lf", &xminB, &yminB, &xmaxB, &ymaxB); 

     if(xminA>xmaxB || xminB>xmaxA || yminA>ymaxB || yminB>ymaxA){ 
      printf("No overlapping area\n"); 

     } 
     else if(xminA<=xmaxB || xminB<=xmaxA || yminA<=ymaxB || yminB<=ymaxA){ 
      xminC= fmax(xminA,xminB); 
      xmaxC= fmin(xmaxA, xmaxB); 
      yminC= fmax(yminA, yminB); 
      ymaxC= fmin(ymaxA, ymaxB); 
      printf("Overlap rectangle: (%lf,%lf) (%lf,%lf)\n", xminC, yminC, xmaxC, ymaxC); 
     } 
    } 
    return EXIT_SUCCESS; 
} 
+0

好了,你就必須允許用戶輸入「退出」,而這一切都開始通過檢查scanf' – StoryTeller

+0

的'的返回值目前,如果用戶輸入「退出」的程序顯示「無重疊區域「無限。 –

+0

@KamiKaze:「*'fgets'已棄用*」:什麼?!不,你的意思是'gets()'正確嗎? – alk

回答

2

要做到這一點,你必須承認,所有輸入的文本,那麼你可以使用fgets()讀取輸入的整條生產線,檢查它是否是exit\n,然後如果它不繼續將輸入轉化成你想要的數字,檢查它們是否被成功轉換,如果不是,則採取行動。

char line[256]; 
if (fgets(line, sizeof line, stdin) == NULL) 
    return -1; // Something bad happened 
if (strcmp(line, "exit\n") == 0) 
    return 0; // The user typed `exit' 
if (sscanf(line, "%lf%lf%lf%lf &xminA, &yminA, &xmaxA, &ymaxA) == 4) { 
    // Got the first rectangle, now do the same for the second 
    // rectangle 
} 

因此,大家看到,這應該是一個功能,以便用戶允許用戶鍵入exit第一矩形輸入成功後。

這可以進一步細化,使您的用戶感到舒適和快樂。

而且,由於你不檢查scanf()你的程序的返回值是無法分辨的輸入是否正確(預期4個浮點數),或者如果它失敗了,scanf()返回一個值,你可以如果你閱讀一些文檔,理解它是有意義的。

+0

恐怕我不明白,你能否在我的代碼上添加評論?或者如果有其他方式。 –

+0

有很多方法,這一個簡單和容易。你爲什麼不明白?什麼? –

0
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(void) { 
    double t, xminA, xmaxA, yminA, ymaxA, xminB, xmaxB, yminB, ymaxB; 
    double xminC, xmaxC, yminC, ymaxC; 
while(1){ 
    printf("Rectangle A:"); 
    if (0 == scanf("%lf", &t)){ //<--this if() statement causes the function to terminate at a non-numeric 
     printf("Program completed normally"); 
     break; 
    } 
    t=xminA; 
    scanf("%lf%lf%lf",&yminA, &xmaxA, &ymaxA); 
    printf("Rectangle B:"); 
    scanf("%lf%lf%lf%lf", &xminB, &yminB, &xmaxB, &ymaxB); 

    if(xminA>xmaxB || xminB>xmaxA || yminA>ymaxB || yminB>ymaxA){ 
     printf("No overlapping area\n"); 

    } 
    else if(xminA<=xmaxB || xminB<=xmaxA || yminA<=ymaxB || yminB<=ymaxA){ 
    xminC= fmax(xminA,xminB); 
    xmaxC= fmin(xmaxA, xmaxB); 
    yminC= fmax(yminA, yminB); 
    ymaxC= fmin(ymaxA, ymaxB); 
printf("Overlap rectangle: (%lf,%lf) (%lf,%lf)\n", xminC, yminC, xmaxC, ymaxC); 
    } 
} 
return EXIT_SUCCESS; 
} 
相關問題