引言C语言作为一种历史悠久且功能强大的编程语言,拥有庞大的用户群体。然而,随着技术的发展,一些看似简单的C语言程序却隐藏着复杂的逻辑和挑战。本文将深入探讨一些C语言中的“Contr”之谜,帮助读者更好...
C语言作为一种历史悠久且功能强大的编程语言,拥有庞大的用户群体。然而,随着技术的发展,一些看似简单的C语言程序却隐藏着复杂的逻辑和挑战。本文将深入探讨一些C语言中的“Contr”之谜,帮助读者更好地理解编程的奥秘。
以下程序为何不会输出”hello-std-out”?
#include
int main()
{ while (1) { fprintf(stdout, "hello-std-out"); fprintf(stderr, "hello-std-err"); sleep(1); } return 0;
} stdout和stderr是不同的设备描述符。stdout是块设备,stderr不是。对于块设备,只有在以下情况下才会被输入:遇到回车;缓冲区满;flush被调用。而stderr则不会。因此,即使程序运行,也不会输出”hello-std-out”。
以下程序会编译出错,为什么?
#include
int main()
{ int a = 1,2; printf("a : %d\n",a); return 0;
} 这个程序会得到编译出错(语法出错)。逗号表达式是没错,但在初始化和变量声明时,逗号并不是逗号表达式的意义。正确的做法是使用括号,如下所示:
#include
int main()
{ int a = (1,2); printf("a : %d\n",a); return 0;
} 以下程序会有什么样的输出?
#include
int main()
{ int i = 0; for(i = 0; i < 5; i++) { printf("%d ", i); } return 0;
} 程序的输出将是:
0 1 2 3 4在for循环中,变量i的初始值为0,循环条件是i < 5,每次循环后i的值递增1。因此,循环会执行5次,打印出0到4的数字。
通过解决这些C语言中的“Contr”之谜,我们可以更深入地理解C语言的特性和编程逻辑。掌握这些知识,将有助于我们在未来的编程实践中更加得心应手。