Probleempje met C

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben aan het leren programmeren in C. Hieronder staat mijn programma, dat het gemiddelde berekent. Als de gebruiker -1 typt, stopt het programma en toont het gemiddelde van alle ingetypte getallen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
main() {
    float stTest, avg, total = 0.0;
    int numTest;
    avg=total/numTest;
    return 0;
    for (numTest = 0; numTest ==25; numTest++){
        printf("\nWat is het volgende getal? ");
        scanf(" %f", %stTest);
        if (stTest == -1){
            break;
        }
        total += stTest;
    }
    avg=total/numTest;
    printf("%f",avg);
    return 0;
}

Maar ik krijg bij het compilen volgende error:
main.c:9:22: error: expected expression before ‘%’ token
scanf(" %f", %stTest);

Kan iemand mij helpen?

[ Voor 0% gewijzigd door Verwijderd op 07-03-2014 15:18 . Reden: code-tag ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Hij zegt letterlijk dat die % daar niet mag staan op regel 9?

https://niels.nu


Acties:
  • 0 Henk 'm!

  • TheOmen
  • Registratie: September 2011
  • Laatst online: 19-09 17:28
Wellicht omdat er een spatie voor staat?

Running is nothing more than a series of arguments between the part of your brain that wants to stop and the part that wants to keep going.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als ik die weg doe geeft hij geen output, gewoon:
RUN FINISHED; exit value 0; real time: 0ms; user: 0ms; system: 0ms

Acties:
  • 0 Henk 'm!

  • Rmg
  • Registratie: November 2003
  • Laatst online: 20:38

Rmg

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

main() {
    float stTest, avg, total = 0.0;
    int numTest;
    avg=total/numTest;
    return 0;
    
    for (numTest = 0; numTest ==25; numTest++){
        printf("\nWat is het volgende getal? ");
        scanf(" %f", %stTest);
        
        if (stTest == -1){
            break;
        }
    total += stTest;
    }
    
    avg=total/numTest;
    printf("%f",avg);
    return 0;
}


De return op regel 7 moet weg

regels 11 moet

scanf(" %f", stTest);

Worden

Acties:
  • 0 Henk 'm!

  • Mr_gadget
  • Registratie: Juni 2004
  • Laatst online: 14:54

Mr_gadget

C8H10N4O2 powered

Die % voor %stTest moet weg.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dus, huidige code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

main() {
    float stTest, avg, total = 0.0;
    int numTest;
    avg=total/numTest;
    for (numTest = 0; numTest ==25; numTest++){
        printf("\nWat is het volgende getal? ");
        scanf(" %f", stTest);
        
        if (stTest == -1){
            break;
        }
    total += stTest;
    }
    
    avg=total/numTest;
    printf("%f",avg);
    return 0;
}


Ouput bij mij:
-nan
RUN FINISHED; exit value 0; real time: 0ms; user: 0ms; system: 0ms

Acties:
  • 0 Henk 'm!

  • TheOmen
  • Registratie: September 2011
  • Laatst online: 19-09 17:28
Verwijderd schreef op vrijdag 07 maart 2014 @ 15:15:
Als ik die weg doe geeft hij geen output, gewoon:
RUN FINISHED; exit value 0; real time: 0ms; user: 0ms; system: 0ms
Dan is je compiler-error weg en kan je gaan kijken wat er functioneel aan schort.

Running is nothing more than a series of arguments between the part of your brain that wants to stop and the part that wants to keep going.


Acties:
  • 0 Henk 'm!

  • solomo
  • Registratie: Juli 2001
  • Niet online

solomo

.....huh?

probeer eens
for (numTest = 0; numTest <=25; numTest++){

Acties:
  • 0 Henk 'm!

  • zwiep
  • Registratie: November 2010
  • Laatst online: 26-08 13:14
in je main is je numTest ook nog niet geinitialiseerd en je berekent er al avg mee
daar kan die nan (not a number) error wel van komen

Acties:
  • 0 Henk 'm!

  • Bee.nl
  • Registratie: November 2002
  • Niet online

Bee.nl

zoemt

Leuk dat mensen direct de oplossing geven, maar zo leert TS er helemaal niets van. Met simpel debuggen en goed nadenken is dit prima op te lossen. Bekijk stap voor stap wat elke regel code doet (of juist niet doet) en corrigeer het net zolang tot het werkt.

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 17:15
Op regel 6 heb je ook een probleem, je kan niet zomaar een formule in een variabele gooien. Wat ie momenteel probeert is direct in "avg" de waarde van de berekening te gooien, wat niet gaat want... Wat zijn total en numTest op dat moment?


(Zou trouwens wel kunnen, want het is c. Gezien je numTest niet een waarde geeft bij initialisatie kan er de raarste waarde in staan op dat moment, dus daar ook zeker mee oppassen ;) )

Acties:
  • 0 Henk 'm!

  • CynicRelief
  • Registratie: Februari 2001
  • Laatst online: 21-02 22:26
een hint dan: iets met scalars en references/pointers ...

The universe is an island, surrounded by whatever it is that surrounds universes.


Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 17:15
CynicRelief schreef op vrijdag 07 maart 2014 @ 15:41:
een hint dan: iets met scalars en references/pointers ...
Je roept nu direct iets waar 'ie helemaal niets mee gaat kunnen, hij zit nog op het niveau van "net begonnen met leren" als ik het zo zie. ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Merethil schreef op vrijdag 07 maart 2014 @ 15:43:
[...]


Je roept nu direct iets waar 'ie helemaal niets mee gaat kunnen, hij zit nog op het niveau van "net begonnen met leren" als ik het zo zie. ;)
Klopt.

Acties:
  • 0 Henk 'm!

  • zwiep
  • Registratie: November 2010
  • Laatst online: 26-08 13:14
hint: breek je programmatje af in kleinere stukjes. probeer eerst of je gewoon al een input, berekening en output kunt krijgen, ga dan kijken waar je de loop wilt hebben en overloop de stappen van die loop in je hoofd, verifieer je resultaat.

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 17:15
Maar er zijn genoeg tips gegeven die je verder zouden moeten helpen. Lukt het nu? Of zit je nog met een probleem?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zal eens proberen het programma 'stukjes te breken' en zo verder te komen. Bedankt iedereen alvast! :)

