c语言结构体数组怎么交换?

供稿:hz-xin.com     日期:2025-01-16
C语言结构体数组成员怎么赋值?

intmain(void){
structstudentsbao={};
printf("%d,%s
",bao.id,bao.name);//输出是4224528,空(应该是null)
//structstudentsbao={3,"123"};可以。第一种赋值方法

//strcpy(bao.name,"bao");//可以,
//printf("%d,%s
",bao.id,bao.name);

//bao.name="bao";错误“stray'\351'inprogram”其他是乱码,

//bao.name[0]='a';
//bao.name[0]='/0';
//printf("%d,%s
",bao.id,bao.name);
/*这样可以,*/

//chararr[10]="baobao";
////bao.name=arr;//error"assignmenttoexpressionwitharraytype"

//scanf("%s",bao.name);//可以,
//printf("%d,%s
",bao.id,bao.name);
//所以scanf那一类函数都可以。

//还有就是memcpy函数也是可以的
return0;
}

扩展资料
C语言结构体数组的直接赋值及数组的长度计算:
#include

//自定义一个字符串的结构体,包含字符串和字符串长度两个变量
typedefstructStr{
charch[100];
intlength;//char数组(字符串)的长度
}myStr;

//刚开始声明变量时每个变量的字符串长度length都为0
//这里以长度为10的数组为例,数组长度是1000
//对第0个到第9个结构体数组的长度同时赋值为0
myStrmyStr1[10]={
[0...9]={
.length=0,
}
};

intmain(){
inti;
for(i=0;i<10;i++){
printf("%d
",myStr1[i].length);
}
return0;
}

对于数组元素很多的初始化可以使用初始化列表方法。在c语言中用于进行初始化的程序结构则称为初始化器或初始化列表。
1、初始化器
初始化器是声明器的可选部分,它由一个'='以及其后的一个表达式(或含有多个以','隔开的带圆括号表达式的单一列表)所组成。后面这一列表有时也被称为“初始化(器)列表”(initializer list)或”初始化列表”(initialization list)。
例:
public class Curry
{public string MainIngredient { get; set; }
public string Style { get; set; }
public int Spiciness { get; set; }}
2、初始化列表
一个类/结构的构造函数可以在定义中于构造函数体前包含一个初始化列表,用以给类/结构的元素赋初值。
例:
class foo
{public:
foo(string s, int i):name(s), id(i){} ; // 初始化列表
private:
string name ;int id ;};

扩展资料
在程序里,数据初始化也可能在没有由明确的语法来实现的情况下进行。例如说,如果一个静态变量在没有初始化(即未指定初值)的情况下被声明,则:对于原生数据类型:以对应类型的零值进行初始化;对于类中的静态对象:由其默认的构造函数来进行初始化。
每一个初始化部分里面的代码在程序运行后,或库的begin-end块运行之前。delphi使用对单元相关树的深度优先遍历来运行初始化部分。换句话说,就只在一个单元的初始化代码运行前,delphi就运行了特他使用的每一个单元的初始化部分。每一个单元仅初始化一次 。
参考资料来源:百度百科——初始化
百度百科——初始化列表
百度百科——初始化器

定义一个struct cj temp;
然后就直接交换啊。

我把那块做成函数,楼主直接调用吧,主函数就没写完整了。

#include <stdio.h>
struct cj
{
int No;
char Name[20];
int cj1;
int cj2;
int cj3;
int pingjun;
int Number;
};
int main(int argc, char *argv[])
{
struct cj student[50];
void sort(struct cj *student,int n);
sort(student,50);
return 0;
}

void sort(struct cj *student,int n)/*从大到小的*/
{
int flag;
int i,j;
struct cj temp;
for(i=0;i<n-1;i++)
{
flag=0;
for(j=0;j<n-i-1;j++)
if(student[j].pingjun<student[j+1].pingjun)
{
flag=1;
temp=student[j+1];
student[j+1]=student[j];
student[j]=temp;
}
if(flag==0)
break;
}
}

void swap(struct cj *a , struct cj *b)
{
struct cj temp ;
temp = *a ;
*a = *b ;
*b = temp ;
return ;
}
结构体就是个数据类型,只不过是用户自定义而已,直接赋值,就可以了。

运行通过,你参考一下
#include<stdio.h>
struct cj
{
int No;
char Name[20];
int cj1;
int cj2;
int cj3;
int pingjun;
int Number;
};

void main(void)
{
int i=0,j=0;
cj student[3],temp;
int fenshu=0;
student[0].pingjun=33;
student[1].pingjun=44;
student[2].pingjun=38;

for(i=0;i<3;i++)
{
for(j=0;j<2-i;j++)
{
if(student[j].pingjun < student[j+1].pingjun)
{
temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}
}
}

for(i=0;i<3;i++)
printf("%d \n",student[i].pingjun);
}

判断的时候是判断平均分,交换的时候要全部交换

c语言结构体数组怎么交换?
定义一个struct cj temp;然后就直接交换啊。我把那块做成函数,楼主直接调用吧,主函数就没写完整了。include <stdio.h> struct cj { int No;char Name[20];int cj1;int cj2;int cj3;int pingjun;int Number;};int main(int argc, char *argv[]){ struct cj student[50];void sort(st...

请教高手,如何在结构体中交换字符数组???
你想交换的是字符串,不能直接用=,而要用strcpy();具体做法,在头文件中加入:include <string.h> 交换的时候这样写才对:strcpy(name1,str[i].name);str[i].name={0};strcpy(str[i].name,str[j].name);str[j].name={0};strcpy(str[j].name,name1);...

结构体内部的字符数组怎么进行交换?
main 函数应该有返回值类型,例如 int main()在输入学生成绩时,您使用了 %s 格式化字符串读入学号,这将导致学号中间的空格被认为是字符串的结束,可能导致读取错误。在交换成绩时,您只交换了 cn,sx 和 en 三个成绩,但是没有交换 xh 和 xm 两个字符串,这会导致学生的信息错乱。在交换成绩时,...

如何交换结构体数组中两个项的内容?
可以自己加个索引值来表示当前数组元素的个数 p_veh=new INFO_VEH[iAll];int nIndex = 0;p_veh[nIdex].xx = xx ...++nInde;

在C++中,定义了一个结构体数组s[10],如果要把s[2]和s[9]数据交换,应该...
如果是C++就好办, 可以用一个关键字:decltype 你可以这样用:decltype(s[0]) t;t = s[2];s[2] = s[9];s[9] = t;这是C11标准的, 如果是11年前的编译器, 就会报错.如果不用decltype, 那你就只能查看s的定义, 然后手写咯~

C++中如何交换字符串数组中的数据??急
定义一个结构体,struct str { int a[50];char b[MAX][LEN];} 然后根据a对结构体排序就可以 也可以用map或者multimap来实现

结构体数组如何排序,我写的程序为何排序后还是老样子??没有交换呢??
\/\/选择最小值 int selectmin(int i){ int min=i;for(int j=i;j<=count;j++){ if(stu[i].room<stu[min].room) min=j; \/\/这里就是问题了,min==i,所以min=j 永远不会执行 } return min;} 将上面注释的那一句的 i 改成 j 就行了 ...

C语言请问如何将二维数组整行交换
有如下两种方法:一、循环按每个元素交换。以下程序完成二维数组第0行和第1行的交换。include <stdio.h>int main(){ int a[2][2] = {1,2,3,4}; int v; int i,j; for(i = 0; i < 2; i ++) { \/\/以下三行是对i位置的第0行和第1行数据进行交换。 v ...

c语言中交换两个结构体的值
都是 变量交换 追问 typedef struct { char dm[5] ; \/* 产品代码 *\/ char mc[11] ; \/* 产品名称 *\/ int dj ; \/* 单价 *\/ int sl ; \/* 数量 *\/ long je ; \/* 金额 *\/} PRO ;谢谢你,这是结构体的定义,结构体不能直接赋值吗 追答 冒泡的话 结构体是可以 整体的 需要一个 对象来当做...

C语言结构体排序
如果发现成绩或学号顺序错误,我们就交换它们的位置。通过这种方式,我们可以轻松地对包含学生信息的结构体数组进行排序。这在处理学生数据时非常有用,可以方便地按照学生成绩或学号进行排序,以便更好地管理和分析学生信息。当然,冒泡排序算法虽然简单,但它的时间复杂度为O(n^2),在处理大数据量时效率较...