为了账号安全,请及时绑定邮箱和手机立即绑定

如下程序,为什么我单独调用函数没问题,但用case语句调用就会出问题?

如下程序,为什么我单独调用函数没问题,但用case语句调用就会出问题?

C
慕田峪7331174 2022-12-15 17:13:56
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不允许这么做,所以就报错了

查看完整回答
反对 回复 2022-12-18
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

贴出完整代码
初步估计是Biggn2()中有类似于scanf("%c",&xxx);或是xxx=getchar();或是gets(xxx);的语句,如果是这样的话,在scanf("%d",&num);后加语句fflush(stdin);或是getchar();以吸收掉回车符

查看完整回答
反对 回复 2022-12-18
  • 2 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号