C程序显示没有错误但不显示输出

时间:2016-12-01 05:49:22

标签: c

Roy希望在Facebook上更改自己的个人资料照片。现在Facebook对我们可以上传的图片尺寸有一些限制。 图片的最小尺寸可以是L x L,其中L是正方形边的长度。

现在罗伊有N张不同尺寸的照片。 照片的尺寸表示为W×H 其中W - 照片的宽度和H - 照片的高度

在上传任何照片后,可能会发生以下事件:

  1. 如果任何宽度或高度小于L,系统会提示用户上传另一个。在这种情况下打印“UPLOAD ANOTHER”。
  2. 如果宽度和高度都足够大 (a)如果照片已经是正方形,那么它就被接受了。在这种情况下打印“已接受”。 (b)否则提示用户裁剪它。在这种情况下打印“CROP IT”。
  3. 代码:

    #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 */
    }
    

4 个答案:

答案 0 :(得分: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 )

答案 1 :(得分: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");
}

答案 2 :(得分:-1)

它将显示输出,但程序运行速度比您预期的要快。它会在显示输出后立即关闭。它不会等到你读它。 因此,在打印完所有输出(在getch();语句之前)后,使用conio.h中声明的return按键作为输入。它将使程序等待用户退出前按一下键。

答案 3 :(得分:-1)

这是截图。它在我身上运行没有错误。

注意:这不是答案。但这只是提供图片示例的唯一方法:)无需提升

enter image description here

也许您只需要在代码末尾放置getchar();,然后再返回让屏幕暂停一段时间。它只是快速退出