问题代码:
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;