1
#include <iostream>
#include <string> 

using namespace std;

int main()
{
    int userInput;
    string numberType;
    cout << "Enter a number and I will Check to see if it is odd or even" << endl;
    cin >> userInput;
    if (userInput % 2 == 0)
    {
        string numberType = "Even";     
    }
    else
    {
        string numberType = "Odd";
    }
    cout << "The number you input is " << numberType << endl;
    return 0;
}

我正在尝试输出经过操作的字符串值,但最后一行输出的字符串显示为空白?

4

5 回答 5

8

在您的ifandelse块中,您实际上是在创建名为 的新变量numberType,并且这些新变量隐藏了numberType您之前声明的原始变量。您对这些变量所做的任何更改都不会反映到原始numberType,因为它们没有引用它。

要解决该问题,请删除string部分(类型,因为具有这些表示您正在定义新变量),因为您不想定义这些新变量,并且想要使用先前定义的numberType.

if (userInput % 2 == 0)
{
    numberType = "Even";   // Look ma, no string!
}
else
{
    numberType = "Odd";   // Also here ma!
}

使用修改和固定的代码,您现在指的是numberType您打算放置值"Even""Odd".

...
int userInput;
string numberType;   // This is now where the values be put in
cout << "Enter a number and I will Check to see if it is odd or even" << endl;
...

这现在应该为您提供正确和所需的输出。

于 2013-09-12T03:17:24.763 回答
2

问题是您要重新声明 numberType。这实际上声明了一个新的 numberType,因为它在不同的范围内。

你想做的是这个

if (userInput % 2 == 0)
{
    numberType = "Even";     
}
else
{
    numberType = "Odd";
}  
于 2013-09-12T03:17:29.250 回答
1

因为您重新声明numberType这将成为本地if-else block变量,在这种情况下,变量本地变量if-else将被修改。所以只需使用,

int main()
{
    int userInput;
    string numberType;
    cout << "Enter a number and I will Check to see if it is odd or even" << endl;
    cin >> userInput;
    string numberType;        //variable local to function .You can modify this variable anywhere inside this function

    if (userInput % 2 == 0) {
       numberType = "Even";     //here you will refer already declared  variable local function. So no need to declare it here again as that will be local to this block.
    } else {
       numberType = "Odd";     
    }
    cout << "The number you input is " << numberType << endl; // Print modified value of string.

    return 0;
}
于 2013-09-12T03:20:13.957 回答
0

numberType在 if 和 else 块中,其值被更新的那个是本地的。

删除字符串

if (userInput % 2 == 0)
{
    numberType = "Even";     
}
else
{
    numberType = "Odd";
}
于 2013-09-12T03:17:14.590 回答
0

首先,您正在重新声明numberType,这意味着它仅存在于声明它的内部范围内;实际上,numberType仅存在于iforelse块中。然后打印出原始的外部范围numberType,它只是默认构造的。要解决此问题,请不要重新声明它,而是为其分配一个不同的值:

string numberType;
...
if(userInput % 2 == 0) {
    numberType = "Even";
} else {
    numberType = "Odd";
}
于 2013-09-12T03:19:13.857 回答