2015-10-30 94 views
0

好吧,這可能很簡單,我很可能會被你罵,但我是新來的c,並試圖儘可能地學習。我有這個問題,我解決了,而且邏輯工作相當不錯。但是每當有錯誤的輸入,它顯示屏幕上的消息,並加上條件是不正確的。因此,無論何時應該有一個無效的輸入消息,我也得到NE - 至極就是它會打印出來,如果病情心不是true.This是代碼:printf中的輸出錯誤

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

int main() { 
    int a, b; 
    scanf("%d %d", &a, &b); 
    if(a <= 0 || b <= 0) { 
     printf("Invalid input"); 
    } else { 
     if(a < b) { 
      int tmp = a; 
      a = b; 
      b = tmp; 
     } 
    } 
    a/=10; 
    int c1,c2; 
    while (a!=0 && b!=0){ 
     c1 = a%10; 
     c2 = b%10; 
     a /= 100; 
     b /= 10; 
    } 
    if (c1 == c2) 
     printf("PAREN\n"); 
    else 
     printf ("NE\n"); 
    return 0; 
} 
+0

爲什麼''printf(「Invalid input」)之後'返回1';'?這樣它就不會打印'NE'。 – Linus

+0

我不是100%確定有效輸入是什麼,爲什麼產生的輸出是PAREN或NE? – Mike

+0

爲了表明問題已解決,您應該點擊對您有幫助的答案左側的複選標記。 – user3386109

回答

3

它,因爲沒有什麼那阻止它這樣做:

如果你只是希望終止只要條件成立,程序只需return

if(a <= 0 || b <= 0) { 
printf("Invalid input"); 
return 1; 
} 

替代方案:只需在else子句下添加其餘代碼即可。

+0

您可能應該返回一個非零值,因爲它是失敗的。 – Linus

+0

@wrangler非常感謝!那很有效。還有什麼更重要的是我學到了新的東西:)。 – LuanL

0

首先,讓我們重新格式化代碼,以便更容易看到控制流:

int main() 
{ 
    int a, b; 
    scanf("%d %d", &a, &b); 
    if(a <= 0 || b <= 0) { 
     printf("Invalid input"); 
    } else { 
     if(a < b) { 
      int tmp = a; 
      a = b; 
      b = tmp; 
     } 
    } 
    a/=10; 
    int c1,c2; 
    while (a!=0 && b!=0){ 
     c1 = a%10; 
     c2 = b%10; 
     a /= 100; 
     b /= 10; 
    } 
    if (c1 == c2) 
     printf("PAREN\n"); 
    else 
     printf ("NE\n"); 
    return 0; 
} 

這裏發生的事情是,當它打印「無效輸入」程序繼續運行。從這裏可以打印「PAREN」或「NE」。

我懷疑你實際想要做的是在你確定輸入無效後停止處理。

在您的代碼中執行此操作的最簡單方法是添加「return 0;」緊跟在「printf(」無效輸入「)之後;」線。

1

要麼你增加一個return聲明在其他的答案建議,或者您包括第一else條款中應該發生的有效輸入(換句話說,一切,只是移動第一else條款的右括號,就在你的main函數的大括號之前)。

+0

你不需要用「解決」提到編輯問題。只要接受最能解決您問題的答案即可。 – fpierrat

+0

我看到你編輯了你的問題,並刪除了你的「解決」提及......但你還沒有接受一個答案來關閉這個問題。只需點擊左側的「打勾」,即可選擇您決定接受的答案。 – fpierrat