Error ved Do loop
Hej,
På "do" på andra linja, så får jag fel. Det står "error: expected expression before 'do'|"
Det borde ju vara möjlig att använda do där?
(Jag provar att skapa en meny)
do(
do(
printf("\nMenyval\n");
printf("\tL - Lägg till banor\n");
printf("\tS - Se alla banor\n");
printf("\tQ - Avslut\n");
scanf(" %c", &val); val = toupper(val);
if ((val == 'L' || val == 'S') && val == 'Q' ){
printf("Val: %c", val);
)else if (val== 'Q')
printf("Program avslutas");
else (printf("Vänligen välj L, S eller Q"));
)while (val != 'L' && val != 'S' && val != 'Q'){
switch(val){
case 'L':
Du ska ha { } runt ett kodblock, inte ( ).
Tillägg: 8 okt 2021 20:32
Prova Lisp om du bara vill ha parenteser. Det är ett utmärkt språk. De flesta språk är mycket krafsigare och använder alla tecken som finns.
Laguna skrev:Du ska ha { } runt ett kodblock, inte ( ).
Tillägg: 8 okt 2021 20:32
Prova Lisp om du bara vill ha parenteser. Det är ett utmärkt språk. De flesta språk är mycket krafsigare och använder alla tecken som finns.
Hej,
Tack för svar.
Jag ändrade nu till {} , men får fortfarande samma error message.
do{
do{
printf("\nMenyval\n");
printf("\tL - Lägg till banor\n");
printf("\tS - Se alla banor\n");
printf("\tQ - Avslut\n");
scanf(" %c", &val); val = toupper(val);
if ((val == 'L' || val == 'S') && val == 'Q' ){
printf("Val: %c", val);
}else if (val== 'Q')
printf("Program avslutas");
else (printf("Vänligen välj L, S eller Q"));
}while (val != 'L' && val != 'S' && val != 'Q'){
switch(val){
case 'L':
eller jag får det på 3 sista linja--> }while ......
Varför har du ett { sist på while-raden?
Om man skall kunna se hur dina parenteser matchar måste du ha med hela koden.
Bra tips är att använda en editor som visar parentesmatchning, då brukar man hitta en hel del av den sortens fel.
Se också till att den indenterar riktigt, din kod varierar hit och dit i indenteringen.
Hej,
här är hela koden. är skrevet på norska dock, så hoppas ni förstår :D
Just nu får jag fel på slutet vid "return 0; "
Det står "|error: expected 'while' before 'return'| "
#include<stdio.h> // printf, scanf, fil-håndtering.
#include<string.h> // Håndtering av char-arrayer, tekster, strenger.
#include <stdlib.h> // srand, rand
#include <stdbool.h> // bool
#include <ctype.h> // toupper
#define MAXBANER 18
#define STRLEN 100
/**
* Hovedprogrammet:
*/
int main() {
char baneBeskrivelse [MAXBANER][STRLEN] = {"Mange trær og kratt","Flatt terreng"}; // Beskrivelse av banene.
int baneLengde[MAXBANER] ={150,300}; // Banenes lengde (i meter).
int banePar[MAXBANER] = {3,7}; // Forventet antall kast (par)
// for hver enkelt bane.
bool baneOB[MAXBANER] = {1,0}; // Har banene OB eller ei.
char valg;
char valgOB; // Brukersvar L, S eller Q
int antallBaner = 2, i, sumPar;
// Leser og sikrer at kun 'L'/'S'/'Q' godtas
do{
do{
printf("\nMenyvalg\n");
printf("\tL - Legge til bane\n");
printf("\tS - Se alle baner\n");
printf("\tQ - Avslutt\n");
scanf(" %c", &valg); valg = toupper(valg);
if ((valg == 'L' || valg == 'S') && valg == 'Q' ){
printf("Valg: %c", valg);
}else if (valg == 'Q')
printf("Du har valgt å avslutte programmet");
else (printf("Vennligst velg L, S eller Q"));
}while(valg != 'L' && valg != 'S' && valg != 'Q');
switch(valg){
case 'L':
if (antallBaner < MAXBANER){
for (i = antallBaner; antallBaner < MAXBANER; i++){
do{
printf("\nHvor mange meter er banen?", i+1);
scanf("%i", &baneLengde [antallBaner]);
}while (baneLengde[i] < 0);
if (baneLengde[i] > 0){
do{
printf("\nPar på banen(2-8)%i: ", 1+i);
scanf("%i", &banePar[i]);
if (banePar > 2 || banePar <8){
printf("\nDin inntastning: %2i", banePar[i]);
}else printf("tallet må være mellom 2 og 8\n");
}while(banePar[i] < 2 || banePar[i] > 8);
do{getchar();
printf("\nEr bane %i OB? (J/N)", 1+i);
scanf(" %c", &valgOB); valgOB = toupper(valgOB);
if (valgOB = 'J' && valgOB != 'N'){
baneOB[i] = true;
}else baneOB[i] = false;
printf("Din inntastning: %2c", valgOB);
printf("True eller false: %i", baneOB[i]);
}while (valgOB!= 'J' && valgOB != 'N');
printf("\nBeskriv banen%i: ", i+1);
getchar();
fgets(baneBeskrivelse[i], STRLEN, stdin);
printf("Din beskrivelse: %s", baneBeskrivelse[i]);
antallBaner++;
}else printf("Banen må vare storre enn 0");
break; }
}else printf("Du har lagt inn for mange baner");
break;
case 'S':
for (i = 0; i < antallBaner; ++i){
printf("\nBane %i\n", i+1);
printf("\tLengde: %i meter\n", baneLengde[i]);
printf("\tPar: %i\n", banePar [i]);
if (baneOB[i]=true){
printf("Med OB\n)");
} else printf("Uten OB\n");
printf("Beskrivelse: %s\n\n\n", baneBeskrivelse[i]);
}
sumPar = 0;
for (i= 0; i < antallBaner; i++){
sumPar = (sumPar+=banePar[i]);}
printf("Antall baner: %i ", antallBaner);
printf("Summen av antall par er: %i", sumPar);
break;
while(valg == 'L' || valg=='S');
case 'Q':
exit(0);
break;
default:
printf("Ulovlig valg!");
break;
}
}return 0;
}
Jag provar att skapa en meny, vart man har 3 alternativ.
L lägg till en ny bana
S se alla banor
Q Avsluta.
Om man tex lägger till en bana fyrst, sen vil se alla banor, så måsta den nya banan komma upp.
2 banor ska vara "hardcoded" och i system i början.
Du har en
do {
och då får du avsluta med
} while(nånting);
ah, men om jag gör så, så får jag fel meddelande.
Innan case Q, så hade jag } while (.......
men sen står det "error: case label not within a switch statement|"
Jaha, while-uttrycket har hamnat fel nu. Det som står före case 'Q' ska stå mellan } och return.
Indentera koden så indenteringen stämmer med strukturen. En bra editor hjälper till med sådant. Då är det lättare att se sådana fel.