首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Linux命令行下的C++程序输入汉字出有关问题,求解

2012-05-09 
Linux命令行下的C++程序输入汉字出问题,求解。Ubuntu10.04,内核3.1.10,g++版本:g++ (Ubuntu 4.4.3-4ubuntu5

Linux命令行下的C++程序输入汉字出问题,求解。
Ubuntu10.04,内核3.1.10,g++版本:g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
我写命令行下的程序,输入中文出错,我写了个测试程序如下:

C/C++ code
#include <iostream>#include <string>#include <cstdio>#include <cstdlib>using namespace std;int main(){    string chinese;    cout<<"输入中文:";    cin>>chinese;    cout<<"你输入的是;"<<chinese<<endl;    return 0;}

用g++ chinese.cpp -o chinese编译后运行,如果输入汉字后没有删除,或者输入的是英文字母及数字,一切正常,如下:
C/C++ code
zym@zym-freedom:~/code$ ./chinese输入中文:abc123你输入的是;abc123zym@zym-freedom:~/code$ ./chinese输入中文:这是汉字你输入的是;这是汉字

但是如果输入的是汉字并且输入以后发现输错了,要删的时侯就出错:
C/C++ code
zym@zym-freedom:~/code$ ./chinese输入中文:这是汉字 你输入的是;这是汉zym@zym-freedom:~/code$ ./chinese输入中文:这是汉字这是汉  你输入的是;这是汉字这是

这里测试了两次,第一次我输完后只按了一下退格,光标退了半格(就是半个汉字),在”字“上,从下面的输出看,”字“是被删了,可是在”输入文字“一行里,它还在。下面一次更明显,我按了2次退格,结果显示似乎是只删了一个字,其实是删了2个字。也就是在命令行下的汉字显示不对,但变量的值还是对的。
查了一下好像要用utf-8编码、wchar_t什么的,可惜我用了编译报错(没有重载<<,>>之类的)。
请教大家该怎么办?谢谢!

[解决办法]
这个是终端的问题,linux下的终端对非ascii的支持不太友好
你可以换一个终端工具试试,比如windows下的putty
[解决办法]
它们应该是自己实现的屏幕管理吧

应该是删除一次,屏幕上是按半角字符处理的,只回退了关个汉字的距离,而实际上因为使用的是utf-8,删除了一个完整的字,导致看到的和程序读到的不一致。

你可以试着修改一下系统的字符集,gbk, utf-8的效果可能不一样。
[解决办法]
C/C++ code
#include <iostream>#include <string>#include <cstdio>#include <cstdlib>#include <locale.h>using namespace std;int main(){    string chinese;    setlocale(LC_ALL,"chs");    cout<<"输入中文:";    cin>>chinese;    cout<<"你输入的是;"<<chinese<<endl;    return 0;}
[解决办法]
这个问题充分说明Linux终端的编写者的水平不如Windows终端cmd的编写者的水平高。(^_^)

热点排行