writing program from a book

H

hpy_awad

I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!

Errors-
--------
part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
declaration of `argc' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
declaration of `argv' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
before '{' token

Program-
--------
#include <stdio.h>
//part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{
int argc;
char *argv[50];
{
int option;
do
{
//Display menu
display_menu();

//Initite appropriate program or exit
if (option!=7) //exit
call_program(option,argv);
}
while (option!=7);
}
display_menu()
{
system("clear");
printf ("\n TV Rental system");
printf ("\n ----------------");
printf("\n\n 1 Set up new customer");
printf("\n\n 2 Change existing customer record");
printf("\n\n 3 Add new customer record");
printf("\n\n 4 Delete customer record");
printf("\n\n 5 Print customer bills");
printf("\n\n 6 display a customer record");
printf("\n\n 7 Exit");
}


user_selection()
{
int opt;
printf("\n\n Enter required option number (1-7) ");
scanf("%d",&opt);
return(opt);
}

call_program(opt,argv)
int opt;
char *argv[];
{
switch(opt)
{
case 1: spawnvp(0,"a.obj",argv);
delay();
break;

default:printf("\nError");
delay();
}
}


delay()
{
int i;
for (i=0;i<=20000;++i);
}
 
S

Sean Kenwrick

I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!

Errors-
--------
part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
declaration of `argc' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
declaration of `argv' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
before '{' token

Program-
--------
#include <stdio.h>
file://part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{
int argc;
char *argv[50];
{

What language is this?? I can't imagine that this would compile under C++
or C. I think that you are trying to use old style function declarations
of the type:

foo(p1,p1)
int p1;
int p2;
{

...
}

You should change these to the newer style function declarations:

int foo(int p1,int p2)
{
...
}


So this would become:

int main(int argc, char ** argv)
{
int option;
....

}
int option;
do
{
file://Display menu
display_menu();

file://Initite appropriate program or exit
if (option!=7) file://exit
call_program(option,argv);
}
while (option!=7);
}
display_menu()
{
system("clear");
printf ("\n TV Rental system");
printf ("\n ----------------");
printf("\n\n 1 Set up new customer");
printf("\n\n 2 Change existing customer record");
printf("\n\n 3 Add new customer record");
printf("\n\n 4 Delete customer record");
printf("\n\n 5 Print customer bills");
printf("\n\n 6 display a customer record");
printf("\n\n 7 Exit");
}


user_selection()
{
int opt;
printf("\n\n Enter required option number (1-7) ");
scanf("%d",&opt);
return(opt);
}

call_program(opt,argv)
int opt;
char *argv[];
{
switch(opt)
{
case 1: spawnvp(0,"a.obj",argv);
delay();
break;

default:printf("\nError");
delay();
}
}


delay()
{
int i;
for (i=0;i<=20000;++i);
}

Same for call_program:

int call_program(int opt,char ** argv)
{
...
}

Sean
 
?

=?iso-8859-1?q?M=E5ns_Rullg=E5rd?=

I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!

Errors-
--------
part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
declaration of `argc' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
declaration of `argv' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
before '{' token

Program-
--------
#include <stdio.h>
//part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{

Get rid of that brace...
int argc;
char *argv[50];

.... and drop the old K&R style.
{
int option;
do
{
//Display menu
display_menu();

//Initite appropriate program or exit
if (option!=7) //exit
call_program(option,argv);
}
while (option!=7);
}
display_menu()
{
system("clear");
printf ("\n TV Rental system");
printf ("\n ----------------");
printf("\n\n 1 Set up new customer");
printf("\n\n 2 Change existing customer record");
printf("\n\n 3 Add new customer record");
printf("\n\n 4 Delete customer record");
printf("\n\n 5 Print customer bills");
printf("\n\n 6 display a customer record");
printf("\n\n 7 Exit");
}

user_selection()
{
int opt;
printf("\n\n Enter required option number (1-7) ");
scanf("%d",&opt);
return(opt);
}

