2015-12-03 3 views
0

Я пытаюсь создать программу, которая будет угадывать номер, который вы вводите. Я немного смущен тем, что я делаю неправильно. Программа компилируется, и все работает, но до определенной степени. Программа работает до тех пор, пока она не спросит вас о вводе после того, как она угадает 2 раза. В третий раз программа выходит. Например, мой номер равен 700. Программа всегда будет предполагать 500 в первый раз. Поскольку 700 - более 500, вы выбрали вариант «Высшее» (код ниже). Программа изменит переменную «Низкий» От 0 до 500, текущая догадка. Затем он добавит «Низкий» к «Высокий» (1000 при первом предположении) и изменит ответ на переменную «Угадай». Затем он примет переменную «Угадай» и разделит ее на 2, сделав это новой догадкой, а затем напечатав ее как предположение в программе. Так что, если число было более 500, второе предположение было бы 750. Теперь на этот раз уравнение изменится. Он изменит переменную «Высокий» на текущую догадку и снова добавит «Низкий» к «Высокий». Ответ будет изменен на догадку, а затем еще раз делен на 2, давая 625. Поскольку 700 все еще выше 625, он снова будет использовать уравнение с первого входа. Но вместо этого программа просто выходит. Любая помощь? Если мне нужно будет уточнить (снова), скажите об этом. Я предполагаю, что я делаю что-то неправильно в цикле, если где яC++ If Loop Error

if (status == ...) 

и так далее.

Код:

#include #include <iostream> 
#include <cstdlib> 
#include <time.h> 
using namespace std; 
int main() 
{ 
int number,low,high,guess,guesses,status; 
low = 0; 
high = 1000; 
guesses = 0; 
cout<<"Please pick a number between 1 and 1000 \n"; 
do 
    { 
     cin>>number; 
     if (number > 1000) cout<<"Please pick a number less than 1000 \n"; 
    } while (number > 1000); 
cout<<"Thank you. Now I will guess your number! \n"; 
guess=500; 
cout<<"Is your number "<<guess<<"? \n"; 
cout<<"[1] Yes \n"<<"[2] Higher \n"<<"[3] Lower \n"; 
do 
    { 
     cin>>status; 
     if ((status != 1) && (status != 2) && (status != 3)) cout<<"Please select option 1, 2, or 3 \n"; 
    } while ((status != 1) && (status != 2) && (status != 3)); 
do 
    { 
     if (status == 2) 
     low=guess; 
     guess=low+high; 
     guess=guess/2; 
     guesses=guesses+1; 
     cout<<"Is your number "<<guess<<"? \n"; 
     cout<<"[1] Yes \n"<<"[2] Higher \n"<<"[3] Lower \n"; 
     cin>>status; 
     if (status == 3) 
     high=guess; 
     guess=low+high; 
     guess=guess/2; 
     guesses=guesses+1; 
     cout<<"Is your number "<<guess<<"? \n"; 
     cout<<"[1] Yes \n"<<"[2] Higher \n"<<"[3] Lower \n"; 
     cin>>status; 
     if (status == 1) 
     cout<<"I guessed your number! It only took me "<<guesses<<" tries to guess it!"; 
    } while ((status = 3) && (status = 2) && (status = 1)); 
return 0; 

}

+0

Первая строка в последнем цикле 'if (status = 2);' вероятно, не то, что вы намеревались. Он всегда меняет статус на 2 и ничего больше. Вы хотите что-то вроде 'if (status == 2) {...}'. Редактировать: Мой совет - всегда использовать '{}' после 'if', чтобы сделать код менее подверженным ошибкам, особенно если вы новичок. –

+0

Если вы «получаете ошибки в строках 28, 36 и 44», то ваша программа делает ***, а не компиляцию ***. При работе с компьютерами в целом «я получаю ошибки» не считается приемлемым описанием проблемы. При программировании вдвойне. –

+1

^^^ ошибка/предупреждающие сообщения пожалуйста. Также обратите внимание, что в разделах SO code нет номеров строк. –

ответ

1

Вы, конечно, есть некоторый сомнительный код здесь. Например,

if (status = 2); 

Что это за цель? Прежде всего, если вы хотите, чтобы сравнить, если status равно 2, правильный синтаксис:

if (status == 2) 

Во-вторых, даже с правильным синтаксисом, линии заканчивается точкой с запятой (;). Это означает, что у вас есть пустой оператор, который выполняется, если условие if истинно.

И наконец, при публикации таких вопросов, пожалуйста, укажите, какие строки вызывают ошибки. В списках кода Stackoverflow не отображаются номера строк, и немного необоснованно ожидать, что кто-то посчитает все ваши строки, чтобы они могли вам помочь.

+0

Приносим извинения за допущение, что строки Stackoverflow перечислены, но я добавил журналы, которые выдавали ошибки, которые отображали строку, которая давала ошибки. Также изменилось на if (status == ....). Снятие точки с запятой заканчивается программой после третьего входа. –

+0

@JarrodA. обновите свой код в вопросе – nullpointer

+0

Обновленный код, извините за неряшливую работу, пытаясь сделать сразу 5 вещей:/ –