1. 程式人生 > >[Warning] multi-character character constant [-Wmultichar]——字元+空格導致輸出錯誤

[Warning] multi-character character constant [-Wmultichar]——字元+空格導致輸出錯誤

在使用Devc++做題的時候遇到了如下的【警告】:

[警告]多字元字元常量〔Wmultichar〕

程式碼如下:

#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