怎么老是提示说left operand must be l-value 为什么

来源:百度知道 编辑:UC知道 时间:2024/09/23 04:06:45
//某公司出于数据安全考虑,他们的所有数据都采用4位整数的方式传送。
//现在,他们要求写一个程序,对数据进行加密,以便数据更安全地传送。
//程序应读取一个包含4个数位的整数,并按以下方式加密:将每位替换成该位与7的和并用10求模。
//然后让第一位和第三位调换位置,将第二位和第四位调换位置,并打印出加密后的整数。

#include<iostream>
#include<math.h>
using namespace std;
void encrypt(int array[]);
void swap(int *p,int *q);

void main()
{
cout<<"请输入包含4个数位的整数:";
int x;
cin>>x;

int a[4];
while(x)
{
for(int i=0;i<4;i++)
a[i]=x%10;
x=x/10;
}
encrypt(a);
}

void encrypt(int a)
{
int sum=0;

for(int i=0;i<4;i++)
a[i]=(a[i]+7)%10;

swap(&a[0],&a[2]);
swap(&a[1],&a[3]);

for( i=0;i<4;i++)
a[i]=a[i]*(int)pow(10,i);
for(i=0;i<4;i++)
sum+=a[i];
cout<<"加密后的整数为:"<<sum<<endl;
}

void swap(int *p,int *q)
{
int temp;
tem

encrypt的声明语句里,a的类型忘记加[]了,是int a[]
另外,main函数里,取x的四个位的方法也是错的

正确代码如下:
#include<iostream>
#include<math.h>
using namespace std;
void encrypt(int array[]);
void swap(int *p,int *q);

void main()
{
cout<<"请输入包含4个数位的整数:";
int x;
cin>>x;

int a[4];
for(int i=0;i<4;i++) //这里要强制执行4次循环,以防止x是0000的特殊情况
{ a[i]=x%10;
x=x/10;}

encrypt(a);
}

void encrypt(int a[]) //这里声明为数组类型
{
int sum=0;

for(int i=0;i<4;i++)
a[i]=(a[i]+7)%10;

swap(&a[0],&a[2]);
swap(&a[1],&a[3]);

for( i=0;i<4;i++)
a[i]=a[i]*(int)pow(10,i);
for(i=0;i<4;i++)
sum+=a[i];
cout<<"加密后的整数为:"<<sum<<endl;
}

void swap(int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}

一个明显的错误就是
void encrypt(i