mindtrip_1 Geschrieben 22. November 2020 Geschrieben 22. November 2020 Zuerst möchte ich mich Entschuldigen das ich mein komplettes Programm hier so hinzugefügt habe. Kenne mich nicht mit der Seite aus da ich mich erst Heute angemeldet habe da ich Hilfe brauche und nichts verständliches im Internet gefunden habe. Ich habe vor kurzem mit meinem Techniker angefangen und habe direkt so ein Ding vor die Füße geworfen bekommen. Habe mich mal dran getraut und bin zu dem Stand unten gekommen. Mein Problem ist [Warning] comparison between pointer and integer [enabled by default] Möchte aus denn Jeweiligen Rechnungen meines Unterprogrammes das Ergebnis an Main zurück geben, hänge seit 3 Tagen daran und komme nicht weiter. #include <stdio.h> #include <stdlib.h> #include <math.h> /* Reihen Parallelwiderstand */ int Abfrage_Rechnung(); float Abfrage_Widerstaende(); float Rechnung_Reihe(); float Rechnung_Parallel(); float x; int main(void) //wenn INT davor steht, muss am ende return X stehen, bei void erwartet er nichts am ende { float r[10]; //Array deklariert (FLießkommerzahlen) int anz; int wahl; int i; float rges;//wegen den Kommazahlen, welche als ergebnis erscheinen können float leitwert; float x[1]; x[1]=1; printf ("Ich rufe Das Unterprogramm Auswahl_Rechnung auf\n"); Abfrage_Rechnung(); while(Abfrage_Rechnung!=0) { if (Abfrage_Rechnung!=0) { //Zahlenabfrage printf ("Ich rufe Das Unterprogramm Abfrage_Widerstaende auf\n"); Abfrage_Widerstaende(); if (Abfrage_Rechnung==01111111) {//Reihenschaltung printf ("Ich rufe Das Unterprogramm Rechnung_Reihe auf\n"); Rechnung_Reihe(); } else {//Parallelschaltung brerchnet mit Leitwert printf ("Ich rufe Das Unterprogramm Rechnung_Parallel auf\n"); Rechnung_Parallel(); } } else //Sprung zum ende des Programmes { printf("Fertig\n"); } } return 0; } int Abfrage_Rechnung(void){ //Abfrage der Rechenart int wahl; printf("\nWahl der Widerstandsberechnung:\n"); printf("1 Reihenschaltung\n"); printf("2 Parallelschaltung\n"); printf("0 Programmende\n"); scanf("%d",&wahl); return wahl; } float Abfrage_Widerstaende(void){ int anz; int i; float r[10]; printf("Geben Sie die Anzahl der Widerstaende ein:\n\n"); scanf("%d",&anz); for (i=0;i<anz;i++) { printf("Geben Sie den %d. Widerstandswert in Ohm ein:\n",i+1); scanf("%f",&r); } for (i=0;i<anz;i++) printf("R[%d] = %5.2f Ohm\n",i+1,r); return r[10]; } float Rechnung_Reihe(){ float rges; int i,anz; float r[10]; rges=0; for (i=0;i<anz;i++) rges=rges+r; printf("Der Gesamtwiderstand betraegt %5.2f Ohm",rges); } float Rechnung_Parallel(void){ int i,anz; float rges, leitwert; float r[10]; leitwert=0; for (i=0;i<anz;i++) leitwert=leitwert+1/r; rges=1/leitwert; printf("Der Gesamtwiderstand betraegt %5.2f Ohm",rges); } Zitieren
Jana309 Geschrieben 22. November 2020 Geschrieben 22. November 2020 Hallo mindtrip, deinem Code nach zu urteilen, verstehst du wichtige Grundlagen noch nicht, z.B. Anwendung von Funktionen und Gültigkeitsbereich von Variablen. Die von dir beschriebene Fehlermeldung kommt vermutlich von der Zeile "if (Abfrage_Rechnung==01111111)", da du hier die Speicheradresse der Funktion (nicht den Rückgabewert der Funktion) mit einem Integer vergleichst. Wenn du die Funktion richtig aufrufst "... Abfrage_Rechnung() ..." sollte der Fehler verschwinden, funktionieren wird dein Code aber auch dann nicht, da noch einige weitere Fehler drin sind. Ich kann Programmieranfängern nur empfehlen, Grundlagen systematisch zu lernen. Wenn hierfür kein Ausbilder/Lehrer etc... zur Verfügung steht, gibts online viele gute Tutorials mit sinnvollen Begleitübungen, die nur bereits behandelte Themen voraussetzen. Einfach bei Suchmaschine oder (je nach Vorliebe) Videoportal nach "c tutorial" suchen. Wenn du die 3 Tage, die dich dieses Problem bereits gekostet hat, mit Anfängertutorials verbracht hättest, wüsstest du vermutlich schon ganz gut, wie man Funktionen anwendet. Zitieren
mindtrip_1 Geschrieben 23. November 2020 Autor Geschrieben 23. November 2020 hey Danke für die Informationen. Werd mal mich auf Youtube um schauen. Habe bisher nichts verständliches gefunden wo es verständlich genung erklärt wurde. Mein Grundprogramm hat ja soweit funktioniert doch durch das mit dem unterprogramm bin ich überfordert. Naja Morgen ist Abgabe mal schauen Zitieren
Whiz-zarD Geschrieben 23. November 2020 Geschrieben 23. November 2020 Es gibt zwei Arten von Unterprogrammen: Prozeduren und Funktionen. Eine Prozedur führt nur irgendwas aus und hat keinen Rückgabewert. Eine Funktion berechnet irgendwas und gibt dir das Ergebnis zurück. Main() kann sowohl als eine Prozedur als auch eine Funktion betrachtet werden. Wenn du schreibst: int main() { // ... } Dann ist es eine Funktion und es wird ein Rückgabewert mittels dem Schlüsselwort return erwartet. Das Betriebssystem erwartet dann ein Rückgabewert von deinem Programm. Wenn der Rückgabewert 0 ist, dann heißt es, dass Programm lief erfolgreich durch. Bei ungleich 0 ist irgendein Fehler aufgetreten. Wenn du aber hingegen void main() { // ... } schreibst, handelt es sich hier um eine Prozedur, da sie kein Rückgabewert hat. Dies wird mit void gekennzeichnet. Die Prozedur führt halt nur irgendwas aus. Prozeduren und Funktionen kannst du dir halt Vorstellen, wie Blackboxen. Sie machen halt was. Einige geben was zurück, andere wiederum nicht. Jetzt hast du z.B. Abfrage_Rechnung() als Funktion geschrieben aber den Rückgabewert verwendest du gar nicht. Auch ist dir der Gültigkeitsbereich von Variablen nicht klar. Variablen haben nämlich nur eine eingeschränkte Gültigkeit. Sie gelten nur in den geschweiften Klammern, in denen sie deklariert sind. Beispiel: void main() { int wert = 123; // Variable ist in main() gültig. { int wert2 = 234; // Variable ist nur in den inneren geschweiften klammern gültig printf("wert2 = %i\n",wert2); // Funktioniert, weil wert2 im korrekten Gültigkeitsbereich ausgewiesen wird. } printf("wert = %i\n",wert); printf("wert2 = %i\n",wert2); // Der Compiler meldet einen Fehler, da die Variable wert2 nicht bekannt ist. } Es funktioniert also nicht, dass du Variablen für die Rückgabewerte in main() deklarierst und dann versuchst sie innerhalb der Funktionen zu befüllen. Du müsst den Rückgabewert in main() benutzen. Also anstatt: int main() { int wahl; // ... Abfrage_Rechnung(); // ... } int Abfrage_Rechnung() { int wahl; // ... return wahl; } Musst du dann schreiben: int main() { int wahl = Abfrage_Rechnung(); } int Abfrage_Rechnung() { int wahl; // ... return wahl; } Abfrage_Rechnung() ist halt eine Art Platzhalter für einen Wert, den du in dieser Funktion ermittelst. maestro impostor reagierte darauf 1 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.