亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如下程序,為什么我單獨調用函數沒問題,但用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條經驗 獲得超4個贊

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 關注
  • 106 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號