c - 为什么这个程序最后总是显示U

标签 c

我已经创建了以下用于加密单词的 C 代码。(凯撒密码)当我运行它时它总是在最后打印 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);
}

最佳答案

fgets 在缓冲区末尾的“\0”之前放置一个“\n”字符。所以如果不想加密,循环直到满足下面的条件:

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

严格来说,您得到 U 的实际原因是 \n 的 ASCII 代码为 10。因此,(10 -74)%26 + 97 = 85,这是U的ASCII码。

关于c - 为什么这个程序最后总是显示U,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835927/

相关文章:

c - fscanf 在末尾扫描一个额外的字符

php - C 和 PHP 中的 AES 解密/加密

c - 在c中保留变量数组的地址

C - 创建具有与输入相关的数组数量的结构

c - 在 c 中将 0 打印为 000,即将十进制打印为 3 位

c - 线程安全变量 comaprison C VS2010

c - 这个基本算法O(n)怎么样?

c - C中的结构指针

c - 静态全局变量和静态 volatile 变量有什么区别?

c++ - Opencv C++到C接口(interface)函数转换