int main(){Biggn2();return 0;}这样直接调用Biggn2()就能得到正确结果void xuanze(){char a[6];int num;scanf("%d",&num);switch(num){case 1:system("cls");{for(int j=0;j<6;j++)scanf("%c",&a[j]);Biggn1(a);}break;case 2:system("cls");Biggn2();break;case 3:system("cls");Biggn3();break;default :printf(" ");break;}}void jiemian(){printf("请输入你需要的功能:\n");printf("1.输入六个字符(以逗号间隔),得到加密后的二进制数。\n");printf("2.输入一个字符及加密盒(以逗号间隔),得到加密后的二进制数。\n");printf("3.从文件读取六个字符(以逗号间隔),得到加密后的二进制数。\n");xuanze();}int main(){ jiemian();return 0;}这样选择Biggn2(),程序就会失败。有什么可能的原因呢?void Biggn2(){char a;char b[8];int i=0,k=0;int z;//选择盒子scanf("%c,%d",&a,&z);int j=0x8;for(;j;j>>=1){if(j&a){b[k++]=1;}else{b[k++]=0;}}//将8位转换成6位char c[6];c[0]=b[0];c[1]=b[1];c[2]=b[2];c[3]=b[3];c[4]=b[4];c[5]=b[5];//取每组的第一和最后一位数字存放char a1[2];a1[0]=c[0];a1[1]=c[5];//取中间四个数字存放char b1[4];b1[0]=c[1];b1[1]=c[2];b1[2]=c[3];b1[3]=c[4];
2 回答
慕娘9325324
TA贡献1783条经验 获得超5个赞
C里面函数直接调用是值传递,在函数里面调用的是函数的一个拷贝,你要把需要的设置成全局变量才行,你的BIGGN2是在XUANZE里面调用的,是一个局部变量,出了那个函数的范围以后就被系统释放了,所以你XUANZE那里读取的是一个随机数,C不允许这么做,所以就报错了
慕的地6264312
TA贡献1817条经验 获得超6个赞
贴出完整代码
初步估计是Biggn2()中有类似于scanf("%c",&xxx);或是xxx=getchar();或是gets(xxx);的语句,如果是这样的话,在scanf("%d",&num);后加语句fflush(stdin);或是getchar();以吸收掉回车符
- 2 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消
