2016-03-30 8 views
0

こんにちは、これは私の最初の質問ですので、私はいくつかの助けを得ることを望んでいます。 計算は正しいですが、基本的に出力は間違っています! 「合計」に7つ以上の変数を追加するたびに、出力が破損します。 7以下の変数は正しい答えを出力します。 これは私、私はあなたの助けまいら出力回答で何が間違っていますか?

#include <stdio.h> 

void main() 
{ 
    float total = 0, necklace, scarf, cotton, Lace, Hijab, h, m, l, z; 
    int ch, q; 
    printf("\nFashion : \n1.Fashion Necklace <Price=RM29>\n2.Scarf <Price=RM25>\n3.Cotton T-shirts <Price=RM35>\n4.Lace Blazer <price=RM33>\n5.Set of 2 Hijab <price=RM35>\n6.Fleece-Lined Hoodie <price=RM49>"); 
    printf("\nEnter Your Choice : "); 
    scanf("%d", &ch); 
    if (ch < 10) 
    { 
     printf("\nEnter Quantity : "); 
     scanf("%d", &q); 
     if (ch == 1) 
     { 
      necklace = 29 * q; 
     } 
     else if(ch == 2) 
     { 
      scarf = q * 25; 
     } 
     else if(ch == 3) 
     { 
      cotton = 35 * q; 
     } 
     else if(ch == 4) 
     { 
      Lace = 33 * q; 
     } 
     else if(ch == 5) 
     { 
      Hijab = 35 * q; 
     } 
     else if(ch == 6) 
     { 
      h = 49 * q; 
     } 
     else if(ch == 7) 
     { 
      m = 20 * q; 
     } 
     else if(ch == 8) 
     { 
      l = 40 * q; 
     } 
     else if(ch == 9) 
     { 
      z = 15 * q; 
     } 
    } 
    else 
    { 
     printf("\nInvalid Choice!!!"); 
    } 
    total = (scarf + necklace + cotton + Lace + Hijab + h + m + l + z); 
    printf("\nTotal = RM%.2f", total); 
} 
+2

あなたの問題とは無関係ですが、大きな 'if ... else if ...'チェーンを使用する代わりに、 'switch'ステートメントの使用を検討することをお勧めします。 –

+1

@JoachimPileborg:または、それらの定数( 'total + = val_map [ch-1] * q'など)に' ch 'をマップする配列 –

+0

わかりやすさとわかりやすさのために私たち人間:1)別々のコードブロックfor、if、else、while、do ... while、switch、case、default)を空白行で指定します。 2)公理に従う:* 1行につき1つの文と、文ごとに1つのみの変数宣言。* 3)意味のある変数名を使用する。変数名は内容や使用法を示す必要があります(またはそれ以上のもの)。 – user3629249

答えて

3

を必要とするコーディングの問題は、その値が不定になり、あなたが未定義の動作を持つことになります意味し、あなたはすべてのこれらの変数を初期化していないということです。

これらの変数をすべてゼロに初期化すると効果があります。

上記の理由により、上記の理由により、は1つの変数のみをプログラムに設定し、すべての未初期化変数に追加します。ですから、実際には、1つの計算された値に一見無作為な値をたくさん追加し、その値を出力として出力することがあります。

+0

ありがとうありがとうございます:) – Adel

0

あなたは値を初期化していません。合計で使用するときは、コード化の習慣が大変です。例えば、

int = x、y; //あなたは初期化していないので、xとyには乱数があります int sum = x + y; //コンパイラがゼロを与えないので、間違った答えを与えるでしょう。


int = x = 5、y = 0; int sum = x + y; // 5につながります。

0

初期化されていない変数は、割り当てられたメモリ位置にあるものを返します。これはガベージになります。 すべての使用変数を初期化する必要があります。 以下のコードをご検討ください。

int a,b; 
a=5; 
printf("\na= %d b= %d",a,b); 

5が返されることが保証されますが、返されるものは誰にも分かりません。 変数bに予約されているメモリに格納されている内容を知ることはできません。

関連する問題