在使用Devc++做题的时候遇到了如下的【警告】:
[警告]多字符字符常量〔Wmultichar〕
(题目是http://codeup.cn/problem.php?cid=100000583&pid=1)
代码如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
int fib(int n){
if(n==1||n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;++i){
int m;
cin>>m;
for(int j=1;j<=m;j++){
for(int k=1;k<=2*(m-j);k++){
cout<<' ';
}
if(j==1){
cout<<'0'<<endl;
}
else{
//cout<<'0'<<' ';
cout<<'0 ';
for(int k=1;k<=(2*j-2);k++){
cout<<fib(k)<<' ';
}
cout<<endl;
}
}
}
return 0;
}
当前的运行结果是:
代码第26行(正确的,被注释掉了cout<<'0'<<' ';)和第27行(有警告的cout<<'0 ';)
正确的结果应该是:
很奇怪的现象,为什么在0前面有多余的一段数字呢?
于是我改了改第27行的代码,分别是:cout<<'1 '; cout<<'2 ';
结果如下:
而12832-12576==12576-12320==256
所以目前得出结论:
cout<<'0 '和cout<<'1 '和cout<<'2 '这几条语句执行的时候,输出时把数字和空格看成一体(正如警告内容:[警告]多字符字符常量〔Wmultichar〕),这可能是cout的弊端吧,或者说和printf的区别吧
目前想到的并且测试通过的解决办法:
1.cout<<'0'<<' '; //先输出'0'再输出空格
2.printf("0 "); //使用printf