C++

2012-02-09 8 views
5

deyiminde çoklu durum C++ 'da programlama kavramına çok yeni geliyorum. If deyimi kullanarak bir çok koşulu istiyorum || ve ve bir ifadede & &. Kolej avukatına sorduğumda. O mümkün olduğunu söyledi ve sonra konuyla ilgili sınırlı bilgime hakaret etti. Tüm örnekler için bir çoklu & & bildirimini ve yalnızca birini gösteren bir tane göstereceğim. Birlikte kullanıldığını göstermez. Çizgiyi nasıl çalıştıracağımı öğrenirim. Sahip olduğum kodu ekleyeceğim. Sorun alanı, kodlamanın son bitidir.C++

# include <iostream> 
# include <cstring> 

using namespace std; 

main() 
{ 

    const int maximumHours = 774; 
    char customerPackage; 
    double hoursUsed = 0, 
      packageA = 9.95, 
      packageB = 14.95, 
      packageC = 19.95, 
      overPackageA = 2.00, 
      overPackageB = 1.00, 
      overTime = 0, 
      amountDue = 0, 
      excessCharged = 0; 

    cout << "Please enter the customer's package: "; 
    cin >> customerPackage; 

    switch (customerPackage) 
    { 
     case 'a' : 
      cout << "Please enter the number of hours used: "; 
       cin >> hoursUsed; 
      break; 

     case 'A' : 
      cout << "Please enter the number of hours used: "; 
       cin >> hoursUsed; 
      break; 

     case 'b' : 
      cout << "Please enter the number of hours used: "; 
       cin >> hoursUsed; 
      break; 

     case 'B' : 
      cout << "Please enter the number of hours used: "; 
       cin >> hoursUsed; 
      break; 

     case 'c' : 
      cout << "Please enter the number of hours used: "; 
       cin >> hoursUsed; 
      break; 

     case 'C' : 
      cout << "Please enter the number of hours used: "; 
      cin >> hoursUsed; 
      break;   
     default: cout << "Error." 
      << " Please enter the customer's purchased package: "; 
     cin >> customerPackage; 
    }  

    if (customerPackage ='a' || customerPackage ='A' && hoursUsed >= 10)   
     amountDue = packageA; 
     else 
      overTime = packageA - hoursUsed; 
      excessCharged = overTime * overPackageA; 
      amountDue = packageA + excessCharged; 
} 
+6

'==' ile değil ile karşılaştır. Ve koşullarınızı netleştirmek için '()' kullandığınızdan emin olun. Aksi halde .. sorun ne? Kodunuzu "sorunlu alan" olarak adlandırmak, ne yapmak istediğinizi bulmak için ne yapmamız gerektiği konusunda bize fazla bir şey vermez. –

+0

karşılaştırma işleci * == * on c/C++ – Gigi

+3

Ayrıca, kendinize bir iyilik yapın ve her bir karşılaştırmanın etrafına parantez yerleştirin, böylece siz ve herkesin && ve || Yukarıdaki. –

cevap

10

Senin sorunun &&|| böylece parens gerekenden daha yüksek önceliğe sahip olmasıdır. Bir yorumda belirtildiği gibi ayrıca atama (=) yerine == kullanmak gerekir:

if ((customerPackage =='a' || customerPackage =='A') && hoursUsed >= 10)

0

Sen boolean operatörleri infaz sırayı belirtmek için parantez kullanabilirsiniz.

if ((customerPackage == 'a' || customerPackage == 'A') && hoursUsed >= 10) 

&& daha yüksek önceliğe sahiptir, çünkü böylece kod bu eşdeğerdir, normalde varsayılan olarak ilk değerlendirilir:

if (customerPackage == 'a' || (customerPackage == 'A' && hoursUsed >= 10)) 
Kullanmak istiyorum Muhtemelen, bu yüzden || ilk değerlendirmek istiyoruz

Ayrıca, yorumlarda belirtildiği gibi, ödev için == ve ödev için = kullanın.

+0

teşekkür ederim. Bu çok yararlı bir bilgidir ve yardım için tekrar aramam gerekecek olursa daha ayrıntılı olacağım. Posta alanından – user1200066

+0

sanırım. – user1200066

4
if (customerPackage ='a' || customerPackage ='A' && hoursUsed >= 10) 

Sen yüzden yakın doğru cevabı sahip bulunmaktadır. Sana iki ipuçları vereyim:

  1. = operatör == operatörü olarak aynı değildir. =, atama işlecidir. Sağ tarafını değerlendirir ve sonucu sol taraftaki değişkende saklar. Eşitlik operatörü =='u istiyorsun. Sağ tarafının ve sol tarafının eşit olup olmadığını test eder. Değerlendirme sırası niyetinizi zorunlu kılmak için (...) parantezini kullanın. Açıkça demek istediğim, "MüşteriPaket 'bir' veya 'A' ise ve ayrıca kullanım süreleri de yeterince büyükse, o zaman ...".

