2013-03-24 2 views
-1
#include <iostream> //include header files 

using namespace std; 

int main() //start of main body 

{ 

int num; //declaring integer 

int control=1; //declaring integer 

while(control==1)//start of loop, as long as condition is true 
{ 
    cout << "Press 1 for coffee" << endl; //writes to standard o/p 
    cout << "Press 2 for tea" << endl; 
    cout << "Press 3 for hot chocolate" << endl; 
    cout << "Press 4 for soft drink" << endl; 
    cout << "Press 5 to exit" << endl; 
    cin >> num; 


if (num == 1) //code to execute if integer = 1 
{ 
    cout << "coffee selected" << endl; 
} 
else if (num == 2) //code to execute integer = 2 
{ 
    cout << "tea selected" << endl; 
} 
else if (num == 3) //code to execute if integer = 3 
{ 
    cout << "hot chocolate selected" << endl; 
} 
else if (num == 4) //code to execute if integer = 4 
{ 
    cout << "soft drink selected" << endl; 
} 
else if (num == 5) //code to execute if integer = 5 
{ 
    cout << "Exit Program" << endl; 
    control=0; 
} 


} 

}сравнение с строковых литералов результатов в неопределенном поведении, ошибка

вот мой ammended код это работает. Однако я не был уверен в инициализации целого числа num, поэтому я оставил его, но код все еще выполняется и работает правильно.

+4

'если (число == 1)', ** не ** 'если (число == "1")'. – us2012

+1

(Добро пожаловать в stackoverflow.Пожалуйста, прочтите FAQ и для будущих вопросов, имейте в виду, что люди с большей вероятностью помогут вам, если вы (1) сделаете короткий и краткий пример, который показывает, что вы имеете в виду, - вы можете сократить 80% вашего кода, и это все еще показывают проблему и (2) предоставляют точное сообщение об ошибке с номерами строк и отмечают соответствующие строки в вашем коде, поэтому нам не нужно проходить его по строкам.) – us2012

+4

Может также хотеть фактически присвоить что-то 'num 'в какой-то момент. – JasonD

ответ

2

Вы сравниваете целые числа с строками здесь num == "1". Вместо этого используйте num == 1

3

Ошибка в том, что вы сравниваете в int (num), строковые литералы, такие как "1". Этот конкретный строковый литерал имеет тип const char[2], который распадается на const char*, следовательно, ошибка компилятора.

Вы должны сравнивать числа с числами, например

if (num == 1) { .... } 
2

Вы пытаетесь сравнить номер с строкового литерала. Не хороший план. Попробуйте

if(num==1)

не

if(num=="1")

Во-вторых, num не определено. Попробуйте установить для него значение.

Компилятор C++ даст вам ошибки, поскольку вы не можете сравнивать два разных типа данных. Подробнее о сравнении here

2

Вам не нужно, чтобы menu был string, так как вы просите пользователей ввести целые числа. Просто используйте

if (num == 1) 

не

if (num == "1") 
1

целое число сравниваемых со строкой :)

num == "1" 

Не допускается, кстати я думаю, что вместо "номер" вы намеревались "меню", который является строкой?

1

сначала, ваш номер неинициализирован. , когда вы будете это изменить, то и изменить сравнение с num == "1" к num == 1

В настоящее время вы кладете вход в menu переменных, когда вы делаете getline (cin, menu, '\n'); так что вы должны изменить это, если вы хотите сохранить вход в num.

рядом, это очень хороший код, я бы выбрал 4)

+0

спасибо, ребята, я внес изменения в число от num == "1" до num == 1 и вынул строку и сохранил вход в переменной num, я также взял инструкцию else, поскольку это было не нужен, но я havent инициализировал переменную num, но код все еще выполняет эту хорошую практику? – user2204993

+0

@ user2204993 внесите эти изменения в код, чтобы мы могли видеть, что вы сделали, и каков ваш вопрос сейчас – 4pie0

Смежные вопросы