嘿所以我正在尝试创建一个程序,它接受一个短语并在其中间放置一个单词,继承代码
#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)”
答案 0 :(得分:3)
你正在走出界限。您的数组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);
...
}