为什么我点加密,但是却直接跳出程序怎么办

#include
#include
#include

void jiami(){

char str[100];
 int  i,len=0;
 printf("请输入字符串:");
 gets(str);
 len=strlen(str);
 for(i=0;str[i]!='\0';i++){

    str[i]=255-str[i]; 
  }

}
void jiemi(){

char str[100];
 int  i,len=0;
 len=strlen(str);
 printf("解密后的字符串:");
 for(i=0;str[i]!='\0';i++){

    str[i]=255-str[i]; 
    printf("%c",str[i]);
  }

}

int main(){

char str[100];
int sign,flag=1;
while(flag){

printf("1、加密 2、解密 3、退出系统:\n");
scanf("%d",&sign);
switch(sign){

    case 1: jiami(); break;
    case 2: jiemi(); break;
    case 3: exit(1); break;

} 

}

}

图片说明

为什么没先输入字符串,而是直接继续选择输入的类型。

你在输入选项为1的时候后面回车符并没有别scanf回收,而是还在缓存中,在你进行下次的gets(str);的时候,直接将回车符当做是输入完成的标志。所以在你进行gets(str);的时候应该先将缓存区中的垃圾字符(比如回车)等回收掉,可以使用getchar等。描述的不是很准确,但是就是那么问题

因为你break 跳出了switch 但是while没出去