为什么这个程序总是在最后显示U.

117*_*788 1 c

我为加密词创建了以下C代码.(caesar cipher)当我运行它时,它总是打印U.如果你运行它,你会看到它.

#include<stdio.h>

int main(void){
    int x;
    char en[100];

    fgets(en,100,stdin);
    for(x=0;x<100;x++){
        if(en[x]=='\0'){
            break;
        }
        en[x]=((en[x]-71-3)%26)+97;
    }
    printf("%s\n",en);
}
Run Code Online (Sandbox Code Playgroud)

Cla*_*dix 6

fgets在缓冲区末尾的'\ 0'前放置一个'\n'字符.因此,如果您不想加密它,请循环直到满足以下条件:

if (en[x] == '\0' || en[x] == '\n') break;
Run Code Online (Sandbox Code Playgroud)

要严格,您获得a的实际原因U是由于\n具有ASCII码10 的事实.因此(10-74)%26 + 97 = 85,这是ASCII代码U.

  • 如果字符串比那个短,那么循环"x <99"将无济于事. (4认同)