call_program(opt,argv)
int opt;
char *argv[];
{
switch(opt)
{
case 1: spawnvp(0,"a.obj",argv);

What does spawnvp do?
delay();
break;

default:printf("\nError");
delay();
}
}

delay()
{
int i;
for (i=0;i<=20000;++i);
}

How ancient is this. That loop takes no time at all to run here.
 
A

Alan Coopersmith

(e-mail address removed) ([email protected]) writes in comp.unix.solaris:
|I wrote that program from a book that my compile that program
|correctly under C++ compiler but I got those errors for compiling
|under unix !!
|
|Errors-
|--------
|part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
|part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
|declaration of `argc' shadows a parameter
|part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
|declaration of `argv' shadows a parameter
|part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
|before '{' token
|main (argc,argv)
|{
|int argc;
|char *argv[50];
|{

This should be
int main (int argc, char *argv[])
{

You've got too many {'s along with obsolete syntax. (As has been
mentioned before, it appears whatever book you're using should be
burned.)
 
J

Jens.Toerring

In comp.unix.programmer Måns Rullgård said:
(e-mail address removed) ([email protected]) writes:
How ancient is this. That loop takes no time at all to run here.

And probably every self-respecting compiler will optimize out that
loop (i.e. throw it away because there's no result that's ever going
to be used) unless you declare 'i' as volatile. And even then the
time that delay will take is probably absolutely negligible. With
any modern computer the maximum delay you'll be getting is probably
somewhere in the order of a micro-second.

But how you got to compile this program with a C++ compiler is
completely beyond me. And even if you did, how is 'option' ever
to be changed? Shouldn'd there be a call of the user_selection()
function somewhere in main()s loop? And what's the switch in
call_program() good for? Is only the first menu option usable?
Or have you accidentally skipped a few pages in the book while
copying the program? I guess the best you can do is throw that
book away, all you can learn from it is either completely out-
dated or plain wrong.
Regards, Jens
 
L

Lew Pitcher

I wrote that program from a book that my compile that program
correctly under C++ compiler

Somehow, I doubt that.
but I got those errors for compiling
under unix !!

The code you transcribed here is /so/ wrong.

You are compiling bad K&R (pre-ANSI) C with ANSI C99 / C++ comments using a
C++ compiler, and expecting it to compile properly and execute.

1) This is not C++, so stop using a C++ compiler on it
2) This is not C99, so lose the C++style comments
3) There are logic errors in your code. Fix them
(for instance, you never assign a value to your 'options' variable,
you test the 'options' variable for a value that can never occur,
etc.)
4) You use platform-specific functions; either lose them or submit your
corrected code to a forum that has knowledge of them.
 
R

Rich Teer

You've got too many {'s along with obsolete syntax. (As has been
mentioned before, it appears whatever book you're using should be
burned.)

Agreed. To the OP: Don't bother with "C for Dummies" either,
or any other book that thinks that "void main (...)" is valid.

I'm reading in this in comp.unix.solaris: I humbly submit that
my forthcoming book, Solaris Systems Prorgamming, should be on
your shopping list (in addition to a good C tutorial - my book
assumes some C knowledge).

One more tip: try to ask your questions in a more focussed group
of newsgroups.

--
Rich Teer, SCNA, SCSA

President,
Rite Online Inc.

Voice: +1 (250) 979-1638
URL: http://www.rite-online.net
 
D

Default User

Lew said:
You are compiling bad K&R (pre-ANSI) C with ANSI C99 / C++ comments using a
C++ compiler, and expecting it to compile properly and execute.


It's not even old-style C, because he has an opening brace before the
argc and argv declarations, which then turns them into local variables
(hence the error message).

The OP needs to go back to square one, get a good book and start again
with a few simple programs.




Brian Rodenborn
 
M

Martin Ambuhl

I wrote that program from a book that my compile that program
correctly under C++ compiler

No, it didn't. Some other program did, probably one without the trivial
error below.
but I got those errors for compiling
under unix !!