Acties:
  • 0 Henk 'm!

  • CynicRelief
  • Registratie: Februari 2001
  • Laatst online: 21-02 22:26
laat ik dan vragen, aan OP: waarom heb je die % daar staan?

The universe is an island, surrounded by whatever it is that surrounds universes.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CynicRelief schreef op vrijdag 07 maart 2014 @ 15:48:
laat ik dan vragen, aan OP: waarom heb je die % daar staan?
code:
1
scanf(" %f", %stTest);

Het stond zo in het boek dat ik volg. (https://play.google.com/s...ils?id=Tfk3AAAAQBAJ&hl=nl)

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 17:15
CynicRelief schreef op vrijdag 07 maart 2014 @ 15:48:
laat ik dan vragen, aan OP: waarom heb je die % daar staan?
Verwijderd schreef op vrijdag 07 maart 2014 @ 15:49:
[...]

code:
1
scanf(" %f", %stTest);

Het stond zo in het boek dat ik volg. (https://play.google.com/s...ils?id=Tfk3AAAAQBAJ&hl=nl)
@CynicRelief: Dit antwoord had je kunnen verwachten ;) Het is leuk om te weten wát het is en waarom het daar staat maar was dat écht het eerste wat jij deed toen je C leerde?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het eerste? Ja, daarvoor had ik Java geprobeerd, maar er werd gezegd dat het beter was met C te beginnen ;)

Acties:
  • 0 Henk 'm!

  • CynicRelief
  • Registratie: Februari 2001
  • Laatst online: 21-02 22:26
nou, eigenlijk had ik dit antwoord niet verwacht, nou ja voor de helft dan ...

The universe is an island, surrounded by whatever it is that surrounds universes.


