1

抵抗値を見つけるために、この非常に単純なコードを書きました。コードはコンパイルされ、最初の質問をしますが、P または S の入力が入力されると、コードがクラッシュして終了します。どんな助けでも素晴らしいでしょう、私はそれが私が見逃している本当に単純なものになることを知っています...

#include <stdio.h>

void main ()
{
float res1;
float res2;
float res3;
float answer;
char calctype;

printf("Please enter 1st resistor value:");
   scanf("%f", &res1);

printf("Enter 2nd resistor value:");
   scanf("%f", &res2);

printf("Enter 3rd resistor value:");
   scanf("%f", &res3);

puts("type P for Parallel calculation or S for Series calculation:\n");
scanf("%c", calctype);

if (calctype == 'S') {
answer = res1 + res2 + res3;
printf("The Series value is:%f \n", answer);
}
else if (calctype == 'P') {
answer = 1/(1/res1 + 1/res2 + 1/res3);
printf("The Parallel Value is:%f \n", answer);
}

}

ありがとうございました!

4

2 に答える 2

5

scanf()関数呼び出しが間違っています、忘れました&:

scanf("%c", calctype);
// calctype is declared as char variable you need address of it  

次のようにする必要があります。

scanf("%c", &calctype);
 //         ^ added & - pass by address to reflect change  

補足:
if-else-if の代わりに switch-case を使用してください。

switch(calctype){
 case 'S' :  /* First if code 
             */
            break;
 case 'P':  /*  Second if code
            */
            break;
}

一般に、ネストされた if-else よりもフラットなコーディング構造を使用することをお勧めします。

また、コードのインデントを改善する必要があります。C プログラムのインデントを参照してください。また、いくつかの優れたコーディング プラクティスについても説明します。

を使用しないことにも注意してくださいvoid main()。C 標準によれば、main は as int main(void), asと定義されint main(int argc, char *argv[])ます。C および C++ では何をmain()返す必要がありますか? を参照してください。.

于 2013-10-19T11:46:27.533 に答える
0

使用する

scanf("%c", &calctype); /* put ampersand before variable name */

代わりに

scanf("%c", calctype);
于 2013-10-19T11:48:01.017 に答える