C语言问题 求解 字符串输出中文
#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>structsanguo{c...
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
struct sanguo
{
char * country; //国家
char * name; //名字
int * force; //武力
int * Intelligence; //智力
int len;
int cnt;
};
void init_arr(struct sanguo *pArr, int length);
void show_arr(struct sanguo *pArr);
bool is_empty(struct sanguo *pArr);
bool append_arr(struct sanguo *pArr, char val1, char val2, int val3, int val4);
int main(void)
{
struct sanguo arr;
init_arr(&arr, 50); //创建一个人物基本信息的数组
show_arr(&arr);
append_arr(&arr, '哈', 'z', 225, 200);
show_arr(&arr);
return 0;
}
void init_arr(struct sanguo *pArr, int length)
{
pArr->country = (char*)malloc(sizeof(char)*length);
pArr->name = (char*)malloc(sizeof(char)*length);
pArr->force = (int*)malloc(sizeof(int)*length);
pArr->Intelligence = (int*)malloc(sizeof(int)*length);
if ((NULL == pArr->country)||(NULL == pArr->name)||(NULL == pArr->force)||(NULL == pArr->Intelligence))
{
printf("动态内存分配失败\n");
exit(-1);
}
//设定 数组的元素个数为0 因为目前没有添加 长度 为MAIN函数中设定
else
{
pArr->cnt = 0;
pArr->len = length;
}
return ;
}
void show_arr(struct sanguo *pArr)
{
if (is_empty(pArr))
{
printf("数组为空\n");
}
else
{
for(int i=0; i<pArr->cnt; ++i)
{
printf("国家: %c\0", pArr->country[i]);
printf("姓名: %c\0", pArr->name[i]);
printf("武力值: %d", pArr->force[i]);
printf("智力值: %d", pArr->Intelligence[i]);
printf("\n");
}
}
}
bool append_arr(struct sanguo *pArr, char val1, char val2, int val3, int val4)
{
if (is_full(pArr))
return false;
else
{
pArr->country[pArr->cnt] /*此处一定要有一个pArr->cnt的下标*/ = val1;
pArr->name[pArr->cnt] = val2;
pArr->force[pArr->cnt] = val3;
pArr->Intelligence[pArr->cnt] = val4;
pArr->cnt++;
return true;
}
}
字数打不下 我把几个不重要的函数去掉了 请忽略这个问题
我只想知道 怎么输出中文啊 !!
输出结果是:
数组为空
国家: ;彰? z武力值: 225智力值: 200 展开
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
struct sanguo
{
char * country; //国家
char * name; //名字
int * force; //武力
int * Intelligence; //智力
int len;
int cnt;
};
void init_arr(struct sanguo *pArr, int length);
void show_arr(struct sanguo *pArr);
bool is_empty(struct sanguo *pArr);
bool append_arr(struct sanguo *pArr, char val1, char val2, int val3, int val4);
int main(void)
{
struct sanguo arr;
init_arr(&arr, 50); //创建一个人物基本信息的数组
show_arr(&arr);
append_arr(&arr, '哈', 'z', 225, 200);
show_arr(&arr);
return 0;
}
void init_arr(struct sanguo *pArr, int length)
{
pArr->country = (char*)malloc(sizeof(char)*length);
pArr->name = (char*)malloc(sizeof(char)*length);
pArr->force = (int*)malloc(sizeof(int)*length);
pArr->Intelligence = (int*)malloc(sizeof(int)*length);
if ((NULL == pArr->country)||(NULL == pArr->name)||(NULL == pArr->force)||(NULL == pArr->Intelligence))
{
printf("动态内存分配失败\n");
exit(-1);
}
//设定 数组的元素个数为0 因为目前没有添加 长度 为MAIN函数中设定
else
{
pArr->cnt = 0;
pArr->len = length;
}
return ;
}
void show_arr(struct sanguo *pArr)
{
if (is_empty(pArr))
{
printf("数组为空\n");
}
else
{
for(int i=0; i<pArr->cnt; ++i)
{
printf("国家: %c\0", pArr->country[i]);
printf("姓名: %c\0", pArr->name[i]);
printf("武力值: %d", pArr->force[i]);
printf("智力值: %d", pArr->Intelligence[i]);
printf("\n");
}
}
}
bool append_arr(struct sanguo *pArr, char val1, char val2, int val3, int val4)
{
if (is_full(pArr))
return false;
else
{
pArr->country[pArr->cnt] /*此处一定要有一个pArr->cnt的下标*/ = val1;
pArr->name[pArr->cnt] = val2;
pArr->force[pArr->cnt] = val3;
pArr->Intelligence[pArr->cnt] = val4;
pArr->cnt++;
return true;
}
}
字数打不下 我把几个不重要的函数去掉了 请忽略这个问题
我只想知道 怎么输出中文啊 !!
输出结果是:
数组为空
国家: ;彰? z武力值: 225智力值: 200 展开
2个回答
展开全部
struct sanguo 实际上在维护一个结构体数组,这一点从show_arr函数看起来最明显。
其中int len; //这记录着当前struct sanguo能存放的最大数量int cnt; //这用于控制结构体数组的长度
其余的char * country; //国家char * name;//名字int * force;//武力int * Intelligence;//智力
用数组记录了每个元素结构中的成员。即: country[0], name[0], force[0], Intelligence[0]为第一个结构体的内容,这样看来country[0]和name[0]的类型为char,问题在于单个的char无法记录中文,因为每个汉字占两个char。如果要记录多个字符需要char *。
不讨论这个设计是否合理(至少很容易导致本问题出现),简单的修改一下是可以记录中文的,代码如下:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
struct sanguo
{
char ** country; // 国家
char ** name; // 名字
int * force; // 武力
int * Intelligence; // 智力
int len;
int cnt;
};
void init_arr(struct sanguo *pArr, int length);
void show_arr(struct sanguo *pArr);
bool append_arr(struct sanguo *pArr, const char * val1, const char * val2, int val3, int val4);
int main(void)
{
struct sanguo arr;
init_arr(&arr, 50); // 创建一个人物基本信息的数组
show_arr(&arr);
append_arr(&arr, "哈", "z", 225, 200);
show_arr(&arr);
return 0;
}
void init_arr(struct sanguo *pArr, int length)
{
pArr->country = (char **)malloc(sizeof(char *)*length);
pArr->name = (char**)malloc(sizeof(char *)*length);
pArr->force = (int*)malloc(sizeof(int)*length);
pArr->Intelligence = (int*)malloc(sizeof(int)*length);
if ((NULL == pArr->country)||(NULL == pArr->name)||(NULL == pArr->force)||(NULL == pArr->Intelligence))
{
printf("动态内存分配失败\n");
exit(-1);
}
// 设定 数组的元素个数为0 因为目前没有添加 长度 为MAIN函数中设定
else
{
pArr->cnt = 0;
pArr->len = length;
}
return ;
}
void show_arr(struct sanguo *pArr)
{
if (is_empty(pArr))
{
printf("数组为空\n");
}
else
{
for(int i=0; i<pArr->cnt; ++i)
{
printf("国家: %s", pArr->country[i]);
printf("姓名: %s", pArr->name[i]);
printf("武力值: %d", pArr->force[i]);
printf("智力值: %d", pArr->Intelligence[i]);
printf("\n");
}
}
}
bool append_arr(struct sanguo *pArr, const char * val1, const char * val2, int val3, int val4)
{
if (is_full(pArr))
return false;
else
{
pArr->country[pArr->cnt] = strdup(val1);
pArr->name[pArr->cnt] = strdup(val2);
pArr->force[pArr->cnt] = val3;
pArr->Intelligence[pArr->cnt] = val4;
pArr->cnt++;
return true;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询