[Warning] multi-character character constant [-Wmultichar]——字元+空格導致輸出錯誤
阿新 • • 發佈:2018-12-13
在使用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