#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 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 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);
}
没看你的判断条件,只是修改了一些感觉不合适的地方 #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);
} jackz007 发表于 2021-1-6 16:37
字符串末尾没有结束标志
明白了,手段添加字符串结束标识符,今天研究了一下,也可以直接用gets函数,更方便些 心驰神往 发表于 2021-1-6 16:50
没看你的判断条件,只是修改了一些感觉不合适的地方
现在好了,谢谢 风过无痕1989 发表于 2021-1-6 19:50
这个我打的时候是有方括号的,发表就没了,应该是文本输入的原因,我还不知道怎么输入你们代码格式的,我研究一下哈哈哈 #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]