如何输出以下代码:DoSecond

时间:2017-06-06 20:37:22

标签: c++ c switch-statement printf

#include <stdio.h>
    int main()
    {
        switch (printf("Do"))
        {
        case 1:
            printf("First\n");
            break;
        case 2:
            printf("Second\n");
            break;
        default:
            printf("Default\n");
            break;
        }
    }

有人可以解释上面的代码是如何工作的吗? switch如何跳转到case2标签?

2 个答案:

答案 0 :(得分:4)

检查printf() printf()。它提到

  

返回值

     

成功返回后,这些函数返回打印的字符数(不包括用于结束输出到字符串的空字节)。

这里,switch调用的返回值用作控制表达式值的"Do"语句。因此,在这种情况下,为了打印字符串2,它返回2.这与案例标签newline匹配。

然后,标准输出是行缓冲的。在第一个printf()之后,您没有刷新指令或printf(),因此下一个newline调用的连续输出并置到输出缓冲区并且最后,在遇到"DoSecond"后,它会一起刷新到控制台/终端,显示int main()

尽管如此,int main(void)至少应该 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("text/csv"); //XML file only intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult(Intent.createChooser(intent, "Select"), 100); } catch (android.content.ActivityNotFoundException ex) { // Potentially direct the user to the Market with a Dialog Toast.makeText(this, "Drive Not Found", Toast.LENGTH_SHORT).show(); } 符合托管环境的标准。

答案 1 :(得分:2)

printf的返回值为

  

成功时写入的字符数,如果发生错误则写入负值。

因此"Do"有2个字符,因此切换为case 2: