2013-09-12 5 views
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; 
} 

Я пытаюсь вывести управляемое строковое значение, но строка, которая выводится в последней строке, пуста?Пустая строка в C++

+0

НомерType, который вы назначаете в if/else, является локальным для этого блока и не присваивает его типу numberType за пределами этого блока. Удалите тип объявления 'string' при назначении. Вы получите то, что ищете. – asgs

ответ

8

В ваших if и else блоков, вы фактически создаете новые переменные с именем 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; 
... 

Это должно теперь дать вам правильный и желаемый результат.

0

номерType тот, значение которого обновляется, является локальным в блоке if и else.

удалить строку

if (userInput % 2 == 0) 
{ 
    numberType = "Even";  
} 
else 
{ 
    numberType = "Odd"; 
} 
2

Проблема в том, что вы обновляете numberType. Это фактически объявляет новый тип numberType, поскольку он находится в другой области.

Что вы хотите сделать это

if (userInput % 2 == 0) 
{ 
    numberType = "Even";  
} 
else 
{ 
    numberType = "Odd"; 
} 
0

Во-первых, вы numberType повторного объявления, а это означает, что существует только в внутренней сферы он объявлен в; эффективно, numberType существует только в пределах if или else. Затем вы распечатываете исходную внешнюю область numberType, которая была просто построена по умолчанию. Чтобы это исправить, не переобъявить, но присвоить ему другое значение:

string numberType; 
... 
if(userInput % 2 == 0) { 
    numberType = "Even"; 
} else { 
    numberType = "Odd"; 
} 
1

Beacuse вы повторно объявленную numberType это станет локальным для if-else block, В этом случае локальной переменной if-else получит modified.So просто use,

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; 
} 
Смежные вопросы