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

结构体如何输出是乱码?(大神们都有被期末项目苦恼过,望帮助!)

2013-07-04 
结构体怎么输出是乱码?(大神们都有被期末项目苦恼过,望帮助!)我是新手,做期末项目。请问,这个程序出了“增加

结构体怎么输出是乱码?(大神们都有被期末项目苦恼过,望帮助!)
我是新手,做期末项目。
请问,这个程序出了“增加驾考信息”正常之外,为什么其他的显示信息时,为什么都是乱码呢?
望高手解答,非常感谢!!


#include <stdio.h>
#include <windows.h> 
#include <stdlib.h>
int system(const char *string);
void start();
void chakan(struct STUDENT info[999],int size);
void zengjia(struct STUDENT info[999],int *size);
void shanchu(struct STUDENT info[999],int *size);
void xiugai(struct STUDENT info[999]);
struct STUDENT{
char* name;
int number;
char* kemu;
};
int main()
{char input;
    FILE *data;
struct STUDENT info[999];
int size=0;

start();
while(1){
input =getchar();
switch(input){
case '#':
start();
break;
case '0':

exit(0);
break;
case '1':
start();
chakan(info,size);
break;
case '2':
start();
zengjia(info,&size);
break;
case '3':
start();
shanchu(info,&size);
break;
case '4':
start();
xiugai(info);
break;
}
}

return 0;
}

void chakan(struct STUDENT info[999],int size){
int i,j;
printf("-----------------------------查看信息------------------------\n");
printf("\t序号\t姓名\t\t考号\t\t待考科目\n");
for(i=0;i<size;i++){
printf("\t%d",i+1);

printf("\t%s\t",info[i].name);
printf("\t%d\t",info[i].number);
printf("\t%s\t",info[i].kemu);
printf("\n");
}
printf("-------------------------请按0-4继续操作---------------------\n");


}

void zengjia(struct STUDENT info[999],int *size){
char *str,s[50];
//struct STUDENT stu={"","",""};
str=s;
printf("-----------------------------增加信息------------------------\n");
printf("请输入姓名:\n");
scanf("%s",str);
info[*size].name=str;
printf("为了测试:%s\n",info[*size].name);//测试行
printf("请输入考号:\n");
scanf("%d",&info[*size].number);
printf("为了测试:%d\n",info[*size].number);//测试行
printf("请输入待考科目:\n");
scanf("%s",str);
info[*size].kemu=str;
printf("为了测试:%s\n",info[*size].kemu);//测试行
(*size)++;
printf("添加完成!\n");
printf("-------------------------请按0-4继续操作---------------------\n");
}

void shanchu(struct STUDENT info[999],int *size){
int index,i,j;
printf("-----------------------------删除信息------------------------\n");
printf("您要删除第几条信息?\n");
scanf("%d",&index);
for(i=index-1;i<*size-1;i++){
info[i]=info[i+1];
}
(*size)--;
printf("删除成功!\n");
printf("-------------------------请按0-4继续操作---------------------\n");
}

void xiugai(struct STUDENT info[999]){
int index;
char *str,s[50];
str=s;
printf("-----------------------------修改信息------------------------\n");
printf("您要修改第几条信息?\n");
scanf("%d",&index);
printf("您要将姓名:%s修改为:\n",info[index-1].name);
scanf("%s",str);
info[index-1].name=str;
printf("您要将考号:%d修改为:\n",info[index-1].number);
scanf("%d",&info[index-1].number);

printf("您要将待考科目:%s修改为:\n",info[index-1].kemu);
scanf("%s",str);
info[index-1].kemu=str;
printf("修改成功!\n");
printf("-------------------------请按0-4继续操作---------------------\n");
}

void start(){

system("cls");
printf("-------------------------------驾考信息管理系统-----------------------\n");


printf("1.查看所有驾考信息\n");
printf("2.增加驾考信息\n");
printf("3.删除驾考信息\n");
printf("4.修改驾考信息\n");
printf("0.退出\n");
}

乱码 c
[解决办法]
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode:0x4A 0x55,UTF-8:0xE5 0x95 0x8A

单步调试和设断点调试是程序员必须掌握的技能之一。

[解决办法]

