2016-03-20 3 views
-2

Ich muss wissen, ob ich die Informationen, die in tire_pressure in der Struktur sind, aufrufen und in einer anderen Funktion verwenden kann? Grundsätzlich bin ich mir nicht sicher, wie ich es von einem zum anderen nennen soll. Muss ich die Funktion im tireTest deklarieren? Mit welcher Funktion versuche ich auf die tire_pressure-Information zuzugreifen. Danke für die HilfeInformationen aus einer Struktur nehmen und in einer anderen Funktion verwenden

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


struct tires 
{ 
    char Manufacturer[40]; 
    int tire_pressure[0]; 
    int pressure_change[0]; 
}typedef tires; 
// Prototypes 
void getTireInformation(tires*, int); 
void tirePressure(tires*, int); 
void tireTest(tires*, int); 
int main() 
{ 
    tires tire[4]; 
    tires* ptire = &tire[0]; 
    srand(time(NULL)); 

    getTireInformation(ptire, 4); 
    tirePressure(ptire, 4); 
    tireTest(ptire, 4); 

    return 0; 
}// end main 
//============================ 
void getTireInformation(tires* ptire, int size) 
{ 
    int i = 0; 
    for (i = 0; i < size; i++) 
    { 
     printf("please enter Make for the tire: \n"); 
     scanf("%s", &(ptire + i) ->Manufacturer); 


    } 

    printf("all tire make you entered ...just for verification:\n"); 
    for(i = 0; i < size; i++) 
     printf("%s\n",(ptire +i) ->Manufacturer); 

}//end getTireInformation 
//======================================================================= 

void tirePressure(tires* ptire, int size) 
{ 
    int i = 0; 
    int min = 18; 
    int max = 35; 
    for (i = 0; i < size; i++) 
    { 
     (ptire + i) ->tire_pressure[0] = rand() % (max - min + 1) + min; 
     printf("The Tire pressure is: "); 
     printf("%d\n",(ptire + i) -> tire_pressure[0]); 
    }// end for 
}// end tirePressure 
//============================================================== 
void tireTest(tires* ptire, int size) 
{ 
    int i = 0; 
    int min = 2; 
    int max = 5; 
    int change[0] = {0}; 
    i++; 
    for (i = 0; i < size; i++) 
    { 
     change[0] = rand() % (max - min + 1) + min; 
     //(ptire + i) -> pressure_change[0] = rand() % (max - min + 1) + min; 
     printf("Pressure change from test %d: %d\n",i + 1, change[0]); 
     //(ptire + i) -> pressure_change[0] = change[0] + tirePressure; 
     //printf("%d\n", (ptire +i) -> pressure_change); 
    }// end for 

} 
+0

Sie müssen nicht zugreifen '(ptire + i) -> tire_pressure [0] 'und' change [0] ', da die Arrays nur Nullelemente haben. Hinweis: Das Erstellen von Arrays mit null Elementen wird im Standard nicht unterstützt. – MikeCAT

+0

@MikeCAT also, wenn das Array 2 Elemente hätte sagen, würde es funktionieren? – Charlie

+0

Sie haben * undefiniertes Verhalten * aufgerufen, indem Sie einen Zeiger auf ein Objekt mit falschem Datentyp übergeben: '% s' ruft' char * 'auf, aber Sie haben' char (*) [40] 'in' scanf ("% s ", & (ptire + i) -> Hersteller);' – MikeCAT

Antwort

0

Ich denke, Sie machen das Problem schwieriger, als es ist - nachsehen, ob diese Vereinfachung Ihre Probleme löst:

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

#define PRESSURE_MIN 18 
#define PRESSURE_MAX 35 

struct tires 
{ 
    char Manufacturer[40]; 
    int tire_pressure; 
    int pressure_change; 
} typedef tires; 

// Prototypes 
void getTireInformation(tires *, int); 
void tirePressure(tires *, int); 
void tireTest(tires *, int); 

//=============================================================== 

void getTireInformation(tires *ptire, int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     printf("please enter Make for the tire: \n"); 
     scanf("%s", ptire[i].Manufacturer); 
    } 

    printf("all the tire makes you entered ... just for verification:\n"); 

    for (int i = 0; i < size; i++) 
    { 
     printf("%s\n", ptire[i].Manufacturer); 
    } 

} // end getTireInformation 

//=============================================================== 

void tirePressure(tires *ptire, int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     ptire[i].tire_pressure = rand() % (PRESSURE_MAX - PRESSURE_MIN + 1) + PRESSURE_MIN; 
     printf("The Tire pressure is: "); 
     printf("%d\n", ptire[i].tire_pressure); 
    } // end for 
} // end tirePressure 

//============================================================== 

void tireTest(tires *ptire, int size) 
{ 
    int min = 2; 
    int max = 5; 

    for (int i = 0; i < size; i++) 
    { 
     int change = rand() % (max - min + 1) + min; 

     printf("Pressure change from test %d: %d\n", i + 1, change); 

     ptire[i].pressure_change = change + ptire[i].tire_pressure; 

     printf("%d\n", ptire[i].pressure_change); 
    } // end for 
} 

//=============================================================== 

int main() 
{ 
    tires tire[4]; 

    srand(time(NULL)); 

    getTireInformation(tire, 4); 
    tirePressure(tire, 4); 
    tireTest(tire, 4); 

    return 0; 
} // end main 
+0

@cdiane Ich habe nicht einmal darüber nachgedacht, int min und int max eine Konstante zu machen. Ich glaube, ich habe so lange daran gearbeitet, dass ich anfange, Dinge zu überdenken – Charlie

Verwandte Themen