Linux命令行下的C++程序输入汉字出有关问题,求解
Linux命令行下的C++程序输入汉字出问题,求解。
Ubuntu10.04,内核3.1.10,g++版本:g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
我写命令行下的程序,输入中文出错,我写了个测试程序如下:
用g++ chinese.cpp -o chinese编译后运行,如果输入汉字后没有删除,或者输入的是英文字母及数字,一切正常,如下:
但是如果输入的是汉字并且输入以后发现输错了,要删的时侯就出错:
这里测试了两次,第一次我输完后只按了一下退格,光标退了半格(就是半个汉字),在”字“上,从下面的输出看,”字“是被删了,可是在”输入文字“一行里,它还在。下面一次更明显,我按了2次退格,结果显示似乎是只删了一个字,其实是删了2个字。也就是在命令行下的汉字显示不对,但变量的值还是对的。
查了一下好像要用utf-8编码、wchar_t什么的,可惜我用了编译报错(没有重载<<,>>之类的)。
请教大家该怎么办?谢谢!
------解决方案--------------------
这个是终端的问题,linux下的终端对非ascii的支持不太友好
你可以换一个终端工具试试,比如windows下的putty
------解决方案--------------------
它们应该是自己实现的屏幕管理吧
应该是删除一次,屏幕上是按半角字符处理的,只回退了关个汉字的距离,而实际上因为使用的是utf-8,删除了一个完整的字,导致看到的和程序读到的不一致。
你可以试着修改一下系统的字符集,gbk, utf-8的效果可能不一样。
------解决方案--------------------
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 你输入的是;abc123 zym@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的编写者的水平高。(^_^)