bu satırı deneyin:

if ((customerPackage == 'a' || customerPackage == 'A') && hoursUsed >= 10) 
6

Diğerleri zaten fark ettik sorun size yardımcı olmuştur.İsterseniz

else 
     overTime = packageA - hoursUsed; 
     excessCharged = overTime * overPackageA; 
     amountDue = packageA + excessCharged; 

else kontrol yetkisine sahip olduğu tabloların her üç, bir bileşik deyimi oluşturmak için parantez içine alın gerekir: Ne görünüşte (henüz) farkında değil ayrı bir problemle başlayacağız :

else { 
    overTime = packagA - hoursUsed; 
    excessCharged = overTime * overPackageA; 
    amountDue = packageA + excessCharged; 
} 

şu anda haliyle, kodunuz gerçekten:

else 
     overTime = packageA - hoursUsed; 
    excessCharged = overTime * overPackageA; 
    amountDue = packageA + excessCharged; 

Yani, excessCharged veiçin hesaplamaları, if ifadesindeki koşulun true veya false olup olmadığına bakılmaksızın 'a bakılmaksızın gerçekleştirilir.

Ben de gerçekten çok başarmak sizin switch beyanı olmadığına dikkat ediyorum:

Özellikle
switch (customerPackage) 
{ 
    case 'a' : 
     cout << "Please enter the number of hours used: "; 
      cin >> hoursUsed; 
     break; 

    case 'A' : 
     cout << "Please enter the number of hours used: "; 
      cin >> hoursUsed; 
     break; 

    case 'b' : 
     cout << "Please enter the number of hours used: "; 
      cin >> hoursUsed; 
     break; 

    case 'B' : 
     cout << "Please enter the number of hours used: "; 
      cin >> hoursUsed; 
     break; 

    case 'c' : 
     cout << "Please enter the number of hours used: "; 
      cin >> hoursUsed; 
     break; 

    case 'C' : 
     cout << "Please enter the number of hours used: "; 
     cin >> hoursUsed; 
     break;   
    default: cout << "Error." 
     << " Please enter the customer's purchased package: "; 

, (varsayılan hariç) tüm durumlar için aynı işlemi yapın. Şahsen, ancak, ben farklı şeyler biraz yapısı ediyorum

static const char valid[] = "aAbBcC"; 

if (strchr(valid, userPackage)) { 
    cout << "Please enter the number of hours used: "; 
    cin >> hoursUsed; 
} 
else { 
    std::cout << "Error: Please enter the customer's purchased package"; 
    std::cin >> userPackage; 
} 

: Eğer böyle bir şey düşünebilirsiniz, Alternatif

switch (customerPackage) { 
    case 'a': 
    case 'A': 
    case 'b': 
    case 'B': 
    case 'c': 
    case 'C': 
      cout << "Please enter the number of hours used: "; 
      cin >> hoursUsed; 
      break; 
    default: 
     cout << "Error " /* ... */; 
} 

: Sen biraz düşme-through davaları kullanarak bu kolaylaştırabilirsiniz ilk olsun bir geçerli girdi, ardından bir sonraki olsun:

do { 
    std::cout << "Please enter the customer's purchased package (a, b, or c): "; 
    std::cin >> userPackage; 
} while (!strchr(valid, userPackage)); 

std::cout << "Please enter the number of hours used: "; 
std::cin >> hoursUsed; 

if (tolower(customerPackage == 'a') && hoursUsed >= 10) 
// ... 
+0

Yeni bilgi ile repost olacak İlk yardım bana yardım eden herkese teşekkür ederim. Burada paylaşılan bilgileri temel alarak değişiklikler yaptım ve vadesi geldiğinde kredi verdim. Programla neredeyse bitirdim. İki sorun yaşıyorum. Bir sorun, tüm paketleri ve yanlış miktarları hesaplamaktır. Geri döndüm ve gerektiğinde if ifadesinden düşmemesi için önerilen değişiklikleri yaptım. Eksik olduğum küçük bir adım olduğunu biliyorum. Yine herkese teşekkürler. Detaylı analiz için – user1200066

+0

+1. – erict

0

sen (siz sordu other question olarak) yaşıyorsanız yeni bir sorun ile, bazı yeniden yapılanma gerekir.

if ((customerPackage == 'b' || customerPackage == 'B') && hoursUsed <= 20) 

    amountDue = packageB; 

    else 
    { 
     /* calculations */ 
    } 

böyle Aksi ilk ifadesi yalnızca paket = B VE saat = 20, aksi hesaplamalar tüm diğer durumlarda yapılacaktır zaman çalıştırılacaktır

if (customerPackage == 'b' || customerPackage == 'B') 
{ 
    if (hoursUsed <= 20) 
    { 
     amountDue = packageB; 
    } 
    else 
    { 
     /* calculations */ 
    } 
} 

olmalıdır, doğru değildir Paket A veya C.

Bu yardımcı olur umarız!