3 svar
432 visningar
Filipjohanssonn 75 – Fd. Medlem
Postad: 13 nov 2020 15:46

Får inte rätt output - While loop

Hejsan!

Har problem med en uppgift som jag har försökt få lösningen till nu väldigt länge. Håller tålamodet uppe :) Uppgiften är att skriva ett program där man
1. Matar in tal och adderar det till en summa.
2. Vid varje inmatning skall summan skrivas ut.
3. Programmet ska avslutas när man matar in 0.

Om man skriver in talen: 1 2 3 4 5 0 så skall outputen vara 1 3 6 10 15.
Skriver man in 4 8 6 0 så skall outputen vara 4 12 18.

Mitt problem är att jag får ut rätt output fast med ett extra tal. Exempelvis på med inputen 1 2 3 4 5 0 så får jag ut 1 3 6 10 15 15. Alltså ett tal för mycket.

#include <stdio.h>
#include <stdlib.h>

int main() {


        /*Mata in tal
        adderar talet till en summa
        vid varje inmatning skrivs summan ut
        programmet avslutas vid inmatning 0*/

        /*Deklarerar en int-variabel för inläsningen*/
        int t;

        /* Deklarerar en int variabel och initialiserar den till 0. */
        int sum = 0;


        while(t != 0) {

                scanf("%d", &t);
                sum = sum + t;
                printf("%d\n", sum);

        }

        return 0;
}  
Laguna Online 30473
Postad: 13 nov 2020 15:49

Du kan testa t direkt när du har läst in det, och om det är 0 kan du göra "break;".

Då är testet i while onödigt, så då kan man byta ut det mot "while (1)".

Alternativt, minsta ändringen är om du lägger printf i en if-sats som testar om t är 0.

Filipjohanssonn 75 – Fd. Medlem
Postad: 13 nov 2020 15:57 Redigerad: 13 nov 2020 16:45
Laguna skrev:

Du kan testa t direkt när du har läst in det, och om det är 0 kan du göra "break;".

Då är testet i while onödigt, så då kan man byta ut det mot "while (1)".

Alternativt, minsta ändringen är om du lägger printf i en if-sats som testar om t är 0.

Det funkade bra när jag testade direkt om t == 0. Tack för hjälpen!
Men jag har däremot stött på ett annat problem.
Jag vill ta in all input och när 0 anges vill jag att all output kommer. Just nu får jag detta:

./a.out
1 <--input
1
2 <-- input
3
3 <-- input
6
4 <-- input
10
5 <-- input
15
0 <-- input

Men jag vill förs ge all input: alltså
./a.out
input:        output:    
1             1
2             3
3             6
4             10
5             15
0 
Laguna Online 30473
Postad: 13 nov 2020 18:53

Normalt trycker du på Return (Enter) för att ge det du har skrivit till programmet, och det gör också att raden avslutas på skärmen så att nästa sak som skrivs ut hamnar på nästa rad. Då kan det inte bli som du visar här.

Det finns sätt att antingen förhindra att en ny rad påbörjas, eller att hoppa upp och skriva output-kolumnen till höger i stället för nedanför. Hur man gör det beror på operativsystem. 

Jag föreslår i så fall att du samlar på dig data och sedan skriver ut allting, men all utmatning kommer då nedanför all inmatning. 

Svara
Close