我的程序应该以数组形式显示R1 = x,R2 = x,R3 = x。然后应该计算串联电阻的等效电阻。所有值都是用户提供的。我的问题是我不认为它将函数正确地传递给了equivRseries。在输出上,它允许我输入电阻量,但是一旦我输入电阻值,它就不会让我输入其余电阻的值。我能帮忙解决这个问题吗?这是我的代码:
#include <stdio.h>
#include <math.h>
#define max 100
void equivRseries(float R[max], float N, float *xPtr);
void input (float *xPtr, float R[max], float N){
int i;
printf("Please enter how many resistors you want in series: ");
scanf("%d", &N);
for(i=0; i<N; i++){
printf("Enter the value of R%d: ", i+1);
scanf("%f", &R[i]);
}
for(i=0; i<N; i++){
printf("R[%d]=%.2f\n", i+1, *(xPtr+i));
}
equivRseries(R, N, xPtr);
}
void equivRseries(float R[max], float N, float *xPtr){
int i;
float equivR=0;
for(i=0; i<N; i++){
equivR=equivR+*(xPtr+i);
}
printf("Equivalent resistance of this circuit is %f\n", equivR);
}
int main(){
float R[max], series, N;
float *xPtr;
xPtr=R;
input(xPtr,R,N);
return 0;
}
答案 0 :(得分:1)
下面:
scanf("%d", &N);
N
的类型为float
,因此&N
的类型为float*
。但是%d
需要int*
,而不是float*
。这会调用未定义的行为。
通过将格式说明符更改为%f
或将N
的类型更改为int
来修复此问题。
N
传递给函数而不是在函数中声明它是没有意义的。此外,不需要xPtr
。您可以直接使用R
代替xPtr
。
如果您使用@hexasoft has said below编译了警告(至少-Wall
),您就会注意到这个问题。海湾合作委员会给出:
source_file.c: In function ‘input’:
source_file.c:8:2: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘float *’ [-Wformat=]
scanf("%d", &N);
^
答案 1 :(得分:-1)
int input (float *xPtr, float R[max],float N){
int i;
printf("Please enter how many resistors you want in series: ");
scanf("%f", &N);
// ^___________ use "%f" for float
for(i=0; i<N; i++){
printf("Enter the value of R%d: ", i+1);
scanf("%f", R+i);
}
for(i=0; i<N; i++){
printf("R[%d]=%.2f\n", i+1, *(xPtr+i));
}
equivRseries(R, N, xPtr);
return N;
}