一个c++的问题,输出错误!

int main(){
    int s;
    int a;
    char k[1000];
    while(cin>>s,gets(k)){
    int n=(int)(s%26);
    for(int i=0;i<=strlen(k);i++){
        if(k[i]>=('a'+n)){
            cout<<char(k[i]-n);
        }
        else if(k[i]>='a'&&k[i]<=('a'+n)){
            cout<<char(k[i]+26-n);
        }
        else{
            cout<<k[i];
        }
    }
        cout<<endl;
    }
    return 0;
}

将字母表(26个)按顺序围成一个闭合的圆环 对于给定一个正整数n(n<128),表示圆环移动相应的位数,如n=2,圆环顺时针移动两位,此时原来c的位置被a替代,原来a的位置补y替代,形成新的闭环。对于给定的一段原文,请使用新的闭环字母表进行加密。如 I love c++! 加密后为 I jmtc a++!

for(int i=0;i<strlen(k);i++)

程序没啥问题,是你输入的格式不对,输入"2I love c++!"就可以了,你不输入数字s会默认为0