C ++ код, bools и циклы - PullRequest
1 голос
/ 10 ноября 2010

Я новичок в программировании на C ++ и ничего не делал за неделю, поэтому я возился с вещами, которые знаю до сих пор, чтобы посмотреть, придется ли мне снова что-то обсуждать.

Тем не менее, я столкнулся с проблемой с bools (до сих пор не использовал их).

Источник:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
   signed long int x;
   unsigned short int y = 12345;
   bool POSX;
   bool yes;

   cin >> x;

   if (x >= 0)
   {
      POSX = true;
   }//end of if for bool
   else
   {
      POSX = false;
   }

   cout << "This is the current value of X:  " << x << endl;
   if(x < y)
   {
      cout << "x is less than the integer y \n \n";
   }//end of if
   else
   {
      cout << "y is greater than the integer x \n \n";
   }//end of else
   cout << "The current value of Y is: " << y << endl << endl << endl;
   cout << "Is X positive?: " << POSX << endl << endl;

   cout << "How much more would X need to be to surpass y? The answer is: " << y - x << endl;
   if(x > y)
   {
      cout << "well, actually, x is greater than y by: " << y - x << " so you would need to add that to get to the value of x" <<endl <<endl;
   }//end of if

   cout << "Do you like cookies? Enter below. . ." <<endl;
   cin >> yes;

   if(yes = "yes") // should this be if(yes = 1)?
   {
      cout << "I do too! But only when they are soft and gooey!";
   } //end of if for bool yes
   else
   {
      cout << "Well, join the dark side, and you may be persuaded by the power of cookies and the power of the dark forces!";
   }//end of else for bool yes
   char f;
   cin >> f;
   return 0;
 } //end of main

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь скомпилировать, программа закрывается, прежде чем я вижу результат вопроса о cookie (поэтому мне нужно установить точку останова в компиляторе), и, во-вторых, смотрите ответ, он всегда приходит с ответом да, а не что-нибудь еще. Таким образом, если я поставлю no в качестве входных данных, он все равно выведет if для bool yes, будучи истинным. Я не уверен, правильно ли я определяю условие if в последнем утверждении. Может ли кто-нибудь помочь?

Ответы [ 5 ]

4 голосов
/ 10 ноября 2010

Хорошо, две вещи.Ваша главная проблема заключается в следующем:

if(yes = "yes")

'yes' определяется как тип bool, т. Е. Может содержать значения «true» или «false».Вы пытаетесь сравнить сравнение (на самом деле пытаетесь назначить из-за использования только одного = вместо ==, как вы проверяете равенство) логическое значение со строкой «да».Ну, это не имеет смысла.Должно быть:

if( yes )

Вот и все.'yes' уже является логическим значением, и выражение в операторе if не требует больше.

Во-вторых, подобные конструкции избыточны и не нужны:

 if (x >= 0)
  {
  POSX = true;
  }//end of if for bool
 else
  {
  POSX = false;
  }

Вы проверяете логическое значениезначение, а затем присвоение.Просто сделайте это в одной строке следующим образом:

POSX = (x >=0 );

Кроме того, вы обычно не используете все заглавные буквы для локальных переменных.

Еще одна вещь;вы вводите строковые данные («нет» или «да»), а cin ожидает int.Я предлагаю вам потратить некоторое время на изучение типов данных.

2 голосов
/ 10 ноября 2010

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь скомпилировать, программа закрывается, прежде чем я вижу результат вопроса о cookie

Это потому, что вы аннулировали cin, когдавы ставите «нет» в качестве значения.operator>>(std::istream&, bool&) предполагает числовой ввод.Значения, не равные нулю, будут интерпретироваться как true, а значения, равные нулю, будут интерпретироваться как false.

Если вы введете вход, который не может быть проанализирован как числовой, badbit будет установлен напоток.Попытка использовать поток, пока он находится в этом состоянии сбоя, приведет к чтению мусора (или, скорее, неопределенному поведению), и к отсутствию продвижения указателя get в потоке.

1 голос
/ 10 ноября 2010

Есть несколько вещей, которые идут не так, но я думаю, что одна из них сбивает вас с толку: cin >> yes; В C ++ false - это 0. Поэтому, скорее всего, это вернет true для любых ненулевых входных значений. Более надежный подход - запрашивать и оценивать что-то еще, например, ввод символов:

cout << "Do you like cheese? (y/n) ";
char c;
cin >> c;

if ( c == 'y' || c == 'Y' )
   do whatever;

Кроме того, при тестировании условных выражений обязательно используйте "double-equals", condition == true. Еще лучше, принять стенографию, где:

  • (condition) означает (condition == true)
  • (! condition) означает (condition == false)

Надеюсь, что это даст вам старт в правильном направлении.

1 голос
/ 10 ноября 2010

Измените yes на строку (#include <string>), а затем сравните ее следующим образом:

if (yes == "yes")
0 голосов
/ 06 декабря 2016

Вот отредактированный исходный код, я внес изменения, поэтому изучите его и сравните с исходным кодом. * е *

#include <iostream>
#include <string>
#include <iomanip> //headerfile for boolalpha
using namespace std;

int main()
{
    string answer;
   signed long int x;
   unsigned short int y = 12345;
   bool POSX;
   bool yes;
   cout<<"Enter any value: ";
   cin >> x;

   if (x >= 0)
   {
       cout << boolalpha; // print bools as true or false
      POSX = true;
   }//end of if for bool
   else
   {
    cout << boolalpha; // print bools as true or false
      POSX = false;
   }

   cout << "This is the current value of X:  " << x << endl;
   if(x < y)
   {
      cout << "x is less than the integer y \n \n";
   }//end of if
   else
   {
      cout << "y is greater than the integer x \n \n";
   }//end of else
   cout << "The current value of Y is: " << y << endl << endl << endl;
   cout << "Is X positive?: " << POSX << endl << endl;

   cout << "How much more would X need to be to surpass y? The answer is: " << y - x << endl;
   if(x > y)
   {
      cout << "well, actually, x is greater than y by: " << y - x << " so you would need to add that to get to the value of x" <<endl <<endl;
   }//end of if

   cout << "Do you like cookies? Yes/No. . ." <<endl;
   cin >> answer; //this is a string 

   if(answer =="yes") // it can be a simple if statement
   {
      cout << "I do too! But only when they are soft and gooey!";
   } //end of simple if 
   else
   {
      cout << "Well, join the dark side, and you may be persuaded by the power of cookies and the power of the dark forces!";
   }//end of else for simple if

   return 0;
 } //end of main`
...