Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[C] Programmeren met textfiles

Anoniem
Capone
5 antwoorden
  • Beste mensen,

    Ik ben bezig met verschillende programmatjes schrijven in C. Ik gebruik Borland 3.1 (oud ik weet het).
    Ik wil in dit programma net zolang letters invoeren tot dat de . (punt) wordt ingevoerd. Deze letters moeten naar letters.txt worden geschreven op de C-schijf. Als ik dit programma run en ik voer enkele letters achter elkaar in zoals 'abcdefg.' dan krijg ik een error. Maar als tussen elke letter een enter doe en op het laatst een punt dan gaat het wel goed.
    Wat doe ik fout? en hoe kan ik dit dan oplossen?

    Alvast bedankt!
    Stefan Spekhorst

    Hier volgt mijn programma:

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

    int main(void)
    {
    FILE *p_file_A;
    char chLetters;

    p_file_A=fopen("c:\\letters.txt","w";);
    if (p_file_A == NULL)
    {
    printf("Error: Het bestand kan niet geopend worden. Het programma wordt afgesloten";);
    exit(0);
    }

    printf("Geef een rij letters totdat de '.' wordt ingevoerd:
    ";);
    scanf("%s",&chLetters);

    while(chLetters != '.')
    {
    fprintf(p_file_A,"%s", &chLetters);
    scanf("%s", &chLetters);
    }
    fclose(p_file_A);
    return(0);
    }
  • Ik ben geen C meester, maar volgens mij zit er in ieder geval een fout in je scanf functie, je leest namelijk een string uit (char array in C dan), maar je stopt het in een char. Dat moet eigenlijk zijn:
    [code:1:cbf90451f0]scanf("%c",&chLetters);[/code:1:cbf90451f0]
    Als je dus beide keren dat je scanf gebruikt %s door %c vervangt, dan krijg je in ieder geval geen foutmeldingen meer.

    Tweede probleem: in je fprintf functie geef je als parameter mee '&chLetters', hiermee wordt het adres van chLetters in de tekstfile weggeschreven, in plaats van de waarde. Die '&' kan hier dus weggelaten worden. En ook hier gebruik je %s terwijl het om een char gaat en je dus %c moet gebruiken.

    Derde probleem: Je kan in C normaal niet zomaar tekstinvoer lezen voordat de enter is ingevoerd. Pas op het moment dat je op enter drukt, wordt de tekst in je programma uitgelezen, en zal hij gaan 'zoeken' naar een punt. Hier is dus geen makkelijke oplossing voor. Voor meer informatie: http://c-faq.com/osdep/cbreak.html

    Als probleem 1 en 2 opgelost zijn, werkt je programma gewoon, afgezien van het feit dat je eerst op enter moet drukken dan voordat heel de tekst ingelezen wordt.
  • Kijk eens naar de verschillende functies in stdio: http://www.cplusplus.com
    ef/cstdio/
    . En dan met name naar getc, getchar, gets en scanf. Met deze functies kun je invoer uitlezen.

    Wat er fout gaat in jouw programma is dat chLetters bestaat uit 1 char. Daar past dan ook maar 1 teken in. En scanf leest een (geformateerde) -string- in (een string bestaat uit de reeks tekens plus een afsluitend 0-teken). Dus dat past nooit (behalve dan een lege string) in die chLetters. En dat geeft die fout.
  • [quote:991c6ed775="SHARK"]En scanf leest een (geformateerde) -string- in[/quote:991c6ed775]

    Alleen als je scanf("%s", &bla); gebruikt, leest hij een string in. Met scanf("%c", &bla); leest hij een character uit. Zo kan je zelf aan scanf opgeven wat voor type er moet worden verwacht. :wink:
  • [quote:cf55b8376b="Capone"]Alleen als je scanf("%s", &bla); gebruikt, leest hij een string in. Met scanf("%c", &bla); leest hij een character uit. Zo kan je zelf aan scanf opgeven wat voor type er moet worden verwacht. :wink:[/quote:cf55b8376b]
    Jaja, ik doelde ook op zijn scanf (%s). Maar je kunt beter een andere functie gebruiken aangezien scanf er meer is voor geformatteerde invoer en dit in dit geval niet nodig is.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.