tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
569
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    wodka wodka ist offline Mitglied
    Registriert seit
    Apr 2002
    Beiträge
    15
    Hallo zusammen

    ich hab ein kleines Problem mit c, folgendes: ich schreibe gerade ein programm, das Dezimal Zahlen in römische zahlen umwandelt. Ich übergebe an die Funktion also eine Dezimalzhal, brauche als rückgabe Wert aber einen String. hier mal ein kleiner Auszug:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    dec = atoi(argv[2]);
    // Prüfung der Funktion
     if (!strcmp(argv[1],"dec2roe"))
          printf("Ergebnis: %s\n", dec2roe(dec));
      ...
     
    char dec2roe(int dec) {
          
      // Fehler: Dezimalzahl größer als 3888
      if (dec > 3888) {
        return("Zahl zu groß\n");
     }

    der compiler meckert ständig:
    "unteschiedliche Basistypen oder so... ich hab keine Ahnung wie ich es sonstmachen soll.

    hoffe ihr könnt mir helfen
    thx
    Geändert von wodka (11.11.02 um 23:20 Uhr)
     

  2. #2
    Robert Martinu Robert Martinu ist offline Mitglied Rubin
    Registriert seit
    Nov 2001
    Ort
    Wien
    Beiträge
    1.390
    ein char ist ein einzelner Buchstabe - das reicht nur für einen recht kurzen String

    char[] wäre eine Verbesserung, du könntest so einen String mit Inhalt zurückgaben. (Habt ihr schon ein bisschen mit Pointern gearbeitet? Sonst sind Missverständnisse vorprogrammiert!)


    Die schönste Lösung wäre es imo, [C++]ein eigenes Stringobjekt zu verwenden (oder zumindest [C] sich einen entsprechenden Datentyp zu basteln). Das würde die Sache leichter lesbar machen.
     

  3. #3
    wodka wodka ist offline Mitglied
    Registriert seit
    Apr 2002
    Beiträge
    15
    leider funktionierts nicht, wie es sollte:

    char[] dec2roe(int dec) {
    gibt er mir als syntaxfehler zurück

    char* dec2roe(int dec) {
    selbe Fehlermeldung wie zuvor

    ?! das ganze sollte eigetnlich so funktioniern wie oben geschildert.
    aber danke erstmal
     

  4. #4
    Robert Martinu Robert Martinu ist offline Mitglied Rubin
    Registriert seit
    Nov 2001
    Ort
    Wien
    Beiträge
    1.390
    char* dec2roe(int dec)
    gibt auch nur einen Zeiger auf ein char[] zurück - das char[] musst du vorher irgendwo erzeugen (und wenn du das dynamisch getan hast auch wieder zerstören)

    Ich nehme an das ist eine Schulaufgabe?
    Habt ihr Zeiger / dyn. Speicherverwaltung schon durchgenommen?



    --
    Ein Möglichkeit, einen String zurückzugeben:
    PHP-Code:
    //Rückgabe eines String mit c's Mitteln

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

    charReturnAString(int a);
    int main()
    {
        
    charTheString=NULL/*Ein Zeiger auf Speicher, noch leer*/
        
    int Wert=54321;
        
    TheString=ReturnAString(Wert);
        
    printf("Die Zahl als String: %s",TheString);
        
    free(TheString); /*Den Speicher am Ende dem System zurückgeben*/

        
    return 0;
    }

    charReturnAString(int a)
    {
        
    charTemp;
        
    char x[80];
        
    sprintf(x,"%d",a);
        
    Temp=(char*)malloc((strlen(x)+1)*sizeof(char)); /*Speicher reservieren. Achtung, aufden Platz für den Terminator nicht vergessen!*/
        
    strcpy(Temp,x); /*Den String in den neuen Speicher kopieren*/
        
    return Temp//die Speicheradresse zurückgeben

    Geändert von Robert Martinu (12.11.02 um 02:04 Uhr)
     

  5. #5
    wodka wodka ist offline Mitglied
    Registriert seit
    Apr 2002
    Beiträge
    15
    vielen Dank, jetzt gehts, das ganze ist fürs erste Semester informatik studium - aber ich bin noch weit weit am anfang!
    Aber ich habs jetzt hinbekommen, ich versteh nur nicht ganz, warum die Funktion 2 mal deklariert wird, einmal vor der Funktion main und dann nochmal bei der eigentlichen definition... müßte es nicht reichen, wenn ich der funktion einmal sage, sie soll mir einen char zurückliefern****?
     

  6. #6
    Robert Martinu Robert Martinu ist offline Mitglied Rubin
    Registriert seit
    Nov 2001
    Ort
    Wien
    Beiträge
    1.390
    warum die Funktion 2 mal deklariert wird
    Der Compiler muss von jeder Funktion erst mal gehört haben bevor er weis wie er mit ihr im Laufe des Compilierens umgehen muss.
    Würde der Compiler das komplette .cpp erst mal durcharbeiten, dann müsste man den Funktionskopf nicht nochmal oben hinschreiben.
    (Man könnte auch die ganze Funktion an eine Stelle vor ihrem ersten Vorkommen innerhalb einer anderen Funktion stellen - bei grossen Daeien ist das unübersichtlich; bei einigen Rekursionen gänzlich unmöglich.)
     

Ähnliche Themen

  1. eine Methode mit zwei möglichen Rückgabewerten
    Von lafilia im Forum Java Grundlagen
    Antworten: 3
    Letzter Beitrag: 03.12.10, 14:06
  2. Probleme mit Rückgabewerten
    Von KaWi_Trine im Forum Java
    Antworten: 2
    Letzter Beitrag: 19.04.10, 11:36
  3. Function mit mehreren Rückgabewerten
    Von schlumsch im Forum Delphi, Kylix, Pascal
    Antworten: 2
    Letzter Beitrag: 17.12.09, 21:04
  4. Probleme mit Funktionen
    Von igfas im Forum PHP
    Antworten: 1
    Letzter Beitrag: 06.07.06, 10:31
  5. Probleme mit Funktionen
    Von SirNeo im Forum PHP
    Antworten: 0
    Letzter Beitrag: 26.02.02, 16:57