2012-02-09 1 views
5

Tôi rất mới với khái niệm lập trình trong C++. Tôi muốn có một điều kiện đa nếu câu lệnh sử dụng || hoặc và và & & trong một tuyên bố. Khi tôi hỏi nhân viên đại học của tôi về nó. Cô nói với nó là có thể và sau đó xúc phạm kiến ​​thức hạn chế của tôi về chủ đề này. Tất cả các ví dụ tôi có quyền truy cập để hiển thị câu lệnh đa & & và chỉ một tuyên bố hiển thị ||. Nó không cho thấy chúng được sử dụng cùng nhau. Tôi sẽ tìm hiểu làm thế nào để có được dòng làm việc. Tôi sẽ đính kèm mã tôi có. Vùng vấn đề là bit cuối cùng của mã hóa.multi condition if statement 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

So sánh với '==', không phải '='. Và hãy chắc chắn sử dụng '()' để phân biệt các điều kiện của bạn. Nếu không .. có chuyện gì vậy? Gọi mã của bạn là "khu vực có vấn đề" không cho chúng ta nhiều thứ để tìm hiểu về điều bạn muốn nó làm. –

+0

toán tử so sánh là * == * trên c/C++ – Gigi

+3

Ngoài ra, hãy tạo cho bạn một ưu tiên và đặt ngoặc đơn xung quanh mỗi so sánh, chỉ để bạn và mọi người khác chắc chắn về thứ tự của && và || ở trên. –

Trả lời

10

Vấn đề của bạn là && có mức độ ưu tiên cao hơn || vì vậy bạn cần parens. Như đã đề cập trong một chú thích bạn cũng cần phải sử dụng == thay vì chuyển nhượng (=):

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

0

Bạn có thể sử dụng dấu ngoặc để xác định thứ tự mà các toán tử logic được thực thi. Bạn có thể muốn đánh giá || đầu tiên, vì vậy bạn muốn sử dụng:

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

Các && thường được đánh giá đầu tiên theo mặc định, bởi vì nó có ưu tiên cao hơn, do đó, mã của bạn là tương đương với điều này:

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

Ngoài ra, như đã nêu trong các nhận xét, hãy sử dụng == để so sánh và = để gán.

+0

cảm ơn bạn. đây là thông tin rất hữu ích và trong trường hợp tôi sẽ cần gọi lại để được giúp đỡ, tôi sẽ tiến hành chi tiết hơn. – user1200066

+0

không gian đăng bài tôi đoán. sẽ đăng lại với thông tin mới – user1200066

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

Bạn đang nên gần để có câu trả lời đúng. Hãy để tôi cung cấp cho bạn hai gợi ý:

  1. Nhà điều hành = không giống như toán tử ==. = là toán tử gán. Nó đánh giá bên phải của nó và lưu trữ kết quả trong biến có tên bên trái của nó. Bạn muốn ==, toán tử bình đẳng. Nó kiểm tra xem mặt bên phải của nó và bên trái của nó có bằng nhau hay không.

  2. Sử dụng dấu ngoặc đơn (...) để thực thi ý định đánh giá đơn đặt hàng của bạn. Bạn rõ ràng có nghĩa là để nói "Nếu một trong hai customerPackage là 'a' hoặc nó là 'A', và cũng hoursUsed là đủ lớn, sau đó ...".

Hãy thử dòng này:

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

Những người khác đã giúp bạn với vấn đề bạn đã nhận thấy.Tôi sẽ bắt đầu với một vấn đề riêng bạn dường như đã không nhận thấy (chưa):

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

Nếu bạn muốn tất cả ba của các báo cáo kiểm soát bởi các else, bạn cần phải đặt chúng trong dấu ngoặc để tạo ra một câu lệnh ghép :

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

Khi đứng ngay bây giờ, mã của bạn thực sự là:

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

Ie, các tính toán cho excessChargedamountDue được thực hiện bất kể liệu điều kiện trong tuyên bố if là đúng hay sai.

Tôi cũng muốn lưu ý rằng tuyên bố switch của bạn không thực sự đạt được nhiều:

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: "; 

Đặc biệt, bạn đi một cách chính xác các hành động tương tự cho tất cả các trường hợp (trừ mặc định). Bạn có thể đơn giản hóa này một chút bằng cách sử dụng các trường hợp rơi qua:

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 " /* ... */; 
} 

Ngoài ra, bạn có thể xem xét một cái gì đó như:

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

Cá nhân, tuy nhiên, tôi muốn cấu trúc thứ một chút khác nhau: đầu tiên có được một đầu vào hợp lệ, sau đó nhận tiếp theo:

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

Trước hết cảm ơn tất cả những ai đang giúp đỡ tôi. Tôi đã thực hiện các thay đổi dựa trên thông tin được chia sẻ tại đây và cung cấp tín dụng khi đến hạn. Tôi gần như hoàn thành chương trình. Tôi đang gặp hai vấn đề. một là vấn đề là đi qua tất cả các gói và tính toán số tiền sai. Tôi đã quay trở lại và thực hiện các thay đổi được đề xuất cho vấn đề không rơi ra nếu tuyên bố khi cần thiết. Tôi biết đó là một số bước nhỏ tôi đang mất tích. Một lần nữa cảm ơn tất cả. – user1200066

+0

+1 để phân tích chi tiết. – erict

0

với vấn đề mới mà bạn đang có (trong other question bạn hỏi), bạn sẽ cần một số cơ cấu lại.

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

    amountDue = packageB; 

    else 
    { 
     /* calculations */ 
    } 

là không đúng, mà nên

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

Nếu không báo cáo kết quả đầu tiên sẽ chỉ được thực hiện khi gói = B VÀ giờ = 20, nếu không tính toán sẽ được thực hiện trong tất cả các trường hợp khác, như khi gói là A hoặc C.

Hy vọng điều này sẽ hữu ích!