C++中"cout<<' '"与cout<<' '<<' '结果为什么不同

输出的是一个九九乘法表#include"iostream.h"#include"iomanip.h"intmain(){inti,j;for(i=1;i<=9;i++){... 输出的是一个九九乘法表
#include"iostream.h"
#include"iomanip.h"
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
cout<<j<<'*'<<i<<'='<<setw(2)<<i*j<<' '<<' ';/*如果此句换成cout<<i<<'*'<<j<<'='<<i*j<<' '则输出结果有问题,为什么呢?*/
}
cout<<endl;
}
return 0;
}
额~~~我就是因为刚才编译后运行出来结果每个乘法结果后面都多了个8224,不过我是vista的,有哪位高手再帮忙看看
展开
 我来答
不知详解
2009-08-16 · 知道合伙人软件行家
不知详解
知道合伙人软件行家
采纳数:609 获赞数:2252
自学计算机。

向TA提问 私信TA
展开全部
问题在于最后一个' '
你应该写成" "

cout<<i<<'*'<<j<<'='<<i*j<<" ";
对于单引号''的返回值一般来说它和字符的asc值严格等价,但是这个值到底用char还是int保存和你是否正确使用单引号有关
对于里面是一个字符就返回char对于里面有很多字符就返回int
你可以通过重载函数测试
#include <stdlib.h>
void fun(int k){
printf("int\n");}
void fun(char k){
printf("char\n");}
int main()
{
fun(' ');//一个空格
fun(' '); //多个空格
system("pause");
return 0;
}
--------
<<对于的重载如果传入的是char类型就会输出字符
如果传入的是int类型就会输出数字
你在输出的最后使用了' '里面扩住了2个空格那么返回值就是int类型
所以输出的是很多8224
单引号返回int类型的时候
是连续的将字符的asc值从低字节到高字节置入int类型的内存区域,有的编译器会在单引号内输入超过4个字符时会报错因为int通常是4字节的,另一些不报错,但有warning.
也就是说单引号内扩住了两个空格字符
int类型的内存格式将是如下
高字节\0 \0 \x20 \x20低字节
转换成十进制就是8224.
详情请看http://blog.csdn.net/qiyuan2009/archive/2009/04/30/4140163.aspx
最注意的一点就是对于这种情况c和c++的处理方式不一样
nju_westlife
2009-08-16 · TA获得超过263个赞
知道答主
回答量:93
采纳率:0%
帮助的人:0
展开全部
格式问题而已。setw(2)设置了宽度,如果不设置,可能造成输出混淆
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lauey
2009-08-16 · TA获得超过2366个赞
知道小有建树答主
回答量:1138
采纳率:0%
帮助的人:908万
展开全部
问题是没有的,只不过格式是看着不舒服一点的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
c0806com
2009-08-16
知道答主
回答量:18
采纳率:0%
帮助的人:8.6万
展开全部
举个例子,a是一个数值(比如1)
cout<<"a"<<endl (显示a)
cout<<a<<endl (显示1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式