为什么我的程序不适合C?

时间:2015-11-11 15:59:46

标签: c

我的程序应该以数组形式显示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;
}

2 个答案:

答案 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;
}