初始化-C++ char数组不能赋值中文

问题描述

C++ char数组不能赋值中文
#include
using namespace std;
class student
{
public:
char *getname()
{
cout << ""姓名:"";
cin >> name[10]; //为什么输入字母、数字都可以正常运行,输入中文就不行
count++;
return name;
}
void seteng()
{
cout << ""英语:"";
cin >> english;
engtotal += english;
}
void setchi()
{
cout << ""语文:"";
cin >> chinese;
chitotal += chinese;
}
void setmath()
{
cout << ""数学:"";
cin >> math;
mattotal += math;
}
static float getaverage(float x){ return x / count;}
static void show()
{
cout << ""英语总分:"" << engtotal << "" 平均分:"" << getaverage(engtotal)< cout cout }
protected:
char name[10];
static int count;
int chinese;
int math;
int english;
static int engtotal;
static int chitotal;
static int mattotal;
};
int student::count = 0; //类的成员可以这样初始化吗?
int student::engtotal = 0;
int student::chitotal = 0;
int student::mattotal = 0;
class rg :public student
{
public:
void setjava()
{
cout cin >> java;
rgcount++;
javatotal += java;
}
void setweb()
{
cout << ""web:"";
cin >> web;
webtotal += web;
}
static void show()
{
cout << ""java总分:"" < cout }
protected:
static int rgcount;
int java;
int web;
static int javatotal;
static int webtotal;
};
int rg::rgcount = 0;
int rg::javatotal = 0;
int rg::webtotal = 0;
class xa :public student
{
public:
void setwangluo()
{
cout cin >> wangluo;
xacount++;
wangluototal += wangluo;
}
void setanquan()
{
cout << ""安全:"";
cin >> anquan;
anquantotal += anquan;
}
static void show()
{
cout << ""网络总分:"" << wangluototal << ""平均分:"" << (float)wangluototal /xacount << endl;
cout << ""安全总分"" << anquantotal << ""平均分:"" << (float)anquantotal /xacount << endl;
}
protected:
static int xacount;
int wangluo;
int anquan;
static int wangluototal;
static int anquantotal;
};
int xa::xacount = 0;
int xa::wangluototal = 0;
int xa::anquantotal = 0;
int main()
{
int rgnum xanum;
rg rgst[300];
xa xast[300];
cout<< ""输入软件工程专业学生人数( cin >> rgnum;
for (int i = 0; i < rgnum; i++)
{
rgst[i].getname();
rgst[i].seteng();
rgst[i].setchi();
rgst[i].setmath();
rgst[i].setjava();
rgst[i].setweb();
}
cout< cin >> xanum;
for (int n = 0; n < xanum; n++)
{
xast[n].getname();
xast[n].seteng();
xast[n].setchi();
xast[n].setmath();
xast[n].setwangluo();
xast[n].setanquan();
}
student::show();
rg::show();
xa::show();
cout << endl;
return 0;
}

解决方案

name是字符数组,而name[10]是这个数组中第10个元素,即char类型变量,占一个字节,而汉字编码都至少需要两个字节,因此存不下。C++中有一个
wchar_t 类型,即所谓的宽字符,每个字符占两个字节,专门用于非ASII编码的字符表示。其实只要不访问单个字,char类型也可以,只是两个char类型的
字符表示一个汉字,对于整个字符串的表示来说没有影响,也就是说你需要把那个下标10去掉

解决方案二:
name是字符数组,而name[10]是这个数组中第10个元素,即char类型变量,占一个字节,而汉字编码都至少需要两个字节,因此存不下。C++中有一个
wchar_t 类型,即所谓的宽字符,每个字符占两个字节,专门用于非ASII编码的字符表示。其实只要不访问单个字,char类型也可以,只是两个char类型的
字符表示一个汉字,对于整个字符串的表示来说没有影响,也就是说你需要把那个下标10去掉

解决方案三:
因为你要输入的是一个字符串, 字母占1个字节,汉字占2个字节,cin >> name[10]; 意味着你只给了1个字节的空间。 你应该改成cin>>name;(必须是一个指向有足够空间容量的地址) 就可以了。

解决方案四:
使用宽字符,,,,,

时间: 2024-09-10 19:35:28

初始化-C++ char数组不能赋值中文的相关文章

指针-关于char*和char数组的问题

问题描述 关于char*和char数组的问题 我定义了一个struct如下: struct golf{ char fullname[len]; int handicap; }; 同时写了函数void setgolf()来对结构的成员进行操作,函数定义如下: void setgolf(golf & g, const char * name, int hc) { g.fullname=name;//报这个错误:expression must be a modifiable lvalue g.hand

字符串-[c语言]关于 scanf() 和 char数组 的小实验的问题

问题描述 [c语言]关于 scanf() 和 char数组 的小实验的问题 写了三个小的几乎一样的test代码,但是输出却不同,不明白为什么,求大神指点.全部代码如下:#include void sub1(void); int main(){ /*test1*/ sub1(); /*test2 */char w0[2]={'a''a'}; char * pc0 = w0; printf("" w1 = %s""w0); /*wrong*/printf("&

u_char-unsigned char 数组怎么做相等比较

问题描述 unsigned char 数组怎么做相等比较 我需要的是一个相等比较,我有个u_char uc[2]的数组,赋值是uc[0] = 0X0A uc[2] = 0X3C 现在我有个函数要将这个数组传过去,求教如何设定这个参数,另外这个数组如何与0A3C做相等比较 解决方案 uc[0] = 0X0A uc[2] = 0X3C这些不都是元素吗,怎么是数组,另外你要比较什么?举个实例. 解决方案二: BYTE数组要你自己还原成16进制数字,然后比较数字 解决方案三: 传过去可以用指针,数组的首

c语言结构体中指针数组怎样赋值

问题描述 c语言结构体中指针数组怎样赋值 定义一个结构体struct AS{ char *p[1]:}:怎样用gets函数给指针数组赋值呢? 解决方案 看Unix/Linux上的man: Standard C Library Functions gets(3C)NAME gets fgets - get a string from a stream SYNOPSIS #include char *gets(char *s); char *fgets(char *s int n FILE *str

Java中char数组(字符数组)与字符串String类型的转换方法_java

本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法.分享给大家供大家参考,具体如下: 在Java语言编程时,使用"口令字段"jPasswordField组件时,如果要获得密码值,就需要使用该组件的getPassword()方法.jPasswordField的getPassword()方法返回一个char类型的数组,我们经常需要将这个数组转换为String类型,以便进行诸如口令匹配或口令赋值等操作.这时,就需要将char类型的数组进行转换.当然也经常会遇到

有关java二维数组的赋值

问题描述 有关java二维数组的赋值 有关二维数组的赋值 public class HelloWorld { public static void main(String[] args) { // 定义两行三列的二维数组并赋值 String [][] names = new String[2][3]; names = {{"tom","jack","mike"},{"zhangsan","lisi",&qu

c++关于数组指针赋值问题

问题描述 c++关于数组指针赋值问题 这段赋值语句 下面这段语句是错的 void setArc(char start, char end) { int i; for(i=0;i<Vexnum;i++) { if(vex[i].ch == start) { while(vex[i].next) { vex[i] = *vex[i].next; } ArcNode *nNode = new ArcNode; nNode->ch = end; vex[i].next = nNode; } } } 我

数组的赋值只能在方法体内吗?

问题描述 classTest{intarr[]=newint[]{2,4,6};arr[2]=8;//报错}小弟刚学java,还请大大们解惑啊 解决方案 解决方案二:publicclassTest{intarr[]=newint[]{2,4,6};publicstaticvoidmain(String[]args){intarr[]=newint[]{2,4,6};arr[2]=8;//报错}} 类中可以定义类级变量,但不可以对变量进行操作对变量的操作放在方法里面就可以了解决方案三:我知道这样的

字符-如何对一个用char数组存储的计算公式求解

问题描述 如何对一个用char数组存储的计算公式求解 比如一个char数组存放的是(5+8)/3+4.5*2--1 其中4.5是以4 . 5 存放的,-1的存法是 -一个字符,1一个字符 解决方案 这个是编译原理里面的一个基础例子.就是语法分析的过程.很多编译原理的第一个练习题就是这个.通过语法分析实现一个计算器功能.把字符串分解成一个语法树.再递归计算.去网上搜索下计算器的实现代码.很多的. 解决方案二: 4.5 是三个字符吗