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

时间:2014-09-14 17:21:20

标签: 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);
}

2 个答案:

答案 0 :(得分:6)

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

if (en[x] == '\0' || en[x] == '\n') break;

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

答案 1 :(得分:0)

if (en[x] == '\0' || en[x] == '\n') break;

以上条件应该可以解决您的问题。 下面的link

给出了\ 0和\ n的一些读数

他是“线索”运行的输出,可以逐步提供更多洞察力

trial

*rial
rial
q(ial
qial
qoal
qoal
qofl
qofl
qofx"
qofx
qofxi?
qofxi?
qofxiU