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);
}
}
此题目该如何改呢? 展开
#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);
}
}
此题目该如何改呢? 展开
3个回答
展开全部
已修改,看注释
#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;
}
#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++;
}
展开全部
错误比较多。讲几个主要的。
第一个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);
}
第一个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,即指向字符串头。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把这句p2=p1;改为*(p2++)=p1;你试试看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |