2016-12-01 163 views
0

Roy想改變他在Facebook上的個人資料圖片。現在Facebook對我們可以上傳的圖片的尺寸有一些限制。 圖片的最小尺寸可以是L×L,其中L是正方形邊長。C程序顯示沒有錯誤,但不顯示輸出

現在羅伊有不同尺寸的N張照片。相片的 尺寸被表示爲寬x高 其中W - 寬度的照片和H - 光

當任何相片上傳的高度可能會發生以下事件:

  1. 如果任何寬度或高度小於L,則系統會提示用戶上傳另一個。在這種情況下打印「UPLOAD ANOTHER」。
  2. 如果寬度和高度都足夠大,並且(a)如果照片已經是方形的,則它被接受。在這種情況下打印「接受」。 (b)其他用戶被提示修剪它。在這種情況下打印「CROP IT」。

代碼:

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

int main (void) 
{ 
    int len; /* len is the length of the side of square */ 
    scanf("%d",&len); 

    int test; 
    scanf("%d",&test); 

    while(test--) 
    { 
     int w,h; 
     /* w - width of the photo and h- Height of the photo */ 

     scanf("%d %d",&w,&h); 

     if(w==len && h==len) 
     { 
      printf("ACCEPTED\n"); 
     } 
     else if(w>len || w==len && h>len || h==len) 
     { 
      printf("CROP IT\n"); 
     } 
     else 
     { 
      printf("UPLOAD ANOTHER\n");/* print */ 
     } 
    } 

    return 0;/* success */ 
} 
+0

天哪,請IDENT充分代碼。它會讓我們和你的事情變得更加有趣。 –

+0

請提供輸入值。當你說「不顯示輸出」時,你的意思是根本沒有輸出,或者它沒有顯示你期望的輸出?最後,如果你學會有效地調試 - 特別是學習使用調試器,最好不要求別人爲你調試,這對你更有好處。 – kaylum

+0

它正在跑步。只需在返回前將getch()放在最後 – jace

回答

0

如果你的問題是,你所看到的任何輸出,這是因爲它在IDE中運行和輸出窗口關閉前,你可以看到很可能它。明智地使用getchar()main()的末尾可能是您需要解決這個問題的所有事情,但我可能更願意僅從命令行運行它。

在任何情況下,由於&&||更高的優先級,你的第二個條件是有效:

else if ((w > len) || (w == len && h > len) || (h == len)) 

,這顯然是錯誤的,因爲其與寬度比必要將導致請求更多照片用於修剪不管的其他分條件。

您最好遵循文本規範,以便更加輕鬆地進行檢查。這將產生類似的信息(與略微簡化的規格仍然符合原意):

  • 如果任何寬度或高度小於L,系統將提示用戶上傳另一個。
  • 否則兩者都足夠大。如果照片已經是方形的,那麼它就被接受了。
  • 否則會提示用戶裁剪它。

操作的代碼是一個簡單得多:

if ((w < len) || (h < len)) { 
    puts ("UPLOAD ANOTHER"); 
} else if (h == w) { // Both large enough otherwise previous 
    puts ("ACCEPTED"); // condition would have been true. 
} else { 
    puts ("CROP IT"); 
} 
-1

它會顯示輸出,但程序運行速度比你期望的那樣。顯示輸出後,它將立即關閉。它不會等到你閱讀它。 所以使用conio.h宣佈getch();得到一個按鍵輸入打印完所有的輸出(return語句之前之後,它會使得程序等待用戶退出之前按任意鍵。

+0

C中既沒有'conio.h'也沒有'getch()',儘管印度教育機構傾向於繼續教人們使用死亡技術:-) – paxdiablo

-1

這裏是截圖它是沒有錯誤上運行我

注意:這不是一個答案,但這個只是給畫面例子:)沒有必要了

enter image description here

的唯一途徑。

也許你只需要在代碼的末尾放置getchar();,然後再返回屏幕暫停一段時間。它只是退出速度非常快

0

由於operator precedence

else if(w>len || w==len && h>len || h==len) 

等同於:

else if(w>len || (w==len && h>len) || h==len) 

你需要使用的是:

else if((w>len || w==len) && (h>len || h==len) && (w == h)) 

可以簡化到:

else if(w >= len && h >= len && w == h) 

可以進一步簡化爲:

else if(w >= len && w == h) 
+0

還有一個,不管是什麼......它如果有的話將會提供輸出。 – jace

+1

@jace,我懷疑沒有輸出。我認爲OP沒有得到他們期望的輸出。 –

+1

或者將其進一步簡化爲'else if(w> = len && w == h)',或者由於前一個檢查已經*已經建立,所以'h'和'w'足夠大,否則if(w = = h)':-) – paxdiablo