10 svar
140 visningar
HiMate123 352
Postad: 8 okt 2021 18:09

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':
Laguna Online 28563
Postad: 8 okt 2021 20:26

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.

HiMate123 352
Postad: 9 okt 2021 16:16
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':
HiMate123 352
Postad: 9 okt 2021 16:17

eller jag får det på  3 sista linja--> }while ...... 



Laguna Online 28563
Postad: 9 okt 2021 16:51

Varför har du ett { sist på while-raden?

Matsmats 567 – Livehjälpare
Postad: 10 okt 2021 19:12

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.

HiMate123 352
Postad: 10 okt 2021 19:39

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;
    }

HiMate123 352
Postad: 10 okt 2021 19:41

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. 

Laguna Online 28563
Postad: 10 okt 2021 19:44

Du har en

do {

och då får du avsluta med

} while(nånting);

HiMate123 352
Postad: 10 okt 2021 20:29

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|"

Laguna Online 28563
Postad: 10 okt 2021 23:42

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.

Svara Avbryt
Close