curse you microsoft...Originally Posted by linkmaster03
EDIT: wrong quote
curse you microsoft...Originally Posted by linkmaster03
EDIT: wrong quote
Last edited by jimi_hendrix; August 6th, 2008 at 12:29 PM.
I think usernames should be allowed to contain numbers. Considering many usernames contain atleast one number.
Code:#include <iostream> #include <string> using namespace std; int main () { int age; int ID; string name; cout << "put in your forum name foo!" << endl; cin >> name; cout << "how old are you?" << endl; cin >> age; while ( age > 100 || age < 1) { cout << "dude stop lying!" << endl; cout << "input your real age" << endl; cin >> age; } cout << "input your forum I.D" << endl; cin >> ID; while ( ID < 1 || ID > 999999) { cout << "I think you put your I.D in wrong, please input it again?" << endl; cin >> ID; } cout << "You are " << name << ", aged " << age << " next year you will be " << age + 1 << ", with user id " << ID << ", the next user is " << ID + 1; // You are LaRoza, aged 20 next year you will be 21, with user id 266234, the next user is 266235. return 0; }
When it is finished. Since you expressed a desire to take part, I would wait for you
I don't know if the forum has a user name limit, and I chose 20 sort of randomly. This is to prevent paranoia about extremely long buffers for C programmers. It shouldn't crash the program. Basically, a user name is a maximum of 20 characters for it to pass. How it handles it is up to you. I don't care if it truncates it or asks for a shorter name.So for C programmers, if a user enters a name longer than 20, it should be truncated? Or should there be an error message? And should there be a error message if a user tries to input a ridiculously long name in the input field?
If a C version is made that can handle any length, I'd be impressed
If you want there to be.Also, is there a max age?
Cool contest,
Rich
You can have one made with a GUI. It has to be free, and let me know what I need to compile it though. Packages should be in Ubuntu repos.
Not blank for a user name (no leading spaces either)
For a valid age, it has to be a possible age. So 0 is out or negative numbers at the very least.
No. As I mentioned, ascii will be used for testing, but if there are highly competitive versions (which I doubt, as it would require 10 to be equal), I will use unicode.
@laroza, i think it would be good to update these "clarifications" to the first post and then remove those posts that ask questions, to avoid cluttering the thread. ie, only posts of solutions should remain.
Doing this in python seemed very straight forward, so I thought I'd try it out in bash. Fairly amusing too, since I've only ever used bash scripts to sed and grep through files and string sed, grep, find, and rename commands together..
Originally I was going to modify the user's input with sed and compare it to the original input. The idea was to force the input to be correct with sed, and then if it wasn't I could tell by seeing if userinput was equal to modified userinput. It was a mess.
ANYWAY, I still ended up doing it in bash, since I'd already started into it.
I had some odd problems with this one. For instance, could someone explain to me why [ $userinput -lt 4 ] works and [ $userinput < 4 ] doesn't ?? I thought they'd act exactly the same, but when I used '<' the elif would never run, even when it should have been true.
Anyway, I supose I still took the easy way out, since bash's variables aren't really typed, but I don't have time to mess with a language I'm not familiar with at all right now, and the only ones I've looked into are bash and python.
Entry:
PHP Code:
#!/usr/bin/env bash
# It's ugly, but it works
# Also, -- formated to have no horizontal scroll on the forums.
promptText(){ # I have no idea why I didn't use the prompt
# flag read has. This is a pretty puny function.
echo -n "Input "$currant "('quit' to exit): "
} # $currant is set before each function is called.
nameCheck(){
promptText
read userinput
if [ $userinput = 'quit' ]; then echo "I sure hope 'quit' isn't your username."
exit; fi
if [ $userinput = ]; # Makes sure that something is input
then echo " Input error, please enter your username!"
echo " Your username must contain at least 1 character."
nameCheck 2> /dev/null
else name=$userinput
fi
}
ageCheck(){
promptText
read userinput
if [ $userinput = 'quit' ]; then exit; fi
if [ ! $(echo "$userinput" | grep -E "^[0-9]+$") ] # test for positive number
then echo " Input error."
echo " Your age must be a positive number between 3 and 120."
ageCheck 2> /dev/null
elif [ $userinput -lt 4 ] # test to make sure age is > 4
then echo " Input error: I think you are more then "$userinput" years old."
echo " Your age must be a number between 3 and 120."
ageCheck 2> /dev/null
elif [ $userinput -gt 120 ] # test to make sure age is < 120
then echo " Input error: I think you are less then "$userinput" years old."
echo " Your age must be a number between 3 and 120."
ageCheck 2> /dev/null
else age=$userinput
fi
}
forumidCheck(){
promptText
read userinput
if [ $userinput = 'quit' ]; then exit; fi
if [ ! $(echo "$userinput" | grep -E "^[0-9]+$") ] # test for positive number
then echo " Input error. I doubt "$userinput" is your forum ID."
echo " Your forum ID must be a positive number greater then 0."
forumidCheck 2> /dev/null
elif [ $userinput -lt 1 ] # test to make sure forum ID is not 0
then echo " Input error. I doubt "$userinput" is your forum ID."
echo " Your forum ID must be a positive number greater then 0."
forumidCheck 2> /dev/null
else forumid=$userinput
fi
}
currant="your name"; clear
nameCheck 2> /dev/null # sets $name to entered username
currant="your age"; clear
ageCheck 2> /dev/null # sets $age to entered age ( 4-120 )
currant="your forum ID"; clear
forumidCheck 2> /dev/null # sets $forumid to entered ID ( > 0 )
# NOTE: The above functions are called with errors redirected to /dev/null
# They were sometimes giving unimportant errors out that should
# not effect the script.
clear; echo " " # formated the variables bold below ||
# \/
echo -ne "Your name is \033[1m"$name"\033[0m, you are \033[1m"$age"\033[0m years old, and \
you smell bad. \nAlso your forum ID is \033[1m"$forumid"\033[0m. The next user is \
\033[1m"$(($forumid+1))"\033[0m."
echo -e " \n"
Last edited by arsenic23; August 6th, 2008 at 06:48 AM. Reason: copy paste typo
please see the link in my sig to learn bash. In it, you will come across this. you will understand after reading that. also you might want to implement a while loop
Code:while true do #ask for input # if user ask for quit, then quit # else do something else ... .. done
Last edited by ghostdog74; August 6th, 2008 at 04:59 AM.
Thanks, the bash help I had been using never explained the need for "(( ))" when comparing ints. In fact it had a chart that said that -lt and < where the same thing. I had tried something like [ $((val < 9)) ] thinking it was something like that and having used $(( stuff )) to do simple math is bash before. heheh
So is there a terribly good reason to use a while loop in this situation? I really only did it like this because I was interested in seeing if bash would get angry if I had functions call themselves. I put in incorrect input over and over again to see if it would raise a fuss, but it seemed to work alright.
HTML 4.01 Strict
Code:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>[Beginner] Programming Challenge: 2</title> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.2.6");</script> <script type="text/javascript"> function as_int(x) { var notdigit = function(c){ return ("-0123456789".indexOf(c) == -1); } if(!x.length) throw "No integer to parse"; for(var c in x) if(notdigit(x[c])) throw "Invalid character"; return parseInt(x); } $(function() { $("#submit_user").click(function() { var errors = []; var username = $("#username").val(); if(!username.length) errors.push("* No username given!"); if(" \t".indexOf(username[0]) != -1) errors.push("* Username cannot begin with whitespace!"); try { var age = as_int($("#age").val()); if(age < 1) errors.push("* Age cannot be < 1"); } catch(e) { errors.push("* Invalid age!"); } try { var id = as_int($("#id").val()); if(id < 1 || id > 999999) errors.push("* Invalid ID range!"); } catch(e) { errors.push("* Invalid ID!"); } if(errors.length > 0) { alert("The following errors occurred:\n\n" + errors.join("\n")); } else { $("#username").val(""); $("#age").val(""); $("#id").val(""); var x = $("<div/>"); x.text("You are " + username + ", aged " + age + " next year you will be " + (age+1) + ", with user id " + id + ", the next user is " + (id+1) + "."); x.hide(); $("#output").prepend(x); x.show(500); } }); }); </script> </head> <body> <table style="text-align:center; border: 2px dashed black; padding:8px; margin-bottom:8px;"> <tr><td>Username:</td><td><input type="text" id="username"></td></tr> <tr><td>Age:</td><td><input type="text" id="age"></td></tr> <tr><td>ID:</td><td><input type="text" id="id"></td></tr> <tr><td colspan="2"><button id="submit_user">Submit user!</button></td></tr> </table> <div id="output" style="padding:8px; border: 1px solid black; margin-bottom:8px;"></div> <p style="text-align:center;"> For more programming challenges, visit <a href="http://www.challenge-you.com">Challenge-You!</a> </p> </body> </html>
Bookmarks