嘿,我正在尝试制作一个程序,它接受一个短语并在其中插入一个单词,这是代码
#include <stdio.h>
#define N 5
void Inserir(float A[N], int x, float palavra) {
int i;
for (i=N;i>x;i--){
A[i]=A[i-1];
}
A[x]=palavra;
for (i=0;i<=N;i++){
printf("A[i] ");
}
}
void main () {
int i, x;
float frase[N];
float palavra;
printf("frase? ");
for(i=0;i<N;i++){
printf("palavra %d: ",i); scanf("%f",&frase[i]);
}
printf("lugar da palavra nova? ");
scanf("%d",&x);
printf("palava nova? "); scanf("%f",&palavra);
Inserir(frase[N],x, palavra);
}
但在Inserir(frase[N])
上,它给出了错误:"Inserir"的参数1的类型不兼容;但它要求是浮动的,它是浮动的。怎么了?我已经改变了类型,当它没有给出这个错误和构建时,它会在中间崩溃,出现"Segmentation fault(core dumped)"
你已经出界了。您的数组A
的长度为N
,因此您的元素具有索引0、1。。。N-1。除此之外,要打印float
号码,您必须熟练调用print
。
void Inserir(float A[N], int x, float palavra) {
int i;
for (i=N-1;i>x;i--){ // <- N-1
A[i]=A[i-1];
}
A[x]=palavra;
for (i=0;i<N;i++){ // <- i<N
printf( "%f", A[i] );
}
}
frase[N]
表示数组中的第N个元素,而不是数组本身。除此之外,N
是越界的。在您的main
:中使用此功能
int main() {
...
Inserir(frase,x, palavra);
...
}