2015-10-14 79 views
-2

这是有问题的程序,很短的和甜:为什么我的第一个“if”语句不管输入如何执行?

// Lab 5 Exercise 1 
// Financial Aid Program 
// 
// Written by: Jared T. Fisher 

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    long int _income; // declaring the variables 
    char yesNo; 

    cout << "Are you an undergrad student?" ; // determining if they are an undergrad or not. 
    cin >> yesNo; 

    if ((yesNo = 'N') || (yesNo = 'n')) 
    { 
     cout << "You do not qualify for financial aid."; 
    } 

    else if ((yesNo = 'Y') || (yesNo = 'y')) 
    { 
     cout << "What is your current yearly income?"; 
     cin >> _income; 

     if (_income <= 15000 && _income >= 0) // determining which aid they qualify for. 
     { 
      cout << "You qualify for $1000 of financial aid"; 
     } 
     else if (_income > 15000) 
     { 
      cout << "You qualify for $500 of financial aid"; 
     } 
     else 
     { 
      cout << "Your income must be greater than or equal to 0. Please close the program and try again."; 
     } 
    } 

    else 
    { 
     cout << "Your inputted value must be either 'y' or 'n'. Please close the program and try again."; 
    } 

    cout << endl << endl; 
    return 0; 
} // end function main() 

综上所述,

  1. 如果用户输入“n”或“N”,他们马上告诉他们不”没有资格。

  2. 如果用户输入'y'或'Y',则会询问他们的年收入,并且从中计算出资格。

  3. 如果用户输入除这些输入以外的任何内容,则会收到错误消息。

然而,当我运行这个程序,无论我输入“N”,“Y”或“棉花糖”,它总是有回报:

"You do not qualify for financial aid." 

,好像我什么输入' n'或'N'。我的代码有什么问题?

+1

,因为你犯了一个菜鸟错误,而不是用'='赋值的'=='。 – 101010

+0

如果你的编译器没有产生大量的警告,你应该抛出并获得一个新的警告。 –

回答

1

if语句包含分配(yesNo = 'N'等),并给予yesNo非零,它的计算结果true并执行分支。

若要更正此问题,if应包含相等性测试==;

if ((yesNo == 'N') || (yesNo == 'n')) 

你可能会做同样为其他if语句。与往常一样,编译的最高警告级别为,编译器通常会捕获并警告您这种情况。

一般情况下,可以在if条件下完成分配,但通常不建议使用,因为它很容易导致错误的代码。

+0

非常感谢! –

0

固定第一if声明

if ((yesNo == 'N') || (yesNo == 'n')) 

=是赋值运算符,而==是比较操作。

避免这种情况的一种方法是,通过设置相关标志,编译器将在这种情况下发出警告。另一种避免它的方式是编码和仔细观察。

0

你应该使用比较运算符“==”,而不是赋值操作符“=”

if ((yesNo == 'N') || (yesNo == 'n')) 
{ 
    cout << "You do not qualify for financial aid."; 
} 
0

正如前文所说,如果语句是残疾人 if ((yesNo = 'N') || (yesNo = 'n'))而不是if ((yesNo == 'N') || (yesNo == 'n'))

针对该类型错误的另一个有用的保护是采取与常量的值==操作符的第一个操作数编码的习惯,那就是if (('N' == yesNo) || ('n' == yesNo))

虽然这个编码规则是起初并不明显,任何错误(这是一个相当常见的打字错误)的比较操作将导致一个编译器错误error: lvalue required as left operand of assignment,无论编译器警告配置