What's wrong with this C++ code lottery guessing game? - procedural-programming
I am making a simple lottery game application, where three random numbers between 0 and 10 are generated, if the user gets all three in the right order, they get 1 million. If they get one right then they win 10 dollars, and if they get all three but not in order, they win a thousand, if two are matching then they get $1,000. and if they get none right then they get nothing.
Here's my code here.
int main()
{
cout << "Hello, this is the lottery! Three random numbers between 0 and 10 will be generated. Guess what they are and the order!" << endl;
char answer;
cout << "Do you want to play? (y or n): " << endl;
cin >> answer;
while (answer == 'y' || 'Y')
{
srand((unsigned)time(NULL));
int ran1 = rand() % 10;
int ran2 = rand() % 10;
int ran3 = rand() % 10;
int guess1, guess2, guess3;
cout << "Enter your first number guess: " << endl;
cin >> guess1;
cout << "Enter your second number guess: " << endl;
cin >> guess2;
cout << "Enter your third number guess: " << endl;
cin >> guess3;
if ((guess1 != ran1 || ran2 || ran3) && (guess2 != ran1 || ran2 || ran3) && (guess3 != ran1 || ran2 || ran3))
cout << "You won no money. Sucks for you." << endl;
else
if ((guess1 == ran1 || ran2 || ran3) || (guess2 == ran1 || ran2 || ran3) || (guess3 == ran1 || ran2) || ran3)
cout << "You won 10 dollars!" << endl;
else
if ((guess1 && guess2 == ran1 && ran2) || (guess1 && guess3 == ran1 && ran3) || (guess2 && guess3 == ran2 && ran3))
cout << "You won 100 dollars!" << endl;
else
if ((guess1 == ran1 || ran2 || ran3) && (guess2 == ran1 || ran2 || ran3) && (guess3 == ran1 || ran2 || ran3))
cout << "You won 1 thousand dollars! good job!" << endl;
else
if ((guess1 == ran1) && (guess2 == ran2) && (guess3 == ran3))
cout << "You won 1 million dollars! jackpot!" << endl;
cout << "The numbers were " << ran1 << "," << ran2 << "," << ran3 << endl;
cout << "Play again?(y or n): " << endl;
cin >> answer;
if (answer == 'y')
continue;
else
break;
}
cout << "Game Over" << endl;
system("pause");
return 0;
}
when i run this code, things don't go right with the decisions. All it says is "You won no money. sucks for you". Idk what's wrong maybe its something simple but can someone help? Thanks.
if ((guess1 != ran1 || ran2 || ran3) && (guess2 != ran1 || ran2 || ran3) && (guess3 != ran1 || ran2 || ran3))
should be
if ((guess1 != ran1 || guess1 != ran2 || guess1 != ran3) && (guess2 != ran1 || guess2 != ran2 || guess2 != ran3) && (guess3 != ran1 || guess3 != ran2 || guess3 != ran3))
It is not the order of the conditionals, even though there are flaws there as well, but is the way in which you have written the conditionals.
(guess1 == ran1 || ran2) is different than (guess1 == ran1 || guess1 == ran2)
This is because in c++ a number other than 0 evaluates to true. This is why it is evaluating to true every time.
For example, say guess1 = 1, ran1 = 2, and ran2 = 3, then
(guess1 == ran1 || guess1 == ran2) will evaluate to false, but
(guess1 == ran1 || ran2) will evaluate to true.
Related
String Task Codeforces Problem - https://codeforces.com/problemset/problem/118/A
https://codeforces.com/problemset/problem/118/A my code: #include<iostream> #include<string.h> using namespace std; int main() { string str; cin >> str; for(int i=0; i<sizeof(str); i++) { if(str[i] >= 'A' && str[i] <= 'Z') str[i]+=32; { if(str[i] >= 'a' && str[i] <= 'z' && str[i] != 'a' && str[i] != 'e' && str[i] != 'i' && str[i] != 'o' && str[i] != 'u' && str[i] != 'A' && str[i] != 'E' && str[i] != 'I' && str[i] != 'O' && str[i] != 'U') cout << "." << str[i]; } } return 0; } Where is the problem in this code because it gives wrong when I submit? I am not seeing any problem, could anyone help me to detect?
In the question they have included 'y' as a vowel too. I changed some other stuff too (like, use i<str.size() not i<sizeof(str) ), try the following code it will get accepted : int main() { string str; cin >> str; for(int i=0; i<str.size(); i++) { char temp; temp = str[i]; if(temp >= 'A' && temp <= 'Z') temp = tolower(temp); if(temp != 'a' && temp != 'e' && temp != 'i' && temp != 'o' && temp != 'u' && temp != 'y') cout << "." << temp; } return 0; }
Ruby : Loop, Case and iterations problems ( Rock , Paper, Scissors )
I´m ruby student since 1 month and i´m stuck with one part of my code. The project is based on a game ( rock, paper, scissor) but i´m facing of a problem that i cannot solve for moment. I would like to add one parameters to this game especially when the user enter a wrong input by displaying a message but with the condition i added it´s not working. elsif player_choice != 'r' || player_choice != 'p' || player_choice != 's' || player_choice != 'q' || player_choice != 'x' puts "wrong input" So if you have some advice or some hint to share with me it will be great ! ( see below the entire code ). Thank you very much. #intro puts "***** WELCOME TO PAPER SCISSORS ROCKS GAME *****" puts "Input p = Paper, r = Rocks, s = Scissors, x = Display your score , q = Quit the game. " 25.times { print "-" } puts #scores playerScore = 0 cpuScore = 0 CHOICES = {'p' => 'Paper', 'r' => 'Rock', 's' => 'Scissors', 'x' => 'score','q' => 'quit' } CHOICE_CPU = {'p' => 'Paper', 'r' => 'Rock', 's' => 'Scissors'} loop do # player picks begin puts "Select your pick: (p/r/s/x/q)" player_choice = gets.chomp.downcase end until CHOICES.keys.include?(player_choice) # computer picks cpu_choice = CHOICE_CPU.keys.sample def throw_message(winning_choice) case winning_choice when 'p' puts "Paper wraps Rock!" when 'r' puts "Rock smashes Scissors!" when 's' puts "Scissors cuts Paper!" when 'x' puts "Live score" when 'q' puts "you decide to quit the game" end end #display scores if player_choice == 'x' throw_message(player_choice) puts "PLAYER : #{playerScore} CPU : #{cpuScore}" #quit the game elsif player_choice == 'q' throw_message(player_choice) break # tie result elsif player_choice == cpu_choice puts "It's a Tie ! " #player win elsif (player_choice == 'p' && cpu_choice == 'r') || (player_choice == 'r' && cpu_choice == 's') || (player_choice == 's' && cpu_choice == 'p') throw_message(playe·r_choice) puts "You Win" playerScore +=1 #display invalid input elsif player_choice != 'r' || player_choice != 'p' || player_choice != 's' || player_choice != 'q' || player_choice != 'x' puts "wrong input" #cpu win else throw_message(cpu_choice) puts "Computer Win" cpuScore +=1 end end
Move the CHOICES.keys.include?(player_choice) check to the top of the main if/else logic. If you validate your input as early as possible, the rest of the code can assume the input is good; there's no need to spell out all the possible choices again. I'm using a case/when because it's easier to read than if/elsif. throw_message is defined outside the loop, inside the loop its being redefined repeatedly. And I've removed choices from throw_message which don't have to do with the game; this avoids repeating the full set of choices. def throw_message(winning_choice) case winning_choice when 'p' puts "Paper wraps Rock!" when 'r' puts "Rock smashes Scissors!" when 's' puts "Scissors cuts Paper!" end end def player_wins?(player_choice, cpu_choice) return player_choice == 'p' && cpu_choice == 'r') || player_choice == 'r' && cpu_choice == 's') || player_choice == 's' && cpu_choice == 'p') end loop do # player picks puts "Select your pick: (p/r/s/x/q)" player_choice = gets.chomp.downcase # cpu picks cpu_choice = CHOICE_CPU.keys.sample case when !CHOICES.keys.include?(player_choice) puts "wrong input" when player_choice == 'x' puts "Live score" puts "PLAYER : #{playerScore} CPU : #{cpuScore}" when player_choice == 'q' puts "you decide to quit the game" break when player_choice == cpu_choice puts "It's a tie!" when player_wins?(player_choice, cpu_choice) throw_message(player_choice) puts "You Win" playerScore +=1 else throw_message(cpu_choice) puts "Computer Win" cpuScore +=1 end end
URLEncoding from Objc to Swift 3
We are using following URL encoding in Objective C now we are migrating to swift .what will be the equivalent encoding for below ObjC to swift 3. - (NSString *) URLEncodedString { NSMutableString * output = [NSMutableString string]; const unsigned char * source = (const unsigned char *)[self UTF8String]; int sourceLen = strlen((const char *)source); for (int i = 0; i < sourceLen; ++i) { const unsigned char thisChar = source[i]; if (thisChar == ' '){ [output appendString:#"+"]; } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || (thisChar >= 'a' && thisChar <= 'z') || (thisChar >= 'A' && thisChar <= 'Z') || (thisChar >= '0' && thisChar <= '9')) { [output appendFormat:#"%c", thisChar]; } else { [output appendFormat:#"%%%02X", thisChar]; } } return output; }
This code should generate exactly the same result as your Objective-C code. (Should compile and work as expected in both Swift 3 and 4.) extension String { var urlEncoded: String { var output = "" for thisChar in self.utf8 { switch thisChar { case UInt8(ascii: " "): output.append("+") case UInt8(ascii: "."), UInt8(ascii: "-"), UInt8(ascii: "_"), UInt8(ascii: "~"), UInt8(ascii: "a")...UInt8(ascii: "z"), UInt8(ascii: "A")...UInt8(ascii: "Z"), UInt8(ascii: "0")...UInt8(ascii: "9"): output.append(Character(UnicodeScalar(UInt32(thisChar))!)) default: output = output.appendingFormat("%%%02X", thisChar) } } return output } } print("https://www.google.es".urlEncoded) //->https%3A%2F%2Fwww.google.es Some points: You can iterate on each UTF-8 byte with for thisChar in self.utf8 To convert a string literal (actually a UnicodeScalar Literal) to a UInt8, you can use UInt8(ascii:) You should better consider using addingPercentEncoding(withAllowedCharacters:) with proper CharacterSet and pre/post-processing
You can probably do it this way - extension String{ func urlEncodedString() -> String { var output = String() let source: [UInt8] = Array(self.utf8) let sourceLen: Int = source.count for i in 0..<sourceLen { let thisChar = source[i] if thisChar == UInt8(ascii: " ") { output += "+" } else if thisChar == UInt8(ascii: ".") || thisChar == UInt8(ascii: "-") || thisChar == UInt8(ascii: "_") || thisChar == UInt8(ascii: "~") || (thisChar >= UInt8(ascii: "a") && thisChar <= UInt8(ascii: "z")) || (thisChar >= UInt8(ascii: "A") && thisChar <= UInt8(ascii: "Z")) || (thisChar >= UInt8(ascii: "0") && thisChar <= UInt8(ascii: "9")) { output += "\(Character(UnicodeScalar(UInt32(thisChar))!))" } else { output += String(format: "%%%02X", thisChar) } } return output } }
Just replace below code (Swift 3.1.1): func urlEncodedString() -> String { var output = String() let source: [UInt8] = UInt8(utf8) let sourceLen: Int = strlen(CChar(source)) for i in 0..<sourceLen { let thisChar: UInt8 = source[i] if thisChar == " " { output += "+" } else if thisChar == "." || thisChar == "-" || thisChar == "_" || thisChar == "~" || (thisChar >= "a" && thisChar <= "z") || (thisChar >= "A" && thisChar <= "Z") || (thisChar >= "0" && thisChar <= "9") { output += "\(thisChar)" } else { output += String(format: "%%%02X", thisChar) } } return output }
Try this swift 3 compatible code. I've tested it in a playground and works fine. extension String { func urlEncodedString() -> String { var output = "" for thisChar in self.utf8 { if thisChar == UInt8(ascii: " ") { output += "+" } else if thisChar == UInt8(ascii: ".") || thisChar == UInt8(ascii: "-") || thisChar == UInt8(ascii: "_") || thisChar == UInt8(ascii: "~") || (thisChar >= UInt8(ascii: "a") && thisChar <= UInt8(ascii: "z")) || (thisChar >= UInt8(ascii: "A") && thisChar <= UInt8(ascii: "Z")) || (thisChar >= UInt8(ascii: "0") && thisChar <= UInt8(ascii: "9")) { output += "\(Character(UnicodeScalar(UInt32(thisChar))!))" } else { output += String(format: "%%%02X", thisChar) } } return output } } Example usage: let url = "https://www.google.es".urlEncodedString() print(url)
Objective C - Only part of an if condition working
I have an if statement and the statement is only being run on the fist third of the condition (before the fist 'or' (||). if (((day == 1) && (period == 1)) || ((day == 3) && (period == 3)) || ((day = 5) && (period == 1))) { NSLog(#"Return Line 1"); } The condition is only met when day = 1 and period = 1. Could someone help me get the other arrangements working in the condition. Thank you in advance.
if (((day == 1) && (period == 1)) || ((day == 3) && (period == 3)) || ((day == 5) && (period == 1))) { NSLog(#"Return Line 1"); } In your code there is only one = instead of == The error in your code is ((day = 5) && (period == 1))
Url contain special charectors
I am trying to establish a https connection but my URL contains some special characters, so creating the connection is throwing an Exception. How do I avoid this problem?
You can encode like this, public class URLUTF8Encoder { final static String[] hex = { "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07", "%08", "%09", "%0a", "%0b", "%0c", "%0d", "%0e", "%0f", "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17", "%18", "%19", "%1a", "%1b", "%1c", "%1d", "%1e", "%1f", "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27", "%28", "%29", "%2a", "%2b", "%2c", "%2d", "%2e", "%2f", "%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37", "%38", "%39", "%3a", "%3b", "%3c", "%3d", "%3e", "%3f", "%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47", "%48", "%49", "%4a", "%4b", "%4c", "%4d", "%4e", "%4f", "%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57", "%58", "%59", "%5a", "%5b", "%5c", "%5d", "%5e", "%5f", "%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67", "%68", "%69", "%6a", "%6b", "%6c", "%6d", "%6e", "%6f", "%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77", "%78", "%79", "%7a", "%7b", "%7c", "%7d", "%7e", "%7f", "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87", "%88", "%89", "%8a", "%8b", "%8c", "%8d", "%8e", "%8f", "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97", "%98", "%99", "%9a", "%9b", "%9c", "%9d", "%9e", "%9f", "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7", "%a8", "%a9", "%aa", "%ab", "%ac", "%ad", "%ae", "%af", "%b0", "%b1", "%b2", "%b3", "%b4", "%b5", "%b6", "%b7", "%b8", "%b9", "%ba", "%bb", "%bc", "%bd", "%be", "%bf", "%c0", "%c1", "%c2", "%c3", "%c4", "%c5", "%c6", "%c7", "%c8", "%c9", "%ca", "%cb", "%cc", "%cd", "%ce", "%cf", "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", "%d8", "%d9", "%da", "%db", "%dc", "%dd", "%de", "%df", "%e0", "%e1", "%e2", "%e3", "%e4", "%e5", "%e6", "%e7", "%e8", "%e9", "%ea", "%eb", "%ec", "%ed", "%ee", "%ef", "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7", "%f8", "%f9", "%fa", "%fb", "%fc", "%fd", "%fe", "%ff" }; public static String encode(String s) { StringBuffer sbuf = new StringBuffer(); int len = s.length(); for (int i = 0; i < len; i++) { int ch = s.charAt(i); if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' sbuf.append((char)ch); } else if ('a' <= ch && ch <= 'z') { // 'a'..'z' sbuf.append((char)ch); } else if ('0' <= ch && ch <= '9') { // '0'..'9' sbuf.append((char)ch); } else if (ch == ' ') { // space sbuf.append('+'); } else if (ch == '-' || ch == '_' // unreserved || ch == '.' || ch == '!' || ch == '~' || ch == '*' || ch == '\'' || ch == '(' || ch == ')') { sbuf.append((char)ch); } else if (ch <= 0x007f) { // other ASCII sbuf.append(hex[ch]); } else if (ch <= 0x07FF) { // non-ASCII <= 0x7FF sbuf.append(hex[0xc0 | (ch >> 6)]); sbuf.append(hex[0x80 | (ch & 0x3F)]); } else { // 0x7FF < ch <= 0xFFFF sbuf.append(hex[0xe0 | (ch >> 12)]); sbuf.append(hex[0x80 | ((ch >> 6) & 0x3F)]); sbuf.append(hex[0x80 | (ch & 0x3F)]); } } return sbuf.toString(); } } referenced By HTTP://WWW.W3.ORG/INTERNATIONAL/URLUTF8ENCODER.JAVA
There are several solutions for this. Pick the one you like most.