Unix is irrelevant. Your code is broken.
#include <stdio.h>
//part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{
int argc;
char *argv[50];
{

You are incorrectly using an outmoded style of specifying the arguments. If
you insist on using this style, it should be

int main(argc, argv)
int argc;
char *argv[];
{

Notice that the extra brace '{' is missing and the bogus '50' is missing.

The modern way to do this, if you consider the last 15 years to to be the
modern era, is
int main(int argc, char *argv[])
{

Since it is normal etiquette to check the FAQs and follow the traffic on a
newsgroup before posting, I suspect that you really knew these things. It
is impossible to read the FAQs for and follow all of comp.lang.c,
comp.unix.solaris, comp.unix.programmer, gnu.g++.help, and gnu.gcc.help
without seeing these simple things done correctly.
 
D

Dragan Cvetkovic

Martin Ambuhl said:
I wrote that program from a book that my compile that program
correctly under C++ compiler
[snip]

You are incorrectly using an outmoded style of specifying the arguments. If
you insist on using this style, it should be

int main(argc, argv)
int argc;
char *argv[];
{

Actually, even that one won't work with C++ (remember, OP is using a C++
compiler).

E.g. the following program (saved in /tmp/p.cc file)

int main(argc, argv)
int argc;
char *argv[];
{
return 0;
}

produces the following errors:
% g++ -c /tmp/p.cc
/tmp/p.cc:1: error: `argc' was not declared in this scope
/tmp/p.cc:1: error: `argv' was not declared in this scope
/tmp/p.cc:2: error: initializer list being treated as compound expression
/tmp/p.cc:2: error: syntax error before `int'
/tmp/p.cc:3: error: storage size of `argv' isn't known
/tmp/p.cc:3: error: storage size of `argv' isn't known
/tmp/p.cc:4: error: parse error before `{' token

Bye, Dragan

--
Dragan Cvetkovic,

To be or not to be is true. G. Boole No it isn't. L. E. J. Brouwer

!!! Sender/From address is bogus. Use reply-to one !!!
 
A

Alex Colvin

I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!


main (argc,argv)
{
int argc;
char *argv[50];

since you're using the old K&R-style parameter declarations, remove
that "{" after main.
 
N

Nick Landsberg

This isn't right.

This isn't even wrong!


I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!

Errors-
--------
part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
declaration of `argc' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
declaration of `argv' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
before '{' token

Program-
--------
#include <stdio.h>
//part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{
int argc;
char *argv[50];
{
int option;
do
{
//Display menu
display_menu();

//Initite appropriate program or exit
if (option!=7) //exit
call_program(option,argv);
}
while (option!=7);
}
display_menu()
{
system("clear");
printf ("\n TV Rental system");
printf ("\n ----------------");
printf("\n\n 1 Set up new customer");
printf("\n\n 2 Change existing customer record");
printf("\n\n 3 Add new customer record");
printf("\n\n 4 Delete customer record");
printf("\n\n 5 Print customer bills");
printf("\n\n 6 display a customer record");
printf("\n\n 7 Exit");
}


user_selection()
{
int opt;
printf("\n\n Enter required option number (1-7) ");
scanf("%d",&opt);
return(opt);
}

call_program(opt,argv)
int opt;
char *argv[];
{
switch(opt)
{
case 1: spawnvp(0,"a.obj",argv);
delay();
break;

default:printf("\nError");
delay();
}
}


delay()
{
int i;
for (i=0;i<=20000;++i);
}
 
M

Martin Ambuhl

Dragan said:
Actually, even that one won't work with C++ (remember, OP is using a C++
compiler).

I haven't a clue why he posted it to comp.lang.c, where we don't give a
flip about C++. I answered the post where I read it, in comp.lang.c.
There are many correct answers in comp.lang.c that don't work with C++.
And we don't care.
 
R

Rich Teer

There are many correct answers in comp.lang.c that don't work with C++.
And we don't care.

Ah, I was wondering when the typical warm and cuddly c.l.c.
comment would show up... ;-)

--
Rich Teer, SCNA, SCSA

President,
Rite Online Inc.

Voice: +1 (250) 979-1638
URL: http://www.rite-online.net
 
J

Jack Klein

I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!

Errors-
--------
part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
declaration of `argc' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
declaration of `argv' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
before '{' token

Program-
--------
#include <stdio.h>
//part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{
int argc;
char *argv[50];
{

1. Learn some manners and don't cross-post to so many unrelated
groups.

2. Burn that book, immediately.
 
B

Brad

Jack Klein said:
I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!

Errors-
--------
part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
declaration of `argc' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
declaration of `argv' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
before '{' token

Program-
--------
#include <stdio.h>
//part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{
int argc;
char *argv[50];
{
Lets see, the error messages say that there is a problem in function main.
Good place to start.
It then goes on to line 6, your "int argc;" line. mmmm what is wrong here?

Your function declaration is wrong. You are also attempting to use an old
style of C function delcarations. Try....

#include <stdio.h>

main(int argc; char **argv)
{

// Now you can continue with the code
1. Learn some manners and don't cross-post to so many unrelated
groups.
Agreed.

2. Burn that book, immediately.
Might not be such a bad idea if the code was correctly taken out of the book.

Brad
 
P

pete

Brad said:
Jack Klein said:
I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!

Errors-
--------
part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
declaration of `argc' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
declaration of `argv' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
before '{' token

Program-
--------
#include <stdio.h>
//part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{
int argc;
char *argv[50];
{
Lets see, the error messages say that there is a problem in function main.
Good place to start.
It then goes on to line 6, your "int argc;" line. mmmm what is wrong here?

Your function declaration is wrong. You are also attempting to use an old
style of C function delcarations. Try....

#include <stdio.h>

main(int argc; char **argv)
{

You misspelled

int main(int argc, char **argv)
 
B

Brad

pete said:
Brad said:
Jack Klein said:
On 28 Jan 2004 10:33:24 -0800, (e-mail address removed)
([email protected]) wrote in comp.lang.c:

I wrote that program from a book that my compile that program
correctly under C++ compiler but I got those errors for compiling
under unix !!

Errors-
--------
part10_iti_r01_ch10_verbo_menu_driven_programs.c: In function `main':
part10_iti_r01_ch10_verbo_menu_driven_programs.c:6: warning:
declaration of `argc' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:7: warning:
declaration of `argv' shadows a parameter
part10_iti_r01_ch10_verbo_menu_driven_programs.c:22: syntax error
before '{' token

Program-
--------
#include <stdio.h>
//part10_iti_r01_ch10_verbo_menu_driven_programs.c

main (argc,argv)
{
int argc;
char *argv[50];
{
Lets see, the error messages say that there is a problem in function main.
Good place to start.
It then goes on to line 6, your "int argc;" line. mmmm what is wrong here?

Your function declaration is wrong. You are also attempting to use an old
style of C function delcarations. Try....

#include <stdio.h>

main(int argc; char **argv)
{

You misspelled

int main(int argc, char **argv)

Correct, thanx.

Brad
 
D

Dave Thompson

Lew Pitcher wrote:
(re: main (argc, argv) /*spurious*/{ int argc; char *argv[50]; { etc.)
It's not even old-style C, because he has an opening brace before the
argc and argv declarations, which then turns them into local variables
(hence the error message).
It is facially valid oldstyle C89 (or prestandard), because the
parameters argc and argv are implicitly int, as is the return from
main(); the parameters are then shadowed by locals which is perfectly
legal though rarely wise and (hence) was only a warning not an error.
The result is Undefined Behavior because main() is only defined to
work for zero arguments (void) or two arguments (int, char**),
although in practice on many (most?) implementations since the
parameters argc and argv are not (cannot be) accessed this would still
(sort of) work -- in the absence of the OP's *other* bugs.

- David.Thompson1 at worldnet.att.net
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top