查看完整版本: 關於char的問題
頁: [1]

在那裡 發表於 2016-6-12 04:32 PM

關於char的問題

本帖最後由 在那裡 於 2016-6-12 04:55 PM 編輯

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    char ch='█';
    char ch1[]="█";

    cout << ch << endl;
    cout << ch1 << endl;

    system("pause");
    return 0;
}

輸出結果
i




做了一些實驗後我無法理解,究竟為什麼 ch1[]="█" 就可以正常顯示,而 ch='█' 就不行呢?明明兩者的儲存範圍都一樣
但一個能正常運作一個卻不行,讓我百思不得其解……why?

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

ren1244 發表於 2016-6-12 05:51 PM

char只有 1 byte ,最多只能表示出255種不同的文字
而我們在螢幕上看到的文字遠遠超過255種
這是因為我們採用了多個 byte 來表示一個字
例如你要的「█」,有可能是 E2 96 88 (UTF-8編碼) 或是 A2 69 (BIG5編碼)
所以對C語言來說,「█」是一個字串,而不是字元

在那裡 發表於 2016-6-12 06:00 PM

ren1244 發表於 2016-6-12 05:51 PM static/image/common/back.gif
char只有 1 byte ,最多只能表示出255種不同的文字
而我們在螢幕上看到的文字遠遠超過255種
這是因為我們採 ...

那麼我該如何把一個█
寫入一個 char陣列呢?

ren1244 發表於 2016-6-13 10:50 PM

我猜會用到「█」也許是用來做顯示結果的,可能是迷宮或是踩地雷之類的程式?
我寫一個範例,遇到陣列是1的位置,會顯示█,如果是0,則顯示全形空白。#include <stdio.h>
#include <string.h>
char* show(char *buf,int *A,int m,int n) //mxn 矩陣
{
        int i,j;
        const char *str[]={" ","█"};
        buf='\0';
        for(i=0;i<m;++i)
        {
                for(j=0;j<n;++j)
                        strcat(buf,str?1:0]); //用strcat來處理
                strcat(buf,"\n");
        }
        return buf;
}

int main()
{
        int A={{1,1,0},{0,1,0}};
        char buf;
        puts(show(buf,A,2,3));
        return 0;
}...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

在那裡 發表於 2016-6-14 04:07 PM

是要拿來做顯示結果用的沒錯,現在正嘗試寫俄羅斯方塊,打算拿這來做方塊用。

關於樓上這程式有些地方我看不大懂
A 他指向的到底是哪裡? 查看位置測試了一下後它的位置跟 A六個陣列位置只有一個相同。

還有我的顯示出來變成亂碼了......
而頂樓的那個程式顯示出來也變成了亂碼......?原本能正常顯示的。
但不知道為什麼這個貪吃蛇程式(某位大大寫的)卻能正常顯示?我也看不大懂它到底如何將"█"寫入char陣列裡......

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

ren1244 發表於 2016-6-16 04:00 PM

.c或.cpp檔案是文字檔,所以檔案有檔案的編碼。
而程式執行時,系統也有它預設的編碼。
當檔案的編碼與系統編碼相同時,它才能正常辨識出符號。
所以如果原本可以,後來不行,那麼就檢查看看你檔案儲存的編碼是Big5還是UTF8。
試試看哪一種可以符合你所期待的。
頁: [1]