大虾,帮我啊。。。输出ASCII码乱码!!!

软件和网站开发以及相关技术探讨
回复
cnoolon
帖子: 31
注册时间: 2007-03-19 16:44

大虾,帮我啊。。。输出ASCII码乱码!!!

#1

帖子 cnoolon » 2007-05-08 12:56

这是我写的程序:
#include <iostream>
#define DESTSIZE 52
#define CARDSIZE 13
#define SUITSIZE 4

using namespace std;

class Card{
private:
int suit;
int face;
public:
Card() {}
~Card() {}

void setSuit(int);
void setFace(int);
int getSuit();
int getFace();
void setCard(int mySuit , int myFace);
void showCard(int mySuit , int myFace);
};

void Card::setSuit(int mySuit) {
suit = mySuit;
}

void Card::setFace(int myFace) {
face = myFace;
}

int Card::getSuit() {
return suit;
}

int Card::getFace() {
return face;
}

void Card::setCard(int mySuit , int myFace) {
setSuit(mySuit);
setFace(myFace);
}

void Card::showCard(int mySuit , int myFace) {
switch(mySuit) {
case 1: cout << '\003'; break;
case 2: cout << '\004'; break;
case 3: cout << "\005"; break;
case 4: cout << "\006"; break;
}
switch(myFace) {
case 1: cout << 'A' << '\t'; break;
case 11: cout << 'J' << '\t'; break;
case 12: cout << 'Q' << '\t'; break;
case 13: cout << 'K' << '\t'; break;
default: cout << myFace << '\t'; break;
}
}

class Dest{
private:
Card cards[DESTSIZE];
public:
Dest() {}
~Dest() {}

void setDest();
void showDest();
};
void Dest::setDest() {
for(int m = 1 ; m <= SUITSIZE ; m++)
for(int n = 1 ; n <= CARDSIZE ; n++)
cards[n].setCard(m , n);
}
void Dest::showDest() {
for(int m = 1 ; m <= SUITSIZE ; m++) {
for(int n = 1 ; n <= CARDSIZE ; n++) {
cards[n].showCard(m , n);
}
}
}


int main(void) {
Dest dest;
dest.setDest();
dest.showDest();
return 0;
}

在XP下一切正常,可是在7。04下无法显示的扑克牌的花色是乱码。。。
望大虾指点,上次望在解决XMMS乱码时做了sudo cp /etc/gtk/gtkrc.zh_CN /etc/gtk/gtkrc.zh_CN.utf8
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2007-05-08 13:15

enconv -e GBK xxxx.c试试
● 鸣学
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
联系:

#3

帖子 dbzhang800 » 2007-05-08 13:48

感觉ASCII在哪种编码下都没问题的
cnoolon
帖子: 31
注册时间: 2007-03-19 16:44

#4

帖子 cnoolon » 2007-05-08 15:01

比如说这句:cout<<'\003'
从他就显示的是乱码,在ECLIPSE下也是这样的
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#5

帖子 BigSnake.NET » 2007-05-08 19:26

那些都是控制字符...win下出方块什么的都是win自定的做法
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
cnoolon
帖子: 31
注册时间: 2007-03-19 16:44

#6

帖子 cnoolon » 2007-05-08 20:34

BigSnake.NET 写了:那些都是控制字符...win下出方块什么的都是win自定的做法
LS可能误解了,我是查过ASCII表的,里面就是这样的。。。
希望有朋友能帮忙,而且有时用SCIM他的选项里也有这样的乱码。。。
antonym55
帖子: 353
注册时间: 2007-04-03 9:52
联系:

#7

帖子 antonym55 » 2007-05-08 23:53

cnoolon 写了:
BigSnake.NET 写了:那些都是控制字符...win下出方块什么的都是win自定的做法
LS可能误解了,我是查过ASCII表的,里面就是这样的。。。
希望有朋友能帮忙,而且有时用SCIM他的选项里也有这样的乱码。。。
他没有说错

\003 是控制字符ETX (end of text),属于不可显示字符,显示乱码是很正常的

可以用下面这个函数判定是否为可以打印字符

代码: 全选

  #include <ctype.h>
  int isprint( int ch );
你在书上看到的ETX只是他的名称而以
antonym55
帖子: 353
注册时间: 2007-04-03 9:52
联系:

#8

帖子 antonym55 » 2007-05-09 0:10

顺便贴个ascii表
附件
ASCII Table
ASCII Table
cnoolon
帖子: 31
注册时间: 2007-03-19 16:44

#9

帖子 cnoolon » 2007-05-09 18:01

首先先要感谢朋友们的回复,不过楼上的表好像是是不全的,没有把所以的东西都列出来。我在网上查到的表,'\003'他的符号就是扑克牌中的红星,当然他也表示LS这位朋友所指的意识。而且这个程序在XP下是正常的,也就是能显示出来,就是在UBUNTU在不行。
antonym55
帖子: 353
注册时间: 2007-04-03 9:52
联系:

#10

帖子 antonym55 » 2007-05-09 21:39

cnoolon 写了:首先先要感谢朋友们的回复,不过楼上的表好像是是不全的,没有把所以的东西都列出来。我在网上查到的表,'\003'他的符号就是扑克牌中的红星,当然他也表示LS这位朋友所指的意识。而且这个程序在XP下是正常的,也就是能显示出来,就是在UBUNTU在不行。
2^8 = 256个,楼主所说不全是指没有把IBM定义的128~255列出还是别的什么东东?

0x00~0x1F 是控制字符,如果强制打印non-printable字符,

显示或者不显示,显示什么内容由OS自己决定, 至于0x03

windows/MS-Dos中把它显示为扑克牌中的红心,只是ms的一种方案,(貌似"BigSnake.NET"已经说过)

Unix/Linux或者其它的OS中显示为其它的东西或者不显示,也不是不可以,

只要它表示end of text 就OK了.
回复