Ik heb toch wat opmerkingen voor je:
Gebruik het preprocessor directive "#define" in plaats van een "const int" variabel*, en gebruik "unsigned short" of "unsigned char" variabelen in plaats van "integer" variabelen als je toch kleine en positieve getallen gaat opslaan in het RAM geheugen !
De variabel "som" in de functie "multi(getal_a,getal_b)" is totaal niet nodig. Je kunt ook gewoon een "return" statement met een wiskundige bewerking schrijven. De wiskundige bewerking zal worden uitgevoerd en de oplossing zal als "return"-waarde fungeren.
De "#define" "buffersize" wordt nergens gebruikt. Dit is een slechte gewoonte. Overigens is het netter om alleen aan de bovenkant van het broncodebestand preprocessor directives te gebruiken.
Ook is het netter om te schrijven "int main(void)", omdat je dan laat weten aan de C compiler dat je gewoon geen argumenten moet geven aan de functie "main()", anders ziet de C compiler het aantal argumenten van de "main()" functie als ongedefinieerd. En dat is natuurlijk niet netjes.
Je call naar de functie "fprintf" is verkeerd, je vergeet namelijk de "format specifier", deze mag je alleen weglaten als je met de functie een string wegschrijft.
Je zet je call naar de "fclose"" functie op de verkeerde plek. Je zet hem namelijk in de "for" lus, maar aan het begin van de "for" lus open je hem ook niet altijd met de functie "fopen", waardoor je zeker segmentatiefouten zult krijgen, want de bestandspointer variabel "invoerbestand" zal altijd de waarde "NULL" bevatten. Sowieso is het een slecht idee om dit in de "for" lus te doen, want het is een serieuze verspilling van tijd.
*: preprocessor directives nemen geen RAM geheugen in beslag tijdens het uitvoeren, zijn sneller dan constante variabelen omdat de preprocessor, die de C compiler uitvoert voor het compileren van het programma, alle aanroepen naar de constante, gedefinieerd met een "#define" preprocessor directive, vervangt door de waarde, waardoor het programma, eenmaal als het uitgevoerd wordt, niet meer van een andere plek in het geheugen de waarde van de constante variabel zal moeten ophalen. Ook daarom, omdat er niks in het RAM geheugen wordt opgeslagen, zal de constante van je programma niet te veranderen zijn, doordat met een ander programma expres het geheugenadres dat de constante variabel bevat, wordt overschreven.
Optionele opmerkingen:
Je schrijft "getal2=0", dit heeft echter weinig nut. Je kunt even goed jezelf de twee extra tekens besparen en gewoon "getal2" schrijven.
De expressie "invoerbestand != NULL" kun je evengoed schrijven als "invoerbestand". De eerste expressie wilt eigenlijk gewoon zeggen "als invoerbestand waar is" ( "waar" is in de informatica een andere waarde als 0 ), maar is omslachtig geschreven. De tweede expressie wilt hetzelfde zeggen, maar is simpeler geschreven.
Bij je "if" statement stond je accolade niet helemaal recht onder het "if" statement, maak er een gewoonte van om oftewel de accolade op dezelfde regel als het "if" statement, of recht onder de "i" van "if" te zetten, of zoals in die aard bij andere conditionele statements. Anders kan de C compiler misschien eens in de war geraken als je een groot aantal geneste, conditionele statements hebt.
Na het "else" statement plaatste je direct de instructie, maar het is netter om daarna, als je geen accolades gebruikt, in te springen. Omdat anders, zoals al eerder gezegd, de C compiler in de war kan raken.
Een versie van jouw programma die hier allemaal mee rekening houdt:
#include <stdio.h>
#define max 10
#define filename "som.txt"
unsigned short multi ( unsigned char getal_a, unsigned chargetal_b )
{
return getal_a * getal_b;
}
int main ( void )
{
FILE *invoerbestand;
unsigned char getal1 = 10, getal2 = 0, i;
unsigned short som;
invoerbestand = fopen ( filename, "a" );
if ( invoerbestand )
{
for( i = 0; i <= max; i++)
{
som = multi(getal1, getal2);
fprintf(invoerbestand, som);
getal2++;
}
else
printf("Het bestand %s kon niet worden gecreerd\n", invoerbestand);
}
return 0;
}
Ik hoop dat je aan al mijn uitleg wat hebt. Nog veel succes met C!