[英]Error: assignment to expression with array type while using selection-sort
基本上,我试图sort
用3名的议程selection sort
方法。 很确定选择排序部分没问题。 问题是,显然我的代码可以识别字符串的 [0] 个字符,但不能将一个字符串传递给另一个变量。 这是我的代码:
include <stdio.h>
typedef struct{
char name[25];
} NAME;
int main(){
int a, b;
char x, y[25];
static NAME names[]={
{"Zumbazukiba"},
{"Ademiro"},
{"Haroldo Costa"}
};
for(a=0; a<4; a++){
x = names[a].name[0];
y = names[a];
for(b=(a-1); b>=0 && x<(names[b].name[0]); b--){
names[b+1] = names[b];
}
names[b+1].name = y;
}
}
我不断收到此错误消息:
main.c:21:11: 错误:赋值给数组类型为 y = names[a] 的表达式;
在您的编译器标记的行中,您的代码中至少有两个错误。 首先,你不能复制字符串(或实际上,任何其他阵列型),使用简单赋值( =
)运算符在C
-你需要使用strcpy
函数(其需要#include <string.h>
管线您的代码)。
其次,您已将y
声明为字符数组( char y[25]
),但names
是一个NAME
结构数组; 大概,您想将给定结构的name
字段复制到y
。
所以,而不是:
y = names[a];
你应该使用:
strcpy(y, names[a].name);
随时要求进一步澄清和/或解释。
对于初学者,我没有看到选择排序。 看来您的意思是插入排序。
数组没有赋值运算符。 所以像这样的陈述
names[b+1].name = y;
您尝试分配数组的位置无效。
在这样的陈述中
y = names[a];
您正在尝试将结构类型的对象分配给字符数组。
此外,循环也是不正确的。
该数组只有 3 个元素。 所以目前还不清楚这个循环中的神奇数字 4 在做什么
for(a=0; a<4; a++){
这个循环
for(b=(a-1); b>=0 && x<(names[b].name[0]); b--){
当 a 等于 0 时跳过第一次迭代。
这是一个演示程序,展示了如何将选择排序应用于数组元素。
#include <stdio.h>
#include <string.h>
#define LENGTH 25
typedef struct
{
char name[LENGTH];
} NAME;
int main(void)
{
NAME names[] =
{
{ "Zumbazukiba" },
{ "Ademiro" },
{ "Haroldo Costa" }
};
const size_t N = sizeof( names ) / sizeof( *names );
for ( size_t i = 0; i < N; i++ )
{
puts( names[i].name );
}
putchar( '\n' );
for ( size_t i = 0; i < N; i++ )
{
size_t min = i;
for ( size_t j = i + 1; j < N; j++ )
{
if ( strcmp( names[j].name, names[min].name ) < 0 )
{
min = j;
}
}
if ( i != min )
{
NAME tmp = names[i];
names[i] = names[min];
names[min] = tmp;
}
}
for ( size_t i = 0; i < N; i++ )
{
puts( names[i].name );
}
putchar( '\n' );
return 0;
}
程序输出是
Zumbazukiba
Ademiro
Haroldo Costa
Ademiro
Haroldo Costa
Zumbazukiba
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.