Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [C++]Cross-reference programma, print functie wilt niet werken  (gelezen 1112 keer)

Offline Joshua822

  • Lid
Hallo allemaal!

Ik moest als oefening een programma schrijven dat cross-references in een linked list opslaat. Om het programma te bedienen gebruik ik een soort interactieve interface ( zoals die van BASH en GDB bijvoorbeeld ).

Nu zijn er in mijn programma twee bugs die ik niet opgelost krijg:
 * De functie operation_printallrefs ( ) werkt gewoonweg niet, en ik zou echt niet weten hoe dit komt.
 * Na het callen van de functie operation_add ( ) worden er twee prompt ( '>' ) karakters afgedrukt op het scherm. Dit moet er normaal maar één zijn. Dit is niet heel erg, maar toch wel slordig en daarom zou ik dit willen verhelpen, maar ik weet echt niet waaraan het ligt.

Omdat de broncode vrij lang is kun je het programma op de volgende plek lezen:
http://pastebin.com/VA4JPi4c

Alvast bedankt voor de hulp! :)

Re: [C++]Cross-reference programma, print functie wilt niet werken
« Reactie #1 Gepost op: 2010/11/13, 14:50:29 »
hmm, zou je geen std::list kunnen gebruiken in plaats van je eigen misbaksel?

Okee, even nagetrokken, je tweede probleem heeft er mee te maken dat nadat je de laatste int gelezen hebt, er nog een \n zit in cin die je er uit moet halen. Vraag me niet direct hoe, ik gebruik de stdlib niet!
« Laatst bewerkt op: 2010/11/13, 15:16:29 door SeySayux »
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
Re: [C++]Cross-reference programma, print functie wilt niet werken
« Reactie #2 Gepost op: 2010/11/13, 15:50:20 »
Citaat
hmm, zou je geen std::list kunnen gebruiken in plaats van je eigen misbaksel?
Jawel, maar ik moet het volgens de beschrijving van de oefening jammer genoeg met mijn eigen misbaksel doen :P

Dank je voor je antwoord. De tweede fout in het programma was inderdaad te verhelpen door even std::cin.ignore ( ) aan te roepen.

Iemand nog een idee voor het eerste probleem?

Re: [C++]Cross-reference programma, print functie wilt niet werken
« Reactie #3 Gepost op: 2010/11/14, 10:11:58 »
Citaat
    while ( to_print_ptr != NULL )
    {
      if ( to_print_ptr->element_number != p_element_number )
            to_print_ptr = to_print_ptr->next_element;
        else
            break;
    }

Maak daar van:

Citaat
    do {
        if(to_print_ptr->element_number != p_element_number)
            to_print_ptr = to_print_ptr->next_element;
        else break;
    } while(to_print_ptr != NULL);
Kijk anders even naar Sylph::Exception en Sylph::DefaultUncaughtExceptionHandler, die hebben iets soortgelijks.
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
Re: [C++]Cross-reference programma, print functie wilt niet werken
« Reactie #4 Gepost op: 2010/11/14, 16:55:25 »
Sorry SeySayux, maar ook dat werkt niet :(

Ik heb die functie nu zeker wel honderd keer nagekeken en ik kan maar niets vinden wat er fout zou kunnen gaan. Ik heb ook al in elke keer dat de while-lus wordt uitgevoerd de waarde van de pointer laten afdrukken op het scherm en die waarde ziet er ogenschijnlijk altijd correct uit. Maar na de lus wordt er niets op het scherm afgedrukt, ook geen vreemde data!

Re: [C++]Cross-reference programma, print functie wilt niet werken
« Reactie #5 Gepost op: 2010/11/14, 19:24:53 »
Probeer eens met een debugger, gdb?

BTW,

// src/Sylph/Core/Exception.h:136
/**
 * This function adds a message to the trace information inside this
 * Exception. It can be useful to add the name of a function the Exception
 * passes through (i.e. what <code>strace</code> does), or any other
 * information you like to add to the Exception. This information is purely
 * diagnostic.
 * @param message The message to add in the traceinfo log.
 */
    void addTraceMessage(const char * message) const throw() {
        if(tracemsg == null) {
            tracemsg = new TraceMessage{message,null};
        } else {
            TraceMessage * current = tracemsg;
            while(current->next != null) {
                current = current->next;
            }
            current->next = new TraceMessage{message,null};
        }
    }
// src/Sylph/Core/UncaughtExceptionHandler.cpp:37
void DefaultUncaughtExceptionHandler::handle(const Exception& ex) const {
    StringBuffer buf;
    buf << "Uncaught Exception: "<<ex.name()<<": "<<ex.what()<<'\n';
    if(ex.tracemsg != null) {
        buf << "Trace messages: \n";
        Exception::TraceMessage * msg = ex.tracemsg;
        do {
            buf << " " << String(msg->message) << '\n';
        } while((msg->next != null) && (msg = msg->next));
    }
    thisapp->fail(buf, false);
}

HTH,

- SeySayux
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net