Acties:
  • 0 Henk 'm!

  • thomasmoors
  • Registratie: September 2009
  • Laatst online: 31-07 12:34
Verwijderd schreef op vrijdag 07 maart 2014 @ 15:54:
Het eerste? Ja, daarvoor had ik Java geprobeerd, maar er werd gezegd dat het beter was met C te beginnen ;)
C is veel moeilijker voor de beginner. Zelf zou ik C# of Java aanraden om mee te beginnen. :)

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
Verwijderd schreef op vrijdag 07 maart 2014 @ 15:54:
Het eerste? Ja, daarvoor had ik Java geprobeerd, maar er werd gezegd dat het beter was met C te beginnen ;)
Dan is dit alvast je eerste les. Niet zomaar klakkeloos overnemen, maar lezen wat er staat. Als je van iets niet helemaal zeker bent, zoek dan uit hoe het zou moeten. Boeken staan overigens soms vol met dit soort kleine foutjes. Je zou bijna zeggen dat ze het expres doen, maar dat zal wel niet.
thomasmoors schreef op vrijdag 07 maart 2014 @ 15:56:
[...]
C is veel moeilijker voor de beginner. Zelf zou ik C# of Java aanraden om mee te beginnen. :)
Nouja, het mooie is dat je bij C goed moet lezen wat er staat. De compiler geeft vaak geen nette foutmelding (iig niet zoals C# compiler), waardoor het alleen nog maar belangrijker is dat je weet wat je typt.

[ Voor 28% gewijzigd door Caelorum op 07-03-2014 15:58 ]


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 15-09 09:10
Inderdaad. Als je wilt beginnen met Java zou ik je aanraden om te beginnen met Programmeren in Java met BlueJ. Alhoewel het er erg knullig uitziet en in het begin ook zo aanvoelt, leer je wel precies wat een IDE en de taal voor je kunnen doen met natuurlijk OO.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thomasmoors schreef op vrijdag 07 maart 2014 @ 15:56:
[...]


C is veel moeilijker voor de beginner. Zelf zou ik C# of Java aanraden om mee te beginnen. :)
Ik vind C persoonlijk veel makkelijker dan Java. Door de vele declaraties bij het begin bij Java...
Caelorum schreef op vrijdag 07 maart 2014 @ 15:56:
[...]

Dan is dit alvast je eerste les. Niet zomaar klakkeloos overnemen, maar lezen wat er staat. Als je van iets niet helemaal zeker bent, zoek dan uit hoe het zou moeten. Boeken staan overigens soms vol met dit soort kleine foutjes. Je zou bijna zeggen dat ze het expres doen, maar dat zal wel niet.
Ik hoop dat ze die foutjes er niet te vaak inzetten...

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 17:15
Caelorum schreef op vrijdag 07 maart 2014 @ 15:56:
[...]

Dan is dit alvast je eerste les. Niet zomaar klakkeloos overnemen, maar lezen wat er staat. Als je van iets niet helemaal zeker bent, zoek dan uit hoe het zou moeten. Boeken staan overigens soms vol met dit soort kleine foutjes. Je zou bijna zeggen dat ze het expres doen, maar dat zal wel niet.
Tenzij er gewoon onder zou staan "Dit geeft een error WAAAANNTTT..." (kan het boek niet zien, firewall op het werk...).
Hoe dan ook: Inderdaad. Boeken staan vol foutjes die dingen kunnen breken, maar dit was wel direct een mooie om te zien hoe je errors moet lezen in C.
Het probleem met C hierin is dat de error een stukje cryptischer is dan, zeg, de Java die je net aandraagt. De stacktraces in Java geven vaak (te) veel (meer) info, dus zijn wat vriendelijke als je iets mis doet.
Verwijderd schreef op vrijdag 07 maart 2014 @ 15:58:
[...]

Ik vind C persoonlijk veel makkelijker dan Java. Door de vele declaraties bij het begin bij Java...
Welke declaraties bij Java? De imports? Of zoiets:

Java:
1
2
3
4
private String foo;
private boolean bar;

public int baz;


?

Is trouwens wel een grappige opmerking, terwijl je eerste echte probleemstuk direct misgaat en je hier om hulp komt vragen bij een best goed geschreven error :P

[ Voor 22% gewijzigd door Merethil op 07-03-2014 16:01 ]


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
Verwijderd schreef op vrijdag 07 maart 2014 @ 15:58:
[...]Ik hoop dat ze die foutjes er niet te vaak inzetten...
Nouja de foutmelding was op zich vrij duidelijk:
main.c:9:22: error: expected expression before ‘%’ token
Een foutmelding op regel 9 bij teken 22 (incl. spaties en tabs, etc). Een onverwacht expressie voor %.
Duidelijk dat daar een fout staat dus. Als je dan daar naar kijkt en je snapt niet wat alle tekens doen moet je allereerst gaan uitzoeken wat ze doen en of het logisch is wat er staat.

Maar ik kan je nu al zeggen, dit is iets dat je gewoon moet leren (en ook zal leren als je volhoud). Je had dit net zo goed in java als C#, C, C++, Actionscript of een andere taal kunnen tegenkomen.

[ Voor 3% gewijzigd door Caelorum op 07-03-2014 16:04 ]


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 11:50
Voor als je je code naloopt: Wat gebeurt er als de gebruiker direct -1 invoert.

[ Voor 4% gewijzigd door CurlyMo op 07-03-2014 16:05 ]

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

Verwijderd

Kijk eens goed in het boek of er daadwerkelijk een "%" staat... Staat er geen ander teken? ;)

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 17:15
Verwijderd schreef op vrijdag 07 maart 2014 @ 16:13:
Kijk eens goed in het boek of er daadwerkelijk een "%" staat... Staat er geen ander teken? ;)
Hij linkt het boek, je zou het kunnen bekijken :P

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Wikipedia: Rubber duck debugging Dit is een goede manier en zeker de moeite waard als je net begint met programmeren. Koop een badeendje, zet het naast je monitor en ga regel-voor-regel aan die badeend uitleggen wat je doet.

