Det er sjovt, du nævner den mulighed, for det har faktisk været mit udgangspunkt.
http://www.eksperten.dk/spm/688804 @ 17/02-2006 13:22:25
Men jeg har faktisk fået gjort det nemmere for mig selv. Jeg fandt ud af at menu eksemplet formentlig har brugt Turbo C, som i hvert fald indeholder en dos.h. Den header fil indeholder alle de kommandoer, jeg skal bruge uanset hvordan jeg ender med at lave programmet. Oven i købet får jeg langt færre fejl, men dog stadigvæk nogle, som du måske kan hjælpe mig med i stedet for.
Her er koden, som den stod på websitet (den første version havde jeg ændret pga. nogle ting der ikke var med i de header filer, jeg brugte dengang):
#include "dos.h"
#include "stdio.h"
#include "stdlib.h"
int menu(void);
main()
{
while(1)
{
/*get selection and execute the relevant statement*/
switch(menu())
{
case 1:
{
puts("sound the speaker 1\n");
sound(2000);
sleep(2);
nosound();
break;
}
case 2:
{
puts("sound that speaker 2\n");
sound(4000);
sleep(2);
nosound();
break;
}
case 3:
{
puts("You are quitting\n");
exit(0);
break;
}
default:
{
puts("Invalid menu choice\n");
break;
}
}
}
return 0;
}
/*menu function*/
int menu(void)
{
int reply;
/*display menu options*/
puts("Enter 1 for beep 1.\n");
puts("Enter 2 for beep 2.\n");
puts("Enter 3 to quit.\n");
/*scan for user entry*/
scanf("%d", &reply);
return reply;
}
Alle 3 header filer samt CS.lib hvor sound funktionen findes, ligger i samme mappe som selve Menu.c filen. Jeg har taget filerne fra Turbo C.
Hvis jeg prøver at compile det med Digital Mars, får jeg følgende fejlmeddelelser:
C:\dm\bin>dmc -msd -ND -IC:\jdk15004\include -IC:\jdk15004\include\win32 C:\C\Me
nu.c
void __emit__();
^
C:\C\dos.h(169) : Error: '=', ';' or ',' expected
void interrupt (* _Cdecl getvect(int interruptno)) ();
^
C:\C\dos.h(180) : Error: ')' expected to close function parameter list with
int _Cdecl getverify (void);
^
C:\C\dos.h(181) : Error: 'getverify' is not in function parameter list
void _Cdecl harderr (int _Cdecl (*handler)());
^
C:\C\dos.h(182) : Error: 'harderr' is not in function parameter list
void _Cdecl hardresume (int axret);
^
C:\C\dos.h(183) : Error: 'hardresume' is not in function parameter list
Fatal error: too many errors
--- errorlevel 1
Og hvis jeg i stedet for prøver at compile med MinGW, får jeg følgende fejlmeddelelser:
C:\MinGW\bin>gcc -c -IC:\jdk15004\include -IC:\jdk15004\include\win32 C:\C\Menu.
c -o C:\C\Menu.obj
In file included from C:\C\Menu.c:1:
C:\C\/dos.h:180: error: syntax error before '*' token
C:\C\/dos.h:211: error: syntax error before '*' token
C:\C\/dos.h:211: error: `interrupt' declared as function returning a function
C:\C\/dos.h:252: error: stray '\26' in program
In file included from C:\C\Menu.c:1:
C:\C\/dos.h:252:2: warning: no newline at end of file
In file included from C:\C\Menu.c:2:
C:\C\/stdio.h:189: error: stray '\26' in program
In file included from C:\C\Menu.c:2:
C:\C\/stdio.h:189:2: warning: no newline at end of file
In file included from C:\C\Menu.c:3:
C:\C\/stdlib.h:132: error: stray '\26' in program
In file included from C:\C\Menu.c:3:
C:\C\/stdlib.h:132:2: warning: no newline at end of file
C:\C\Menu.c:58:2: warning: no newline at end of file
newline fejlen kender jeg selvfølgelig godt. Mht. stray '\26' er der, når jeg åbner filerne i Notepad, et tegn, der vises som en firkant, jeg går ud fra at den ikke har nogen betydning, eller hvad?