请教C语言的一个题目?

题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
我写的程序如下:
#include<stdio.h>
int main(void)
{
char a=176,b=219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);
return 0;
}
问题1:我用的编写环境是VC++6.0企业版的。运行结果如图所示,如何才能显示正确的结果?
问题2:为什么编译的时候会出现警告,退出VC后重新打开编译却没有警告,这是为什么?

问题一解答:

首先,我得说明的是:这应该是个来自dos时代的C程序。

在dos时代,128到255的ascii码并不会以汉字模式显示,而是有独立的字符集表示。在windows时代,128到255的ascii码会以两个一组表示为一个汉字的模式显示,就是你给出的例图那样。

如果希望看到正确的结果,你必须用dos时代的C语言编译器“TurboC2.0”来编译运行,而且必须用 Alt+回车 把屏幕转换成全屏模式,这样你就能看到正确的结果了,如我给出的下图。

问题二解答:

这两个警告是指这里

char a=176,b=219;

如果改成这样

char a=(char)176,b=(char)219;

就没问题了。

之所以产生警告,是因为176和219是整型常量,赋值给字符型有丢失信息之虞,所以提出警告。实际上,这两个数都小于255,是不会丢失信息的。

你问到编译的时候会出现警告,退出VC后重新打开编译却没有警告,这是因为这个bug出现在编译(Compiling)阶段,而第一次编译之后,vc就没有再次执行编译阶段,而是直接进入执行(Execute)阶段,所以这个bug就被忽略了。

如果你希望再次看到这个警告,不要点击Ctrl+F5对应的那个红叹号,点击Ctrl+F7对应的那个编译菜单就可以看到了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-30
#include<stdio.h>
int main(void)
{
char a=65,b=66;//你这里把65这个整形常量赋给了char型变量,所以会警告,还有你的数字太大,超过了1个字节所能表达的范围
printf("%c %c %c %c %c\n",b,a,a,a,b);
printf("%c %c %c %c %c\n",a,b,a,b,a);
printf("%c %c %c %c %c\n",a,a,b,a,a);
printf("%c %c %c %c %c\n",a,b,a,b,a);
printf("%c %c %c %c %c\n",b,a,a,a,b);
return 0;
}
第2个回答  2009-10-30
1, 这个是正常结果, 不知你所谓的"正确的结果"是何物, 或者说你预期出现啥结果
2, 重新打开编译没有警告是因为没有重新编译. 代码, 设置等不变动的话, 一般VC不会给你重新编译, 除非你选择"rebuild". 既然没有重新编译, 自然也就没那些编译产生的警告
第3个回答  2009-10-30
这样正确

#include<stdio.h>
int main(void)
{
char a='176',b='219';
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);
return 0;
}
第4个回答  2009-10-31
问题1.你的值已经超出了范围:0~127
问题2.第一次编译时出现这种错误,只是一种数值类型错误(超出char范围),系统默认为int编译。第二次已经默认过错误了就不再提示错误。
第5个回答  2009-10-31
超过范围0-127时,输出时就成中文了,大于127时最高位为1,即输出的是扩展编码,变成中文了。
相似回答