数组的前2个元素don';for循环后输出中不显示 #包括 #包括 int main() { char cleartxt[256]; printf(“您想要加密什么?(仅小写)\n”); fgets(cleartxt、sizeof(cleartxt)、stdin); int len=strlen(cleartxt); 无符号短方法; printf(“您想使用方法1(凯撒密码)还是方法2(加密字母表)?\n”); scanf(“%d”和方法); if(方法==1){ int键; printf(“您的钥匙是什么?\n”); scanf(“%d”和键)(&key); 对于(int i=0;i

数组的前2个元素don';for循环后输出中不显示 #包括 #包括 int main() { char cleartxt[256]; printf(“您想要加密什么?(仅小写)\n”); fgets(cleartxt、sizeof(cleartxt)、stdin); int len=strlen(cleartxt); 无符号短方法; printf(“您想使用方法1(凯撒密码)还是方法2(加密字母表)?\n”); scanf(“%d”和方法); if(方法==1){ int键; printf(“您的钥匙是什么?\n”); scanf(“%d”和键)(&key); 对于(int i=0;i,c,C,我正在测试这个程序的第一部分,看看它到目前为止是否有效,但是在输出中,数组的前2个元素被跳过。 如果我删除If来决定方法,for循环工作得很好,我不明白为什么会有一个问题,您为scanf使用了错误的格式说明符%d用于int,因此将方法更改为int方法或使用scanf格式说明符来指定无符号短字符,它是?这里有人会知道的。@yano%hu会知道的……这可能是前两个字符串元素被覆盖的原因:4个字节写入了2的存储位置。这解决了我的问题,非常感谢! #include<stdio.h>

我正在测试这个程序的第一部分,看看它到目前为止是否有效,但是在输出中,数组的前2个元素被跳过。
如果我删除If来决定方法,for循环工作得很好,我不明白为什么会有一个问题,您为
scanf
使用了错误的格式说明符<代码>%d用于int,因此将
方法更改为
int方法
或使用
scanf
格式说明符来指定
无符号短字符
,它是?这里有人会知道的。@yano
%hu
会知道的……这可能是前两个字符串元素被覆盖的原因:4个字节写入了2的存储位置。这解决了我的问题,非常感谢!
    #include<stdio.h>
    #include<string.h>
    int main()
      {
        char cleartxt[256];
        printf("what do you want to cipher? (lower cases only)\n");
        fgets(cleartxt, sizeof(cleartxt), stdin);
        int len = strlen(cleartxt);

        unsigned short method;
        printf("do you want to use method 1 (Caesar's cipher) or method 2(scrambled alphabet)?\n");
        scanf ("%d",&method);

         if (method==1) {
         int key;
         printf("what's your key?\n");
         scanf("%d",&key);

          for (int i=0; i < (len - 1); i++) {
                 if (cleartxt[i]<=122) {
                    if (cleartxt[i]>=97)
                       cleartxt[i] = 97 + (((cleartxt[i]%97)+key)%26);
                       printf ("%c", cleartxt[i]);
                } else {
                       printf("%c",cleartxt[i]);
                      }
                 }
   } else printf("the number is invalid");
    return 0;
  }