目录
1、下面的程序并不见得会输出 HelloWorld,你知道为什么吗?
2、下面的程序看起来是正常的,使用了一个逗号表达式来做初始化。可惜这段程序是有问题的。你知道为什么呢?
9、在定义数组时,将定义的“元素个数”误认为是可使的最大下标值
13、请问下面的程序输出什么?(假设:输入 Hello, World)
序
青春如梦,岁月如花,流水似年,稍纵即逝。
嗨,这里是狐狸~~
今天是2022年的1月12日,距离过年还有18天,时间过得飞快,过了腊八就是年,学生们大都已经放假了吧,最近听了一句话,都说现在年越来越没有年味了,其实不然,只是快乐的人不再是你们了。
今天给大家来点不一样的,C语言的谜题库,一些迷惑性大的错题给大家做一个总结,应该会有大家常常放错的地方,希望看完之后,大家至少对于这些问题不会再犯错。
15个C语言的迷题
1、下面的程序并不见得会输出 HelloWorld,你知道为什么吗?
#include
#include
int main()
{
while(1)
{
fprintf(stdout,"HelloWorld");
fprintf(stderr,"HelloWorld");
sleep(1);
}
return 0;
}
参考答案:stdout和stderr是不是同设备描述符。stdout是块设备,stderr则不是。对于块设备,只有当下面几种情况下才会被输入,
1)遇到回车
2)缓冲区满
3)flush被调用。而stderr则不会。
2、下面的程序看起来是正常的,使用了一个逗号表达式来做初始化。可惜这段程序是有问题的。你知道为什么呢?
#include
int main()
{
int a = 1,2;
printf("a : %d\n",a);
return 0;
}
参考答案:这个程序会得到编译出错(语法出错),逗号表达式是没错,可是在初始化和变量声明时,逗号并不是逗号表达式的意义。这点要区分,要修改上面这个程序,你需要加上括号: int a = (1,2);
3、下面的程序会有什么样的输出呢?
#include
int main()
{
int i=43;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}
参考答案:程序会输出4321,你知道为什么吗?要知道为什么,你需要知道printf的返回值是什么。printf返回值是输出的字符个数。
3、根据考试成绩的等级打印出百分制数段。
switch(grade)
{ case 'A':printf("85~100\n");
case 'B':printf("70~84\n");
case 'C':printf("60~69\n");
case 'D':printf("<60\n");
default:printf("error\n");
参考答案:由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如