Ter illustratie hieronder het gesprek dat ik zou voeren met de badeend over jouw code in de OP:

C:
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
29
30
31
32
#include <stdio.h>
main() {
// Ok badeend, het programma is begonnen, daar gaan we:

    float stTest, avg, total = 0.0;
// Ik maak 3 variabelen aan als float en die zet ik op 0.0 . Is dat echt zo of staat alleen total nu op 0?

    int numTest;
// Een integer variabele, die ga ik als teller gebruiken

    avg=total/numTest;
// Ik bereken nu het avg door total te delen door numTest. Euhh.. numTest is undefined. Total is 0. WTF... dat klopt niet!

    return 0;
// Hier stopt het programma... WTF dacht ik ??? dit werkt natuurlijk niet

    for (numTest = 0; numTest ==25; numTest++){
// Dit is een for-loop die start op 0 en net zo lang loopt als numTest == 25. WTF?? Dat gebeurd nooit! Het moet <= zijn. Super bedankt badeend voor het spotten van deze fout!

        printf("\nWat is het volgende getal? ");
// Blabla enzovoorts... je snapt het idee hier wel

        scanf(" %f", %stTest);
        if (stTest == -1){
            break;
        }
        total += stTest;
    }
    avg=total/numTest;
    printf("%f",avg);
    return 0;
}
Merethil schreef op vrijdag 07 maart 2014 @ 16:13:
[...]


Hij linkt het boek, je zou het kunnen bekijken :P
Jij hebt er dus ook niet naar gekeken, want het boek is niet openbaar beschikbaar. Het is een linkje naar waar je het boek kunt kopen.

[ Voor 9% gewijzigd door HuHu op 07-03-2014 16:16 ]


Acties:
  • 0 Henk 'm!

  • zwiep
  • Registratie: November 2010
  • Laatst online: 26-08 13:14
