C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因

//输入一个字符串存入数组a,对字符串中的每个字符用加3的方法加密并存入数组b,再对b中的字符串解密存入数组c。最后依次输出数组a、b、c中的字符串。#include<s... //输入一个字符串存入数组a,对字符串中的每个字符用加3的方法加密并存入数组b,再对b中的字符串解密存入数组c。最后依次输出数组a、b、c中的字符串。
#include<stdio.h>
void main()
{
char a[20],b[20],c[50],*p1,*p2,*p3;
p1=a,p2=b,p3=c;
gets(a);
while(*p1)
{
*(p1++)+=3;
p2=p1;
}
while(*p2)
puts(*p2++);
while(*p3)
{
puts(*p3-3);
}
}
此题目该如何改呢?
展开
 我来答
kaixingui2012
2013-05-07 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6310万
展开全部
已修改,看注释
#include<stdio.h>
int main()
{
char a[20],b[20],c[50],*p1,*p2,*p3;
p1=a,p2=b,p3=c;
gets(a);
while(*p1)
{
*p2 = (*p1)+3; //对字符串中的每个字符用加3的方法加密并存入数组b
p1++;
p2++;
}
*p2='\0'; //串结束符
p2=b ; //p2重新指向b的开始位置
while(*p2)
{
*p3 = (*p2)-3; //对b中的字符串解密存入数组c
p3++;
p2++;
}
*p3='\0';
puts(a); //puts是输出一个串
puts(b);
puts(c);
return 0;
}
追问
p2=b;为什么p2要重新指向b呢?
追答
while(*p1)
{
*p2 = (*p1)+3; //对字符串中的每个字符用加3的方法加密并存入数组b
p1++;
p2++; //这里p2的值在一直变化
}

p2=b ; //下面的代码要用p2来完成给p3的赋值,可是,此时的p2在前面的操作后,已经指到了b的结束位置,因此p2需要重新指向b的开始位置
while(*p2)
{
*p3 = (*p2)-3; //对b中的字符串解密存入数组c
p3++;
p2++;
}
百度网友83cdc1c
2013-05-07 · TA获得超过5790个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:833万
展开全部
错误比较多。讲几个主要的。
第一个while循环
*(p1++)+=3;这个是把a数组里的元素取出来加上3,然后又写入a数组了,没有写入b数组。
第二个和第三个while循环
puts是输出字符串,不是单个字符输出,单个字符输出是putchar
我改了一下,你看看。

#include <stdio.h>
void main()
{
char a[20],b[20],c[50],*p1,*p2,*p3;
p1=a,p2=b,p3=c;
gets(a);
while(*p1)
{
*p2=*p1+3;
p1++;
p2++;
}
*p2='\0';
p2=b;
while(*p2)
{
*p3=*p2-3;
p2++;
p3++;
}
*p3='\0';
puts(a);
puts(b);
puts(c);
}
追问
p2=b;为什么p2要重新指向b呢?
追答
因为p2在前面已经自加到字符串b的结尾了。在给c赋值的过程中,为了从字符串头部开始,所以p2要重新指向b,即指向字符串头。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我光着脚丫狂奔
2013-05-07
知道答主
回答量:10
采纳率:0%
帮助的人:3.7万
展开全部
把这句p2=p1;改为*(p2++)=p1;你试试看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式