#include <stdio.h>
#include <windows.h> 
#include <stdlib.h>
int system(const char *string);
void start();
void chakan(struct STUDENT info[999],int &);
void zengjia(struct STUDENT info[999],int &);
void shanchu(struct STUDENT info[999],int &);
void xiugai(struct STUDENT info[999]);
struct STUDENT{
char name[10];
int number;
char kemu[20];
};
static int m_nStuNum = 0;
int main()
{char input;
//    FILE *data;
struct STUDENT info[999];

start();
while(1){
input =getchar();
switch(input){
case '#':
start();
break;
case '0':

exit(0);
break;
case '1':
start();
chakan(info,m_nStuNum);
break;
case '2':
start();
zengjia(info,m_nStuNum);
break;
case '3':
start();
shanchu(info,m_nStuNum);
break;
case '4':
start();
xiugai(info);
break;
}
}

return 0;
}

void chakan(struct STUDENT info[999],int &m_nStuNum){
int i;
printf("-----------------------------查看信息------------------------\n");
printf("\t序号\t姓名\t\t考号\t\t待考科目\n");
for(i=0;i<m_nStuNum;i++){
printf("\t%d",i+1);

printf("\t%s",info[i].name);
printf("\t%d",info[i].number);
printf("\t\t%s",info[i].kemu);
printf("\n");
}
printf("-------------------------请按0-4继续操作---------------------\n");


}

void zengjia(struct STUDENT info[999],int &m_nStuNum){
//char str[50] = '\0';
//struct STUDENT stu={"","",""};
printf("-----------------------------增加信息------------------------\n");
printf("请输入姓名:\n");
scanf("%s",info[m_nStuNum].name);
//strcpy(info[m_nStuNum].name , str);
printf("为了测试:%s\n",info[m_nStuNum].name);//测试行
printf("请输入考号:\n");
scanf("%d",&info[m_nStuNum].number);
printf("为了测试:%d\n",info[m_nStuNum].number);//测试行
printf("请输入待考科目:\n");
scanf("%s",info[m_nStuNum].kemu);
//info[m_nStuNum].kemu=str;
printf("为了测试:%s\n",info[m_nStuNum].kemu);//测试行
//(*size)++;
m_nStuNum++;
printf("添加完成!\n");


printf("-------------------------请按0-4继续操作---------------------\n");
}

void shanchu(struct STUDENT info[999],int &m_nStuNum){
int index,i;
printf("-----------------------------删除信息------------------------\n");
printf("您要删除第几条信息?\n");
scanf("%d",&index);
for(i=index-1;i<m_nStuNum-1;i++){
info[i]=info[i+1];
}
m_nStuNum--;
printf("删除成功!\n");
printf("-------------------------请按0-4继续操作---------------------\n");
}

void xiugai(struct STUDENT info[999]){
int index;
char *str,s[50];
str=s;
printf("-----------------------------修改信息------------------------\n");
printf("您要修改第几条信息?\n");
scanf("%d",&index);
printf("您要将姓名:%s修改为:\n",info[index-1].name);
scanf("%s",str);
strcpy(info[index-1].name , str);
fflush(stdin);
printf("您要将考号:%d修改为:\n",info[index-1].number);
scanf("%d",&info[index-1].number);
fflush(stdin);
printf("您要将待考科目:%s修改为:\n",info[index-1].kemu);
scanf("%s",str);
strcpy(info[index-1].kemu , str);
fflush(stdin);
printf("修改成功!\n");
printf("-------------------------请按0-4继续操作---------------------\n");
}

void start(){

system("cls");
printf("-------------------------------驾考信息管理系统-----------------------\n");
printf("1.查看所有驾考信息\n");
printf("2.增加驾考信息\n");
printf("3.删除驾考信息\n");
printf("4.修改驾考信息\n");
printf("0.退出\n");
}


[解决办法]
试改以下代码:

struct STUDENT{
char name[50]; //char* name;
int number;
char kemu[50]; //char* kemu;
};
strcpy(info[*size].name, str); //info[*size].name=str;
strcpy(info[*size].kemu, str); //info[*size].kemu=str;
strcpy(info[index-1].name, str); //info[index-1].name=str;
strcpy(info[index-1].kemu, str); //info[index-1].kemu=str;

热点排行