HuHu schreef op vrijdag 07 maart 2014 @ 16:15:
Wikipedia: Rubber duck debugging Dit is een goede manier en zeker de moeite waard als je net begint met programmeren. Koop een badeendje, zet het naast je monitor en ga regel-voor-regel aan die badeend uitleggen wat je doet.

Ter illustratie hieronder het gesprek dat ik zou voeren met de badeend over jouw code in de OP:

C:
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
29
30
31
32
#include <stdio.h>
main() {
// Ok badeend, het programma is begonnen, daar gaan we:

    float stTest, avg, total = 0.0;
// Ik maak 3 variabelen aan als float en die zet ik op 0.0 . Is dat echt zo of staat alleen total nu op 0?

    int numTest;
// Een integer variabele, die ga ik als teller gebruiken

    avg=total/numTest;
// Ik bereken nu het avg door total te delen door numTest. Euhh.. numTest is undefined. Total is 0. WTF... dat klopt niet!

    return 0;
// Hier stopt het programma... WTF dacht ik ??? dit werkt natuurlijk niet

    for (numTest = 0; numTest ==25; numTest++){
// Dit is een for-loop die start op 0 en net zo lang loopt als numTest == 25. WTF?? Dat gebeurd nooit! Het moet <= zijn. Super bedankt badeend voor het spotten van deze fout!

        printf("\nWat is het volgende getal? ");
// Blabla enzovoorts... je snapt het idee hier wel

        scanf(" %f", %stTest);
        if (stTest == -1){
            break;
        }
        total += stTest;
    }
    avg=total/numTest;
    printf("%f",avg);
    return 0;
}

[...]

Jij hebt er dus ook niet naar gekeken, want het boek is niet openbaar beschikbaar. Het is een linkje naar waar je het boek kunt kopen.
zalig voorbeeldje gemaakt :D

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 17:15
HuHu schreef op vrijdag 07 maart 2014 @ 16:15:

Jij hebt er dus ook niet naar gekeken, want het boek is niet openbaar beschikbaar. Het is een linkje naar waar je het boek kunt kopen.
Zie mijn bericht hier:
Merethil schreef op vrijdag 07 maart 2014 @ 15:58:
[...]


Tenzij er gewoon onder zou staan "Dit geeft een error WAAAANNTTT..." (kan het boek niet zien, firewall op het werk...).
Vind je voorbeeld wel erg netjes!

Acties:
  • 0 Henk 'm!

Verwijderd

Nou jongens, jullie vallen wel erg snel door de mand zo.. Niet eens opmerken dat main niet eens een type heeft maar wel een return 0; afgeeft.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat mag in C90.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

ja, maar in C99 dus niet he?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ook. Je valt wel door de mand hoor ;)

