2 svar
80 visningar
Mollyhej behöver inte mer hjälp
Mollyhej 496
Postad: 15 nov 02:17

läsa in ett värde med cin, därefter enter och göra en ny inläsning

hej jag undrar hur man i C++ får till att sitt program ska läsa in ett (1) värde, göra databehandling, läsa nästa värde, databehandla osv. Det ska alltså bara finnas ett (1) inläst värde i taget i programmet, det ska inte läsa in alla i en klump. 

just nu kan jag bara klump läsa in värden eller att det bara blir en massa enter och när jag trycker ctrl D körs hela programmet klart inte bara inläsningen. detta är hur mitt program ser ut just nu. jag kommer alltså inte till "ange ett nytt tal om du vill"

 

 

#include <iostream> //hämtar biblioteket för input output stream

int main()

{

std::cout<<"Ange talet:"<<std::endl; //ber användare skriva in nummer

 

int nummer; //skapar en heltals-variabel som heter nummer, har inget värde ännu

int summa=0; //skapar en heltalsvariabel summa som börjar på 0

int raknare=0; //skapar en heltalsvariabel i som börjar på 0, detta är "talräknaren"

int stor; //skapar en heltalsvariabel för att lagra maxvärdet

int liten; //skapar en heltalsvariabel för att lagra minvärdet

float medel; //skapar en decimaltalvariabel för att lagra medelvärdet

 

while(std::cin>>nummer) //kör while satsen så länge det matas in tal av användare

{   

std::cin>>nummer;   

std::cout<<"Ange ett nytt tal om du vill:"<<std::endl;   

if(raknare==0) //om det är första nummret

{       

stor=nummer;       

liten=nummer;   

}   

if(nummer>=stor) //om nummret är större än förra stor är nu det nya nummret stor        stor=nummer;   

if(nummer<=liten) //om nummret är mindre än förra liten är nu det nya nummret liten        liten=nummer;   

summa=summa+nummer; //totala summan av alla nummer   

raknare=raknare+1; //"talräknaren"   

}

medel=static_cast<float>(summa)/raknare; //medelvärdet

//utskrifter:

std::cout<<"Medelvärdet är:"<<medel<<std::endl;

std::cout<<"Maxvärdet är:"<<stor<<std::endl;

std::cout<<"Minvärdet är:"<<liten<<std::endl;

return 0;

}

thedifference 575
Postad: 15 nov 08:14

Använd {;}-knappen för att posta formatterad kod. Mycket lättare att läsa.

#include <iostream> //hämtar biblioteket för input output stream

int main()

{

    std::cout << "Ange talet:" << std::endl; //ber användare skriva in nummer

    int nummer; //skapar en heltals-variabel som heter nummer, har inget värde ännu

    int summa = 0; //skapar en heltalsvariabel summa som börjar på 0

    int raknare = 0; //skapar en heltalsvariabel i som börjar på 0, detta är "talräknaren"

    int stor; //skapar en heltalsvariabel för att lagra maxvärdet

    int liten; //skapar en heltalsvariabel för att lagra minvärdet

    float medel; //skapar en decimaltalvariabel för att lagra medelvärdet

    while (std::cin >> nummer) //kör while satsen så länge det matas in tal av användare

    {

        std::cin >> nummer;

        std::cout << "Ange ett nytt tal om du vill:" << std::endl;

        if (raknare == 0) //om det är första nummret

        {

            stor = nummer;

            liten = nummer;

        }

        if (nummer >= stor) //om nummret är större än förra stor är nu det nya nummret stor        stor=nummer;   

            if (nummer <= liten) //om nummret är mindre än förra liten är nu det nya nummret liten        liten=nummer;   

                summa = summa + nummer; //totala summan av alla nummer   

        raknare = raknare + 1; //"talräknaren"   

    }

    medel = static_cast < float > (summa) / raknare; //medelvärdet

    //utskrifter:

    std::cout << "Medelvärdet är:" << medel << std::endl;

    std::cout << "Maxvärdet är:" << stor << std::endl;

    std::cout << "Minvärdet är:" << liten << std::endl;

    return 0;

}

En while-loop fungerar som så att den körs så länge kravet uppfylls:

while (något == true) {
    // Utför instruktioner
}

En hel del språk har syntactic sugar här, alltså att man inte uttryckligen behöver skriva == true, utan det räcker med:

while (något) {
    // Utför instruktioner
}

Här har vi tydligen fallet att std::cin>>nummer kan utvärderas till en boolean (true/false). Jag antar att det representerar "användarens input kunde lagras i nummer", vilket är varför loopen tar slut om man anger en bokstav.

Första halvan av din kod fungerar ungefär så här:

Du kanske tänkte dig att villkoret för din while-loop skulle vara den inläsning som görs inne i loopen, men som du märker så blir det två separata inläsningar av det. Även om den faktiskt låter dig avbryta loopen med att skriva en bokstav vid vilken som helst av inläsningarna.

Mollyhej 496
Postad: 16 nov 16:43

ohhh!! tack så mycket! flödesschemat gjorde det tydligt! jag trodde att man behövde en cin i while instruktionerna (alltså i {}) men det räcker med min cin i (). nu funkar min kod som jag vill! tack så hemskt mycket!!!

Svara
Close