[C] Disfunctionerende for-loop en output zonder waarde*

Pagina: 1
Acties:

Onderwerpen


  • Gammro
  • Registratie: Juli 2008
  • Laatst online: 06-09 21:16
Ik zit dus met het volgende probleem, voor een opdracht voor het vak "Programmeren in C" moet het volgende programma worden gemaakt:
Er wordt "Testcase" aantal keer een rij variabelen gescand in een if-loop:. Vervolgens moeten met deze variabelen een berekening worden uitgevoerd. Uiteindelijk moet er een Printf worden gegeven met alle uitkomsten van de testcases.
Volgens de opdracht moet het er als volgt uitzien:
input:
Het aantal testcases (integer), daarna, één regel per testcase met de parameters a (double),
N (integer) en r (double). Bijvoorbeeld:
2
1 10 0.5
5 7 0.7
output:
Resultaat:
2.00
15.71
Ik heb de volgende code al:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <math.h>

/* ************************
   *   <Naam Student>   *
   *        <Studienummer>       *
   ************************/

int main(void)
{
    int Testcase, N, run1, run2;
    double a, r, ans;

    printf ("Define the number of testcases\n");
    scanf ("%d", &Testcase);
    printf ("Define a, R and n, separated by spaces and each sequence ended by a \"Return\" \n a\tr\tn\n");

    for (run1=0; run1 < Testcase ; run1++) {
        scanf ("%lf %d %lf /n", &a, &N, &r);
        ans=a*((1-pow(r,N+1))/1-r);
    }
    for (run2=0; run2 < Testcase ; run2++) {
        printf ("%.2f \n", &ans);
    }


    return 0;
}


Als ik een testrun maak krijg ik het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Define the number of testcases
3
Define a, R and n, separated by spaces and each sequence ended by a "Return"
 a      r       n
1 2 3
2 3 4
3 4 5
4 5 6
0.00
0.00
0.00

Process returned 0 (0x0)   execution time : 14.030 s
Press any key to continue.


De problemen waar ik tegenaan loop zijn:
- Er wordt Testcase+1 aantal keer een serie gevraagd, dit zou slechts Tesctase aantal keer moeten zijn.
- De printf weergeeft wel Testcase aantal antwoorden maar komt telkens op 0.00 uit, terwijl dit toch een heel ander antwoord zou moeten zijn.

Ik zie echter niet waar dit precies aan ligt door mijn beperkte kennis van C omdat ik hier pas net mee bezig ben.

Verwijderd

Voor de uitvoer: haal de & weg bij de printf.
Voor de berekening: Er staat /1-r. Dit moet waarschijnlijk /(1-r) zijn. Delen gaat voor aftrekken.

Ik heb het voor de rest niet echt inhoudelijk bekeken.

Korte uitleg:
scanf wil een reference/adres, vandaar de & (om als reference te krijgen).
Printf wil de waarde (geen adres/reference), dus is het niet nodig. Je vraagt nu naar de reference van ans. Waarom dat 0.00 geeft weet ik niet precies.

[ Voor 37% gewijzigd door Verwijderd op 18-09-2010 15:54 ]


  • HuHu
  • Registratie: Maart 2005
  • Niet online
Je gebruikt /n in plaats van \n. Verder heb je de volgorde van a, r en n omgedraait in je scanf. Wellicht helpt dat al wat.

  • Gammro
  • Registratie: Juli 2008
  • Laatst online: 06-09 21:16
Ok, de uitvoer is nu correct, dat van de berekening was een slordigheidsfoutje, dat van die & komt waarschijnlijk omdat ik Printf en Scanf als 2 dicht bij elkaar liggende syntaxes zie. Ik ook heb eens al eerder de fout gemaakt %f te gebruiken om een double te scannen.

Nu heb ik alleen nog steeds niet door waarom die 1e if-loop telkens 1 keer teveel doorlopen wordt :S

Edit: output is ook niet correct, deze weergeeft Testcase aantal keer het laatste antwoord, dus enkele keren hetzelfde. Deze fout had ik al voorzien, maar ik zal me er even in verdiepen O-)

[ Voor 36% gewijzigd door Gammro op 18-09-2010 16:08 ]


  • Haan
  • Registratie: Februari 2004
  • Nu online

Haan

dotnetter

Je hebt het trouwens in de titel en in je tekst over een 'if-loop', maar ik denk dat je een 'for-loop' bedoelt ;)

Kater? Eerst water, de rest komt later


  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
scanf ("%lf %d %lf /n", &a, &N, &r);
Als je die laatste /n eens weghaalde scanf begint sowieso pas te lezen als de user op return duwt

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20-09 18:51
Een algemene tip: kijk naar de compiler warnings! Elke moderne compiler kan controleren of de argumenten van scanf() en printf() overeenkomen met de types die je specificeert in de format string, en dan worden dit soort fouten al voor je gevonden.

Afhankelijk van welke compiler je gebruikt, kun je ook nog extra warnings aanzetten (bijvoorbeeld -Wall -Wextra bij gcc). Voor beginners is het aan te raden om alle warnings aan te zetten en als je een warning krijgt die niet te negeren, maar proberen te begrijpen wat het probleem is, en het dan op een nette manier proberen weg te werken.

En tenslotte een formaliteit: als je hier C code post, doe dat dan met een tag [code=C], dan krijg je automatisch syntax highlight cadeau. :)

  • Gammro
  • Registratie: Juli 2008
  • Laatst online: 06-09 21:16
Ik gebruik Code:Blocks met GCC, maar ik heb heb dus helemaal geen warnings gekregen van het compilen(wel gehad, maar altijd gekeken wat deze inhielden en deze eerst verholpen voor ik verder ging). Zal nog wel even kijken naar de extra warningopties.

Heel erg bedankt :)
Pagina: 1