[ Voor 80% gewijzigd door .oisyn op 07-03-2014 16:42 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 11:50
Allemaal hetzelfde in deze context:
C:
1
2
3
return 0;
return NULL;
return;


http://c-faq.com/null/macro.html
C:
1
#define NULL  ((void*) 0)

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:51
Die derde is niet hetzelfde als de eerste twee -- daarmee is de waarde die geretourneerd wordt ongespecificeerd, terwijl de functie (impliciet) een int retourneert.

Maar volgens mij heeft de TS niet veel aan deze mierenneukerij. (HuHu's post hierboven vond ik wél zinnig.)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

En de tweede compilet niet onder C (een pointer kun je niet impliciet casten naar een int). Wel onder C++ als main() gewoon correct een int zou returnen.

[ Voor 30% gewijzigd door .oisyn op 07-03-2014 17:54 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:51
V.z.i.w. kan dat best in C? (Al is het meestal niet aan te raden.)

Acties:
  • 0 Henk 'm!

  • CynicRelief
  • Registratie: Februari 2001
  • Laatst online: 21-02 22:26
Ward, hangt een beetje van je doel af (wat is je doel?) maar als je dit soort geneuzel wilt voorkomen, dan is een modernere taal als Java of C# beslist een betere keuze (en geloof me, Java (of C#) is makkelijker dan C). Wil je apps maken in een moderne taal? Ga dan voor Java of C#; wil je ooit nog iets met C/C++? Dan is dat de beste start, want van moderne taal naar C/C++ is een lijdensweg; van C/C++ naar moderne taal is appeltje-eitje.

The universe is an island, surrounded by whatever it is that surrounds universes.


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Niet om het een of ander, maar de discussie of Java makkelijker of moeilijker om te leren is dan C hoort hier niet echt thuis. De TS heeft een probleem met zijn C code, hij vraagt niet met welke taal moet beginnen.
Alsof je een probleem met je auto hebt en iedereen je aanraad maar met de bus te gaan....

Om nog iets nuttigs toe te voegen: Om je programma makkelijker te kunnen debuggen kun je eens leren hoe je breakpoints set, door je code stept en variabele inspecteert in de door jou gebruikte IDE. Wat gebruik je precies?

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
Het boek gebruikt Code::Blocks dus lijkt mij dat hij die gebruikt.

Acties:
  • 0 Henk 'm!

  • CynicRelief
  • Registratie: Februari 2001
  • Laatst online: 21-02 22:26
EddoH schreef op vrijdag 07 maart 2014 @ 19:06:
Niet om het een of ander, maar de discussie of Java makkelijker of moeilijker om te leren is dan C hoort hier niet echt thuis. De TS heeft een probleem met zijn C code, hij vraagt niet met welke taal moet beginnen.
Alsof je een probleem met je auto hebt en iedereen je aanraad maar met de bus te gaan....

Om nog iets nuttigs toe te voegen: Om je programma makkelijker te kunnen debuggen kun je eens leren hoe je breakpoints set, door je code stept en variabele inspecteert in de door jou gebruikte IDE. Wat gebruik je precies?
Nee, maar hij zegt zelf dat ie begonnen is met Java, en dat iemand hem heeft verteld dat C makkelijker was om mee te beginnen ... die vraag speelt kennelijk op de achtergrond, vandaar ...

The universe is an island, surrounded by whatever it is that surrounds universes.


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Caelorum schreef op vrijdag 07 maart 2014 @ 19:15:
Het boek gebruikt Code::Blocks dus lijkt mij dat hij die gebruikt.
Niet gezien (en was ook niet van plan het boek te gaan lezen als iemand dat post;) )

Anyway, dan staat er vast ook wel in hoe he met Code::Blocks breakpoints kunt zetten en kunt steppen.

Acties:
  • 0 Henk 'm!

  • CynicRelief
  • Registratie: Februari 2001
  • Laatst online: 21-02 22:26
Maar Ward, als je serieus verder wil met C, en je kan Engels lezen, knikker dan je boek het raam uit. en koop het dunste en beste C-taal boek ooit: http://www.amazon.co.uk/C...anguage-2nd/dp/0131103628

Ga er een weekend voor zitten met dit boek en je bent maandag klaar; en gedurende je hele programmeer-carriere ga je terugdenken aan dit boekje!

The universe is an island, surrounded by whatever it is that surrounds universes.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op vrijdag 07 maart 2014 @ 18:09:
V.z.i.w. kan dat best in C? (Al is het meestal niet aan te raden.)
Nee. Het verschil tussen C en C++ komt doordat in C de NULL gedefinieerd wordt als (void*)0, terwijl het in C++ gewoon 0 is. In geen van beide talen is er een impliciete conversie van pointer naar integral type.

[ Voor 11% gewijzigd door .oisyn op 07-03-2014 20:13 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op vrijdag 07 maart 2014 @ 15:03:
Ik ben aan het leren programmeren in C. Hieronder staat mijn programma, dat het gemiddelde berekent. Als de gebruiker -1 typt, stopt het programma en toont het gemiddelde van alle ingetypte getallen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
main() {
    float stTest, avg, total = 0.0;
    int numTest;
    avg=total/numTest;
    return 0;
    for (numTest = 0; numTest ==25; numTest++){
        printf("\nWat is het volgende getal? ");
        scanf(" %f", %stTest);
        if (stTest == -1){
            break;
        }
        total += stTest;
    }
    avg=total/numTest;
    printf("%f",avg);
    return 0;
}

Maar ik krijg bij het compilen volgende error:
main.c:9:22: error: expected expression before ‘%’ token
scanf(" %f", %stTest);

Kan iemand mij helpen?
Regel 9 moet natuurlijk scanf("%f", &stTest); zijn. Verder klopt regel 7 ook niet, je bedoelt waarschijnlijk numTest = 0; numtest < 25; numTest++ . Regel 6 moet natuurlijk weg, nu termineert je programma al voor de for loop en regel 5 slaat nergens op: je deelt door een ongeinitialiseerde variabele numTest. Dit is echt triviaal, les 1, semester 1 C. Als je hier al moeite mee hebt ...

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
Verwijderd schreef op vrijdag 07 maart 2014 @ 21:27:
[...]
Dit is echt triviaal, les 1, semester 1 C. Als je hier al moeite mee hebt ...
Lekker Spuit 11 allemaal zeg. Daarnaast is het in college leren altijd makkelijker dan zelfstudie. Alsof jij niet fouten maakte toen je nog maar 5 pagina's in je eerste boek over programmeren was. Kom op zeg, wat een opmerking... :X

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:02
.oisyn schreef op vrijdag 07 maart 2014 @ 20:12:
Nee. Het verschil tussen C en C++ komt doordat in C de NULL gedefinieerd wordt als (void*)0, terwijl het in C++ gewoon 0 is.
AFAIK ligt de definitie van NULL is niet zo vast in C
A null-pointer constant is an integral constant expression that evaluates to zero (like 0 or 0L), or the cast of such value to type void* (like (void*)0).

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Lethalis
  • Registratie: April 2002
  • Niet online
Omfg :D

Toen ik gisteren het voorbeeld van de TS zag en de foutmelding dacht ik simpelweg "regel 9 klopt niet, omdat er %stTest staat", maar nu ik er inderdaad nog eens naar kijk, slaat die hele code helemaal nergens op :D

Dat ik dat niet zag zeg :)

Het is dat ik bij tentamens altijd extra kritisch naar code kijk, want dan krijg je ook vaak vragen als "noem 5 fouten in dit programma en leg uit waarom".

Daar zou je dit voorbeeld goed voor kunnen gebruiken :)

Ask yourself if you are happy and then you cease to be.


Acties:
  • 0 Henk 'm!

  • thomasmoors
  • Registratie: September 2009
  • Laatst online: 31-07 12:34
Caelorum schreef op vrijdag 07 maart 2014 @ 16:03:
[...]

Nouja de foutmelding was op zich vrij duidelijk:
main.c:9:22: error: expected expression before ‘%’ token
Een foutmelding op regel 9 bij teken 22 (incl. spaties en tabs, etc). Een onverwacht expressie voor %.
Duidelijk dat daar een fout staat dus. Als je dan daar naar kijkt en je snapt niet wat alle tekens doen moet je allereerst gaan uitzoeken wat ze doen en of het logisch is wat er staat.

Maar ik kan je nu al zeggen, dit is iets dat je gewoon moet leren (en ook zal leren als je volhoud). Je had dit net zo goed in java als C#, C, C++, Actionscript of een andere taal kunnen tegenkomen.
Je hebt helemaal gelijk, echter scheelt het net een beetje op de punten van
  • duidelijkere comilererrors
  • in C# een simpelere foreach loop
  • support door mensen die op hetzelfde niveau uitleggen (op bijv. stackoverflow)
Tenminste dat zijn globaal mijn bevindingen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Lethalis schreef op zaterdag 08 maart 2014 @ 08:01:
Daar zou je dit voorbeeld goed voor kunnen gebruiken :)
Mooie manier om een beginner compleet de grond in te stampen. :/

