tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
231
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sabine02 sabine02 ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    2
    Hallo an alle,

    ich bin am Beginn meines Programms und soll entweder Daten von einer Datei einlesen oder die Daten per Tastatur einlesen. Die Eingabedatei sieht beispielsweise so aus:

    4 5 1 4
    1 2 6
    1 3 5
    2 3 2
    2 4 7
    3 4 3

    Mein Problem ist (unter anderem): Ich möchte das Nullsetzen von capacity in eine eigene Funktion schreiben. Aber es funktioniert irgendwie nicht. Ich bekomme folgende Fehlermeldung:

    C:\Users\andrea\Documents\dateneinlesen.c(80): error #2162: Extraneous return value.
    C:\Users\andrea\Documents\dateneinlesen.c(88): error #2162: Extraneous return value.
    *** Error code: 1 ***

    Das ist der Code der funktioniert:
    Code :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    
    #include <stdio.h>
    #include <stdlib.h> //wird für die Funktion malloc benötigt
     
     
    //int *queque;
    //int visited[3];
    //int tail, head;
    int number_nodes, number_edges, source, sink;
    int **capacity; 
    //int **flow;
    //int *vorgaenger;
     
    //int minimum (int u, int v);
    //int maximum (int a, int b);
    //void in_queque (int x);
    //int out_queque (void);
    //int bfs (int s, int t);
     
     
    int main(void) {
        
        int i, j, h, k, c, y;
        char eingabe;
        //int max_cap;
        //int max_flow = 0;
     
     
        printf("Daten aus Datei (d) oder Daten eingeben (e)\n");
     
        scanf("%c", &eingabe);//mit %char hats funktioniert geht auch %s
        
            if (eingabe == 'd') {
     
                FILE*daten = fopen("datenkomb.txt", "r");  
        
                if (daten == NULL)
                    fprintf(stderr, "Kann Datei nicht oeffnen\n");
                else         
                    fscanf(daten, "%d %d %d %d", &number_nodes, &number_edges, &source, &sink);
            
                capacity = malloc(number_nodes*sizeof(int*));//oder (int*)malloc(number_nodes*sizeof(int))
            
                if (capacity == NULL) {
                    puts("Fehler bei der Speicherzuweisung.");
                    return 1;
                }
     
                for (i=0; i<number_nodes;i++) {
                    capacity[i] = malloc((number_nodes)*sizeof(int));
     
                    if (capacity[i] == NULL) {
                        puts("Fehler bei der Speicherzuweisung.");
                        return 1;
                    }
                }   
        
     
                for (i=0; i<number_nodes; i++) {
                    for (j=0; j< number_nodes; j++)
                        capacity[i][j] = 0;
                }
     
     
                for (i=0; i< number_edges; i++){                                            //Knoten 1 wird zu Knoten 0 usw.
                    fscanf (daten, "%d %d %d", &h, &k, &c) ; 
                    capacity[h-1][k-1] = c; 
                    printf("%d %d %d \n", h, k, c);
                } 
     
                fclose(daten);
            }
     
            for (i=0; i<number_nodes; i++) {
                for (j=0; j< number_nodes; j++){
                    printf("%d", i);
                    printf("%d",j);
                    printf("%d\n",capacity[i][j]);
                }
            }
        //else
     
    }

    Das ist der Code mit Funktion:

    Code :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    
    #include <stdio.h>
    #include <stdlib.h> //wird für die Funktion malloc benötigt
     
     
    //int *queque;
    //int visited[3];
    //int tail, head;
    int number_nodes, number_edges, source, sink;
    int **capacity; 
    int **u;
    //int **flow;
    //int *vorgaenger;
     
    //int minimum (int u, int v);
    //int maximum (int a, int b);
    //void in_queque (int x);
    //int out_queque (void);
    //int bfs (int s, int t);
    void makezero(int**u, int v, int w); 
     
    int main(void) {
        
        int i, j, h, k, c, y;
        char eingabe;
        //int max_cap;
        //int max_flow = 0;
     
     
        printf("Daten aus Datei (d) oder Daten eingeben (e)\n");
     
        scanf("%c", &eingabe);//mit %char hats funktioniert geht auch %s
        
            if (eingabe == 'd') {
     
                FILE*daten = fopen("datenkomb.txt", "r");  
        
                if (daten == NULL)
                    fprintf(stderr, "Kann Datei nicht oeffnen\n");
                else         
                    fscanf(daten, "%d %d %d %d", &number_nodes, &number_edges, &source, &sink);
            
                
                makezero(capacity, number_nodes, number_edges);
     
     
                
     
     
                for (i=0; i< number_edges; i++){                                            //Knoten 1 wird zu Knoten 0 usw.
                    fscanf (daten, "%d %d %d", &h, &k, &c) ; 
                    capacity[h-1][k-1] = c; 
                    printf("%d %d %d \n", h, k, c);
                } 
     
                fclose(daten);
            }
     
            for (i=0; i<number_nodes; i++) {
                for (j=0; j< number_nodes; j++){
                    printf("%d", i);
                    printf("%d",j);
                    printf("%d\n",capacity[i][j]);
                }
            }
        //else
     
            //printf("Eingabe der Daten folgenderweise:\n Anzahl der Knoten Anzahl dder Kanten Quelle Senke\n für i-te Kante:Anfangsknoten Endknoten Kapazität\n zwischen den Werten ein Leerzeichen."); //einlesen von eingabe
            
    }
     
     
     
    void makezero(int **u, int v, int w) {
        
                int i,j;
                u = malloc(v*sizeof(int*));//oder (int*)malloc(v*sizeof(int))
            
                if (u == NULL) {
                    puts("Fehler bei der Speicherzuweisung.");
                    return 1;
                }
     
                for (i=0; i<v;i++) {
                    u[i] = malloc((v)*sizeof(int));
     
                    if (u[i] == NULL) {
                        puts("Fehler bei der Speicherzuweisung.");
                        return 1;
                    }
                }   
        
     
                for (i=0; i<v; i++) {
                    for (j=0; j< v; j++)
                        u[i][j] = 0;
                }
     
            }


    Danke für eure Hilfe******

    lg
    Sabine
     

  2. #2
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hallo,

    Ich hab jetzt den Code nicht auf seine Funktionalität hin überprüft, aber die Fehlermeldung bekommst du, weil du in einer Funktion mit Rückgabetyp void einen Return-Wert zurückgibst.
     

  3. #3
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi und Willkommen bei tutorials.de

    Schreib ans Ende von makezero ein
    Code cpp:
    1
    
    return 0;
    und ändere den Returntyp von makezero von void auf int.

    Gruß
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #4
    sabine02 sabine02 ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    2
    Danke für eure schnellen Antworten. Wie ihr seht bin ich Programmierneuling. Hab jetzt die return Werte auf return 0 gesetzt.
    Das Programm wird aber nicht ausgeführt. Bekomme folgende Fehlermeldung:
    ***Process returnes -1073741819***
    Danke nochmal******!

    lg Sabine
     

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Das ist (wahrscheinlich) keine Fehlermeldung.
    Schreib ans main-Ende auch noch ein
    Code cpp:
    1
    
    return 0;
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

Ähnliche Themen

  1. Wie Z-Index richtig anwenden?
    Von nchristoph im Forum CSS
    Antworten: 3
    Letzter Beitrag: 03.03.11, 07:47
  2. Photoshop richtig anwenden
    Von benija im Forum Photoshop
    Antworten: 4
    Letzter Beitrag: 12.10.08, 21:04
  3. malloc/realloc richtig benutzen
    Von janosch im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 20.12.05, 21:08
  4. Texturen richtig anwenden
    Von autonom181 im Forum Cinema 4D
    Antworten: 5
    Letzter Beitrag: 29.03.05, 12:49
  5. Deformator richtig anwenden
    Von feierwasser im Forum Cinema 4D
    Antworten: 5
    Letzter Beitrag: 16.09.04, 10:17