我for(int d=0;d<5;d++)为啥让我循环了6次??
- C/C++ code
#include <db.h>#include <windows.h>#include <stdio.h>struct variable{ char name[5][8]; double value[5];};void print_error(int ret)//获取数据库错误函数{ if(ret != 0) printf("ERROR: %s\n",db_strerror(ret));}void main(){ int ret; //设置一个int类型变量用于接收错误代码。 variable var; DB *pdb;//创建数据库指针 db_create(&pdb,NULL,0);//创建数据库 ret=pdb->open(pdb,NULL,"var.eg",NULL,DB_HASH,DB_CREATE,0664);//打开数据库 print_error(ret);//如果打开错误,这里返回错误信息 DBT key,data;//创建一个DBT结构体类型的变量 memset(&key,0,sizeof(DBT));//初始化 memset(&data,0,sizeof(DBT)); memset(&var,0,sizeof(variable)); printf("请输入5个最大长度为7的变量名:\n"); for(int i=0;i<5;i++) { scanf("%s",&var.name[i][8]); } for(int b=0;b<5;b++) { printf("%s\n",&var.name[b][8]); } printf("请输入5个double类型的变量值:\n"); for(int d=0;d<5;d++)//这个循环出错,我明明设置的小于5,为什么他能循环6次??++++++++ {//scanf让我输入了6次!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ scanf("%f\n",&var.value[d]); key.data=&var.name[d]; key.size=sizeof(var.name[d]); data.data=&var; data.size=sizeof(variable); ret=pdb->put(pdb,NULL,&key,&data,0);//把关键字key和数据data关联在一起,并写入数据库 print_error(ret); } pdb->sync(pdb,0);//手动写入内存中的数据到硬盘 memset(&var,0,sizeof(variable)); memset(&key,0,sizeof(DBT)); memset(&data,0,sizeof(DBT)); while(1) { char uu[8]; int ii; printf("请输入查询哪个函数(长度不允许超过7位),并输入查询第几个值(<5):"); scanf("%s,%f",&uu,&ii); printf("================================================\n");//查看var.value是否初始化成功。 for(int g=0;g<5;g++) { printf("%f\n",&var.value[g]); } printf("================================================\n"); key.data=uu; key.size=sizeof(uu); data.data=&var; data.size=sizeof(variable); ret=pdb->get(pdb,NULL,&key,&data,0);//按照关键字key的值读取数据。 print_error(ret); printf("key=%s,data=%f\n",key.data,var.value[ii]); } pdb->close(pdb,0);}[解决办法]
....进入for循环之前 fflush(stdin);清除缓冲试试
[解决办法]
scanf("%s",&var.name[i][8]);
数组越界~ 不能是8
0~7
这种低级错误要细心细心啦~
[解决办法]
%s ? 还是%c 到底是获取字符还是获取字符串
[解决办法]
- C/C++ code
for(int i=0;i<5;i++) { scanf("%s",&var.name[i]); } for(int b=0;b<5;b++) { printf("%s\n",&var.name[b]); }
[解决办法]
考虑一下回车?
[解决办法]
scanf("%lf\n",&var.value[d]);
没哟\n
[解决办法]
同意七楼 隔离一下