Jongens, we hebben intussen allemaal wel gezien dat er iets schort aan de code van de topicstarter maar hou het verdorie op zijn minst een klein beetje constructief asjeblieft.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Lethalis
  • Registratie: April 2002
  • Niet online
Ik wil ts helemaal niet de grond instampen.. maar ik was oprecht verbaasd dat ik het niet zag.

Als ik ts een tip mag geven, bouw code regel voor regel op en kijk wat het doet. Dat is veel leerzamer dan code overtypen en je op het eind afvragen waarom het niet werkt.

En gooi dat boek snel weg ;)

[ Voor 5% gewijzigd door Lethalis op 08-03-2014 15:53 ]

Ask yourself if you are happy and then you cease to be.


Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Nu heb ik niet veel ervaring met een C(++)-omgeving, maar in de .NET wereld zou je hier, met de juiste tools, gewoon goede waarschuwingen over krijgen. Denk hierbij bijvoorbeeld aan unreachable code na het eerste return statement, of in de for-loop. Of juist aan variabelen die niet geïnit zijn. Naast dat eventueel deze fouten konden worden gezien, zou ik ook minimaal verwachten dat je hier waarschuwingen op kreeg tijdens of zelfs voor het compilen. Heeft C(++) niet ook zoiets?

Acties:
  • 0 Henk 'm!

