No, because there is a "return" in there.
Sorry. Missed it. I hate doing stuff like that. Reminds me of goto.
Blech.
So much easier to read as an if/then/else.
B
No, because there is a "return" in there.
Users/scottdean/documents/number2number.c: In function ‘main’:
/Users/scottdean/documents/number2number.c:37: error: expected ‘;’ before ‘{’ token
#include <stdio.h>
main ()
{
int first_number, second_number, number ;
printf ("Enter a two digit number: ") ;
scanf ("%d", &number) ;
if (number == 11) {
printf ("eleven\n") ;
}
else if (number == 12) {
printf ("twelve\n") ;
}
else if (number == 13) {
printf ("thirteen\n") ;
}
else if (number == 14) {
printf ("fourteen\n") ;
}
else if (number == 15) {
printf ("fifteen\n") ;
}
else if (number == 16) {
printf ("sixteen\n") ;
}
else if (number == 17) {
printf ("seventeen\n") ;
}
else if (number == 18) {
printf ("eighteen\n") ;
}
else (number == 19) {
printf ("nineteen\n") ;
}
printf ("You Entered the Number %d\n", number) ;
first_number = number / 10 ;
second_number = number % 10 ;
switch (first_number) {
case 9: printf ("ninety-"); break;
case 8: printf ("eighty-"); break;
case 7: printf ("seventy-"); break;
case 6: printf ("sixty-"); break;
case 5: printf ("fifty-"); break;
case 4: printf ("forty-"); break;
case 3: printf ("thirty-"); break;
case 2: printf ("twenty-"); break;
}
switch (second_number) {
case 9: printf ("nine\n"); break;
case 8: printf ("eight\n"); break;
case 7: printf ("seven\n"); break;
case 6: printf ("six\n"); break;
case 5: printf ("five\n"); break;
case 4: printf ("four\n"); break;
case 3: printf ("three\n"); break;
case 2: printf ("two\n"); break;
case 1: printf ("one\n"); break;
}
return 0 ;
}
if (a > 100 || a < 0) {
printf ("error, error, Danger Will Robinson! Danger!!\n") ;
return 0 ;
}
if (number == 11) {
printf ("eleven\n") ;
return 0 ;
}
else if (number == 12) {
printf ("twelve\n") ;
return 0 ;
}
else if (number == 13) {
printf ("thirteen\n") ;
return 0 ;
}
else if (number == 14) {
printf ("fourteen\n") ;
return 0 ;
}
else if (number == 15) {
printf ("fifteen\n") ;
return 0 ;
}
else if (number == 16) {
printf ("sixteen\n") ;
return 0 ;
}
else if (number == 17) {
printf ("seventeen\n") ;
return 0 ;
}
else if (number == 18) {
printf ("eighteen\n") ;
return 0 ;
}
else (number == 19) {
printf ("nineteen\n") ;
return 0 ;
}
Missing "if" before "(number == 19)"
Scott-Deans-MacBook-Pro:~ scottdean$ gcc ~/documents/number2number.c
Scott-Deans-MacBook-Pro:~ scottdean$ ./a.out
Enter a two digit number: 45
You Entered the Number 45
forty-five
Scott-Deans-MacBook-Pro:~ scottdean$ ./a.out
Enter a two digit number: 99
You Entered the Number 99
ninety-nine
Scott-Deans-MacBook-Pro:~ scottdean$ ./a.out
Enter a two digit number: 20
You Entered the Number 20
twenty-Scott-Deans-MacBook-Pro:~ scottdean$ ./a.out
Enter a two digit number: 11
eleven
Scott-Deans-MacBook-Pro:~ scottdean$ ./a.out
Enter a two digit number: 15
fifteen
Scott-Deans-MacBook-Pro:~ scottdean$
if (number == 11) {
printf ("eleven\n") ;
return 0 ;
}
else if (number == 12) {
printf ("twelve\n") ;
return 0 ;
}
else if (number == 13) {
printf ("thirteen\n") ;
return 0 ;
}
else if (number == 14) {
printf ("fourteen\n") ;
return 0 ;
}
else if (number == 15) {
printf ("fifteen\n") ;
return 0 ;
}
else if (number == 16) {
printf ("sixteen\n") ;
return 0 ;
}
else if (number == 17) {
printf ("seventeen\n") ;
return 0 ;
}
else if (number == 18) {
printf ("eighteen\n") ;
return 0 ;
}
else if (number == 19) {
printf ("nineteen\n") ;
return 0 ;
}
Code:else (number == 19) { printf ("nineteen\n") ; return 0 ; }
#include <stdio.h>
main ()
{
int first_number, second_number, number ;
printf ("Enter a two digit number: ") ;
scanf ("%d", &number) ;
if (number == 11) {
printf ("You entered the number eleven\n") ;
return 0 ;
}
else if (number == 12) {
printf ("twelve\n") ;
return 0 ;
}
else if (number == 13) {
printf ("thirteen\n") ;
return 0 ;
}
else if (number == 14) {
printf ("fourteen\n") ;
return 0 ;
}
else if (number == 15) {
printf ("fifteen\n") ;
return 0 ;
}
else if (number == 16) {
printf ("sixteen\n") ;
return 0 ;
}
else if (number == 17) {
printf ("seventeen\n") ;
return 0 ;
}
else if (number == 18) {
printf ("eighteen\n") ;
return 0 ;
}
else if (number == 19) {
printf ("nineteen\n") ;
return 0 ;
}
printf ("You Entered the Number %d\n", number) ;
first_number = number / 10 ;
second_number = number % 10 ;
switch (first_number) {
case 9: printf ("ninety-"); break;
case 8: printf ("eighty-"); break;
case 7: printf ("seventy-"); break;
case 6: printf ("sixty-"); break;
case 5: printf ("fifty-"); break;
case 4: printf ("forty-"); break;
case 3: printf ("thirty-"); break;
case 2: printf ("twenty-"); break;
}
switch (second_number) {
case 9: printf ("nine\n"); break;
case 8: printf ("eight\n"); break;
case 7: printf ("seven\n"); break;
case 6: printf ("six\n"); break;
case 5: printf ("five\n"); break;
case 4: printf ("four\n"); break;
case 3: printf ("three\n"); break;
case 2: printf ("two\n"); break;
case 1: printf ("one\n"); break;
}
return 0 ;
}
Okay fixed that if. It's better now, getting closer, but still not exactly right.
Compiler output: As you can see, the non 11-19 print as "You entered the number 45 forty-five." It should just say "You entered the number forty-five."
printf ("You Entered the Number %d\n", number) ;
printf ("You Entered the Number ") ;
And the 11 below, just says "eleven" and isn't including the printf of "You entered the number"
Missing "if" before "(number == 19)"
The textbook is probably poor at explaining C syntax, which makes the error message, no ";" before "{" seem very cryptic. What you might be thinking of as an assignment statement is actually an expression statement -- any valid expression, even without an assignment, is valid. Expression statements always end with a semicolon. The syntax of an if statement is:
if (expression) statement
or
if (expression) statement else statement
so that final "else" is followed by a statement, "(number==19)". However this is an expression statement and needs to be followed by a semicolon, which is missing!
When you add the "if" the statement following "else" is another if statement and it will compile correctly.
#include <stdio.h>
int main(int argc, char *argv) {
int number;
printf ("Enter number (0-100): ") ;
scanf ("%d", &number ) ;
if ((number >= 0) && (number <= 100)) {
int ones, tens;
printf ("You entered the number ", number) ;
ones = number % 10;
tens = number / 10;
if ((number >= 10 ) && (number <= 19)) {
switch (ones) {
case 9: printf ("nineteen\n"); break;
case 8: printf ("eighteen\n"); break;
case 7: printf ("seventeen\n"); break;
case 6: printf ("sixteen\n"); break;
case 5: printf ("fifteen\n"); break;
case 4: printf ("fourteen\n"); break;
case 3: printf ("thirteen\n"); break;
case 2: printf ("twelve\n"); break;
case 1: printf ("eleven\n"); break;
case 0: printf ("ten\n"); break;
}
}
else if (number == 0) printf ("zero\n");
else {
switch (tens) {
case 9: printf ("ninety-"); break;
case 8: printf ("eighty-"); break;
case 7: printf ("seventy-"); break;
case 6: printf ("sixty-"); break;
case 5: printf ("fifty-"); break;
case 4: printf ("forty-"); break;
case 3: printf ("thirty-"); break;
case 2: printf ("twenty-"); break;
case 1: break;
case 0: break;
}
switch (ones) {
case 9: printf ("nine\n"); break;
case 8: printf ("eight\n"); break;
case 7: printf ("seven\n"); break;
case 6: printf ("six\n"); break;
case 5: printf ("five\n"); break;
case 4: printf ("four\n"); break;
case 3: printf ("three\n"); break;
case 2: printf ("two\n"); break;
case 1: printf ("one\n"); break;
case 0: break;
}
}
}
else printf ("ERROR: Score is out of range 0-100\n");
return 0;
}
It looks like you might be getting lost in the forest.
It's unclear to me whether the book has told you how to make separate functions other than main(), but if it has, now would be a good time to do so. Separate functions helps make it easier to see what the high-level logic is doing (e.g. separate it into "categories" of 1-10, 11-19, 20 and up). Then each function handles only the values appropriate to it: one function for 1-10, another function for 11-19, another function for 20 and up.
Here's an approach that doesn't require all of those icky (IMHO) returns.
Code:#include <stdio.h> int main(int argc, char *argv) { int number; printf ("Enter number (0-100): ") ; scanf ("%d", &number ) ; if ((number >= 0) && (number <= 100)) { int ones, tens; printf ("You entered the number ", number) ; ones = number % 10; tens = number / 10; if ((number >= 10 ) && (number <= 19)) { switch (ones) { case 9: printf ("nineteen\n"); break; case 8: printf ("eighteen\n"); break; case 7: printf ("seventeen\n"); break; case 6: printf ("sixteen\n"); break; case 5: printf ("fifteen\n"); break; case 4: printf ("fourteen\n"); break; case 3: printf ("thirteen\n"); break; case 2: printf ("twelve\n"); break; case 1: printf ("eleven\n"); break; case 0: printf ("ten\n"); break; } } else if (number == 0) printf ("zero\n"); else { switch (tens) { case 9: printf ("ninety-"); break; case 8: printf ("eighty-"); break; case 7: printf ("seventy-"); break; case 6: printf ("sixty-"); break; case 5: printf ("fifty-"); break; case 4: printf ("forty-"); break; case 3: printf ("thirty-"); break; case 2: printf ("twenty-"); break; case 1: break; case 0: break; } switch (ones) { case 9: printf ("nine\n"); break; case 8: printf ("eight\n"); break; case 7: printf ("seven\n"); break; case 6: printf ("six\n"); break; case 5: printf ("five\n"); break; case 4: printf ("four\n"); break; case 3: printf ("three\n"); break; case 2: printf ("two\n"); break; case 1: printf ("one\n"); break; case 0: break; } } } else printf ("ERROR: Score is out of range 0-100\n"); return 0; }
B
Here's an approach that doesn't require all of those icky (IMHO) returns.
- (id)init {
if (![super init]) {
return nil;
}
}
so much code for such a simple thing.
I need to learn some more about your code first ... I need it explained.
int main (void)
./numberinwords 42
You entered the number forty-two
I can see why you like only having one return statement in a function, but I don't like it. I think it creates too many levels of indenting and you soon get lines longer than 80 characters or have to put messy breaks in lines.
#include <stdio.h>
int main(int argc, char *argv) {
int number;
printf ("Enter number (0-100): ") ;
scanf ("%d", &number ) ;
if ((number >= 0) && (number <= 100)) {
int ones, tens;
printf ("You entered the number ", number) ;
ones = number % 10;
tens = number / 10;
if ((number >= 10 ) && (number <= 19)) printspecials(ones);
else if (number == 0) printzero;
else printstandard(tens,ones);
}
else printerror;
return 0;
}
#include <stdio.h>
int main(int argc, char *argv) {
int number;
printf ("Enter number (0-99): ") ;
scanf ("%d", &number ) ;
int isinrange = ((number >= 0) && (number <= 99));
if (isinrange) printtwodigitword(number);
else printerror;
return 0;
}
NSLog(@"You're number is %@", words);
Yeah it looks interesting, more than one way to skin a cat for sure, it's amazing how complicated it really is to just change a number 45, into forty-five, so much code for such a simple thing.
... it's amazing how complicated it really is to just change a number 45, into forty-five, so much code for such a simple thing.
switch (ones) {
case 9: printf ("nine\n"); break;
case 8: printf ("eight\n"); break;
case 7: printf ("seven\n"); break;
case 6: printf ("six\n"); break;
case 5: printf ("five\n"); break;
case 4: printf ("four\n"); break;
case 3: printf ("three\n"); break;
case 2: printf ("two\n"); break;
case 1: printf ("one\n"); break;
case 0: break;
}
static char * ones_words[] =
{ "", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine" };
printf( "%s\n", ones_words[ ones ] );
#include <stdio.h>
int main(void)
{
int n,d;
char *names[] = {"zero","one","two","three","four","five","six","seven",
"eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen",
"sixteen","seventeen","eighteen","nineteen"};
char *tens[] = {"","","twenty","thirty","forty","fifty","sixty","seventy",
"eighty","ninety"};
do
{
printf("Enter a number 0-99: ");
scanf("%d",&n);
} while((n<0) || (n>99));
if(n<20)
puts(names[n]);
else
{
d = n / 10;
n = n % 10;
if(!n)
puts(tens[d]);
else
printf("%s-%s\n",tens[d],names[n]);
}
return 0;
}
You would never do this this way in practice. There are other code structures that would eliminate all of the switch/case/break statements and turn them into one line or maybe two, but you need to learn about enums, arrays and all that when you get to them.
Sometimes, that complexity is a hint that some other representation may be better suited. For example, large switch statements may be converted to arrays of data, with much smaller code that interprets the data.
...
I don't expect you to understand the array-based code yet. My point is that with the limited capabilities available, many things which seem to be complicated are only complicated because you haven't been told about any other ways of doing them.
As chown33 pointed out, switch introduces a hell of comparisons which are costly performancewise. Since all cases are neatly arranged (1,2,3,4,5...), it's easier to use a vector approach. Accessing the element of an array involves a single multiplication (which is handled by the compiler) instead of doing umpteen comparisons. Also looks cleaner, don't you think?