结构体数据交换时,中间变量的值会随着之前赋值变量的改变而改变

问题代码:
temp = s[i];
s[i] = s[j]; //运行测试后是这里有问题,这里在把结构体 s[j] 赋值给结构体 s[i] 的时候,会改变结构体 temp 里面的值也会随着是 s[i] 的改变而改变,这个问题怎么解决?
s[j] = temp;

代码功能:
书有书名(字符串长度不超过50字节),价格(单精度实数),分类(正整数);
输入n本书(n<=100),及每本书的书名,价格和分类(空格分隔输入数据),
请分别根据价格递增顺序排序,如果价格相同,则按照书名(ASCII码)递减排序。
最后输出排序后的结果,每行一本书详细信息,按照:书名,价格(保留2位小数),分类由逗号分隔。

代码:
#include <stdio.h>
#include <iostream>
#include <iomanip>
using namespace std;
typedef struct book
{
    char name[50];
    float price;
    int classification;
}book;

int main()
{
    int i,n,j;
    book s[n],temp;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s%f%d",s[i].name,&s[i].price,&s[i].classification);
    }
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(s[j].price < s[i].price)
            {
                temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
            else if(s[j].price == s[i].price)
            {
                if(s[j].classification > s[i].classification)
                {
                    temp = s[i];
                    s[i] = s[j];      //运行测试后是这里有问题,这里在把结构体  s[j]  赋值给结构体   s[i]   的时候,会改变结构体  temp  里面的值也会随着是  s[i] 的改变而改变,这个问题怎么解决?
                    s[j] = temp;
                }
            }
        }
    }
    for(i = 0;i<n;i++)
    {
        printf("%s,%.2f,%d\n",s[i].name,s[i].price,s[i].classification);
    }    
}

运行结果:
输入:
3
asd98 98 2
asd 23 2
sdasd 23 1

输出:
asd,23.00,2
asd,23.00,2
sdasd,23.00,1

结构体不是基础类型或者类对象,类对象支持=赋值操作是因为定义了赋值构造函数吧,你可以重载=赋值构造函数,使结构体支持赋值操作
要么,你就依次给这个结构体对象中的每个成员做赋值操作去实现 比如temp = s[i]; 应该写成 memcpy(temp.name, s[i].name); temp.price =s[i].price; temp.classification=s[i].classification;