Verwijderd

De vraag is: heeft je compiler niet zoiets? Het heeft niet zoveel met de taal zelf te maken.

Met gcc -Wall:
code:
1
2
3
*.c:2:1: warning: return type defaults to 'int' [-Wreturn-type]
*.c: In function 'main':
*.c:9:22: error: expected expression before '%'; token

De eerste melding zou ervoor moeten zorgen dat je er "int main" van maakt en iets aan de % doet (bijvoorbeeld weghalen):
code:
1
2
3
*.c: In function 'main':
*.c:9:9: warning: format '%f' expects argument of type 'float *', but argument 2 has type 'double' [-Wformat]
*.c:5:14: warning: 'numTest' is used uninitialized in this function [-Wuninitialized]

Ah, hier krijg je de hint dat het weghalen van de % niet de juiste oplossing was. De scanf functie wil namelijk een float pointer zodat het iets in die variabele kan stoppen. Kortom, het had &stTest moeten zijn.
Nu zie je ook dat de regel avg=total/numTest; daar niet hoort te staan en dat zou een hint moeten zijn dat ook de return 0; daar niet hoort. Maar laten we niet op de zaken vooruit lopen en alleen de regel met total/numTest weghalen:
code:
1

Juist, geen warnings. Maar het programma doet (nog) niets. Als je wat gaat zoeken over -Wunreachable-code dan zul je wel vinden waarom. Met gcc 4.4 krijg je:
code:
1
2
3
4
5
6
*.c: In function 'main':
*.c:6: warning: will never be executed
*.c:7: warning: will never be executed
*.c:12: warning: will never be executed
*.c:6: warning: will never be executed
*.c:14: warning: will never be executed

Dit zou ervoor moeten zorgen dat je ziet dat de return 0; er niet hoort en weghaalt. De code compilet en doet niet wat het moet doen:
-nan

Als je gaat uitzoeken hoe dit komt, dan blijkt dat de hele for loop nooit wordt uitgevoerd. Waarom niet? Dat kan alleen maar zijn omdat de condition (numTest == 25) niet evalueert naar true. En dat klopt, ook de eerste keer is numTest geen 25. Dat zou waarschijnlijk numTest <= 25 moeten zijn. En dan doet het programma ongeveer wat je doet.

Het probleem is dat je nu met een stuk code begon waar heel wat mis mee was. Dat zorgt ervoor dat je allerlei fouten stuk voor stuk moet gaan oplossen. Ook dat gaat niet in één keer goed, dus pas ermee op.

Effectief zeg ik hetzelfde als Dr. Rockzo, maar nu met iets meer van de gedachten die je zou moeten hebben als je gaat debuggen. Ik vind zelf dat dit codevoorbeeld laat zien dat TS teveel in één keer wilde doen.
Pagina: 1