MeowMoo 发表于 2021-1-6 16:05:37

#c语言#

本帖最后由 MeowMoo 于 2021-1-6 17:23 编辑

大佬们帮忙,程序功能是A(a)-V(v)译为 E(e)-Z(z),WXYZ(wxyz)译为ABCD(abcd);运行结果正确但是会有乱码,应该是因为数组未定义部分的问题,那怎样把数组未定义的数省略不赋值,去掉乱码?
程序如下

#include <stdio.h>

int main(void)
{
        char a;
        int i;
        for(i=0;i<=20;i++)
        {
                scanf("%c",&a);
                if(a=='\n')
                        break;
        }
        printf("%s\n",a);
        for(i=0;a!='\n';i++)
        {
                if((('A'<=a)&&(a<='V'))||(('a'<=a)&&(a<='v')))
                {
                        a=a+4;
                }
                if((('W'<=a)&&(a<='Z'))||(('w'<=a)&&(a<='z')))
                {
                        a=a-22;
                }
        }
        printf("%s\n",a);
       
}

运行结果如下

qwert
qwert
烫烫烫烫烫烫烫烫烫啲陎
uaivb
烫烫烫烫烫烫烫烫烫啲陎
请按任意键继续. . .

jackz007 发表于 2021-1-6 16:37:14

本帖最后由 jackz007 于 2021-1-6 17:12 编辑

      字符串末尾没有结束标志
      for(i = 0 ; i < 19 ; i ++)   // i 只能小于 19,不可以等于 20,因为下标索引 19 的位置必须预留出来用于保存字符串结束标志字符 '\0'
      {
                scanf("%c" , & a)   ;
                if(a == '\n') break ;
      }
      a = '\0'                  ; // 添加此句

      下面是我写的代码,谨供楼主参考
#include <stdio.h>

main(void)
{
      char s                                                                                 ;
      int n                                                                                       ;
      for(n = 0 ; n < 255 && (s = getchar()) != '\n'; n ++) {
                if(s >= 'A' && s <= 'Z' || s >= 'a' && s <= 'z') {
                        s += 4                                                                   ;
                        if(s > 'Z' && s < 'Z' + 5 || s > 'z' && s < 'z' + 5) s -= 26 ;
                }
      }
      s = '\0'                                                                                 ;
      printf("%s\n" , s)                                                                        ;
}

心驰神往 发表于 2021-1-6 16:50:15

本帖最后由 心驰神往 于 2021-1-6 17:09 编辑

#include <stdio.h>

int main(void)
{
      char a;
      int i,n;
      printf("你想输入几位数的密码:");
      scanf("%d\n",&n);
      for(i=0;i<n;i++)
      {
                scanf("%c",&a);
      }
      printf("%s\n",a);
      for(i=0;i<n;i++)
      {
                if((('A'<=a)&&(a<='V'))||(('a'<=a)&&(a<='v')))
                {
                        a=a+4;
                }
                if((('W'<=a)&&(a<='Z'))||(('w'<=a)&&(a<='z')))
                {
                        a=a-22;
                }
      }
      printf("%s",a);
      
}
没看你的判断条件,只是修改了一些感觉不合适的地方

风过无痕1989 发表于 2021-1-6 19:50:15

#include <stdio.h>

int main(void)
{
        char a;
        int i;
        for (i = 0;i <= 20;i++)
        {
                scanf("%c", &a);   // 错误!a 是数组名,是地址
                if (a == '\n')   // 错误!a 是数组名,是地址
                break;
        }
        a = '\0';            // 添加结束符
        printf("%s\n", a);
        for (i = 0;a != '\0';i++)
        {
                if ((('A' <= a) && (a <= 'V')) || (('a' <= a) && (a <= 'v')))   // 错误!a 是数组名,是地址
                {
                        a = a + 4;   // 错误!a 是数组名,是地址
                }
                if ((('W' <= a) && (a <= 'Z')) || (('w' <= a) && (a <= 'z')))   // 错误!a 是数组名,是地址
                {
                        a = a - 22;   // 错误!a 是数组名,是地址
                }
        }
        printf("%s\n", a);

}

MeowMoo 发表于 2021-1-7 13:37:01

jackz007 发表于 2021-1-6 16:37
字符串末尾没有结束标志




明白了,手段添加字符串结束标识符,今天研究了一下,也可以直接用gets函数,更方便些

MeowMoo 发表于 2021-1-7 13:40:01

心驰神往 发表于 2021-1-6 16:50
没看你的判断条件,只是修改了一些感觉不合适的地方

现在好了,谢谢

MeowMoo 发表于 2021-1-7 13:42:20

风过无痕1989 发表于 2021-1-6 19:50


这个我打的时候是有方括号的,发表就没了,应该是文本输入的原因,我还不知道怎么输入你们代码格式的,我研究一下哈哈哈

MeowMoo 发表于 2021-1-7 13:46:24

#include <stdio.h>

int main(void)
{
        char a;
        int i;
        printf("请输入你需要的破译的密码:");
        gets(a);
        for(i=0;a!='\0';i++)//输入字符串结尾会自动添加结束标识符“\0”
        {
                if((('A'<=a)&&(a<='V'))||(('a'<=a)&&(a<='v')))
                {
                        a=a+4;
                }
                if((('W'<=a)&&(a<='Z'))||(('w'<=a)&&(a<='z')))
                {
                        a=a-22;
                }
        }
                printf("%s\n",a);
}
直接使用gets()函数简便多了,而且scanf()还不能输入空格.
页: [1]
查看完整版本: #c语言#