Problem mit meinem Temperaturrechner

Tobias021992

Grünschnabel
Hallo alle zusammen,

ich bin hier seit 5 Minuten angemeldet und will die Seite dazu nutzen Antworten von erfahrenen Profis auf meine vielleicht noch so kindischen Fragen in C zu bekommen.ggf. dann auch anderen zu helfen wenn meine Kenntnisse besser werden. Ich habe noch nicht lange mit C angefangen und arbeite nach dem Buch "C-Programmieren von Anfang an" von Helmut Erlenkötter.

Das Problem:
Das folgende Program soll die Temperaturen eines Monats erst abfragen. Dann soll gefragt werden ob man sich noch einzelne Temperaturen ansehen möchte. Die 0 führt zum Ende. Dannach wird die Durchschnittstemperatur berrechnet und das Program beendet. Ich habe das Program als kleine Übung für mich selber zum Thema Felder und Schleufen geschrieben.
Resultat des Programs ist, dass "Geben Sie die Nummer des Tages ein dessen Temperatur Sienochmals gerne sehen möchten. '0' fuer Ende" angezeigt wird. Man dannach eine Zahl eingeben kann und das Program dann abstürtzt oder beendet.

Kann mir wer verraten was ich falsch mache? hier das Program:
Code:
#include <stdio.h>
#include <conio.h>

main() {
       int i,sehen;
       float temperatur[32],gesamt;
       for(i=1;i==33;i++){
          printf("\nGeben Sie die Temperatur für Tag %i an\n",i);
          scanf("%f",&temperatur[i]);
       }
       while(i!=0){
          printf("\nGeben Sie die Nummer des Tages ein dessen Temperatur Sie\nnochmals gerne sehen möchten. '0' fuer Ende\n");
          scanf("%i",sehen);
          if(sehen>0&&sehen<32){
             printf("\nDie Temperatur am %i.ten Tag war %f.",sehen,temperatur[sehen]);
          }
          else
          printf("Diesen Tag gibt nicht");
       }
       for(i=1;i==33;i++){
          gesamt=temperatur[i]+gesamt;
       }
       printf("\nDie Durchschnittstemperatur dieses Monats war %f",gesamt/31);
       getch();
}

Danke für die Hilfe
Tobias
 
Hallo Neuling

Als erstes Willkommen hier auf tutorials.de ich würde dich bitten in Zukunft bzw. per Edit deinen Code in Codetags zu packen, dient rein der Übersicht (statt Code gibst denn C ein)

Zum Code: Deine for-Schleife ist so nicht korrekt, das zweite Argument ist eine Bedingung, heißt also wenn diese Bedingung erfüllt ist wird der Block darunter ausgeführt. Der erste Parameter ist die Anfangswertzuweisung (bei dir 1). Gewöhne dir gleich an immer mit 0 zu beginnen. Das ist ein gewisser Standard bei C/C++. Denn du musst wissen dein Array bzw. Feld temperatur[32] fängt auch mit dem Index 0 an also temperature[0] - temperature[31] das ist für Neulinge bzw. Anfänger am Anfang recht gewöhnungsbedüftig.
Worauf ich hinaus will ist, dass dein Block in der for-Schleife nur ausgeführt wird wenn die Bedingung erfüllt ist, das ist sie bei dir nur wenn i den Wert 32 hat. Überleg mal wie es richtig lauten könnte.

Das nächste Problem besteht hier: gesamt=temperatur+gesamt; in der 2ten for-Schleife. Du musst wissen dass, wenn du eine Variable in C deklarierst und kein Anfangswert zuweist der Wert der Variablen zufällig ist, was gerade in dem Stück Speicher steht, d.h. du solltest am Anfang einen Wert zuweisen beim Durchschnitt logischerweise erstmal 0. Das Feld temperatur sollte in deinem Falle mit Indizes angesprochen werden. Denn dein Befehl ist eine Pointerarithmetik das hast du sicher nicht vorgehabt :)

So far mfg
 
Danke Onlineskater für die schnelle lösung meines Problems. Mein größter Denkfehler war wohl gewesen, dass ich gedacht hatte die Schleife würde erst verlassen wenn die Bedingung richtig wird...

Nach ein anderen paar Verbesserungen, wie z.B. der loesche_bild Funktion sieht es jetzt so aus:

Code:
#include <stdio.h>
#include <conio.h>

void loesche_bild(void) {
               int x;
               for(x=1;x<=30;x++)
                  printf("\n");
}

main(void) {
       int tage,i,sehen;
       printf("\nUeber wie viele Tage moechten Sie die Temperatur messen?\n");
       scanf("%i",&tage);
       loesche_bild();
       float temperatur[tage],gesamt=0.0;
       for(i=0;i<=tage-1;i++){
          printf("Geben Sie die Temperatur fuer Tag %i an\n",i+1);
          scanf("%f",&temperatur[i]);
          loesche_bild();
       }
       while(sehen!=0){
          loesche_bild();
          printf("\n\nGeben Sie die Nummer des Tages ein dessen Temperatur Sie\nnochmals gerne sehen moechten. '0' fuer Ende\n");
          scanf("%i",&sehen);
          if(sehen>0&&sehen<tage+1){
             printf("\nDie Temperatur am %i.ten Tag war %f.",sehen,temperatur[sehen-1]);
             getch();
          }
          else if (sehen==0){
             break;
          }
          else
          printf("Diesen Tag gibt nicht\n");
          getch();
       }
       for(i=0;i<=tage-1;i++){
          gesamt = gesamt + temperatur[i];
       }
       loesche_bild();
       printf("\nDie Durchschnittstemperatur dieses Monats war %f",gesamt/tage);
       getch();
}

Fast patentreif was?;)

So jetzt funktioniert das Program für mich perfekt. Nur vielleicht noch ein Schönheitsfehler.
Bei loesche_bild erscheint der neue Bildschirminhalt unten in der Eingabeaufforderung. Ist es möglich eine Funktion zu schreiben, die das Bild löscht und wo die nächsten Informationen oder Aufforderungen oben in der Eingabeaufforderung erscheinen?

Danke für deine hilfe soweit:)

grz
tobias
 
Da du schon conio.h eingebunden hast kannst du mit der Funktion gotoxy(x,y); zu jeder beliebigen Position auf dem Bildschirm springen!

Gruß XeoX
 
Zurück