While Problem
-
Hallo liebe Community,
Ich beschäftige mich erst seit 2 Wochen mit C, also habt bitte ein bisschen MitleidWir sollen ein Programm (Kontrollstrukturen) schreiben in dem man 2 Eingaben macht. Diese sollen dann ausgewertet werden.
Funktioniert auch soweit ganz gut, doch ich habe ein Problem in meiner while-Schleife, sie soll mir die 107 so oft ausgeben, wie der Wert der eingebenen Zahl ist (z.B Input1 = 5 also als Ausgabe 107 107 107 107 107)
Bei mir wird die 107 nur einfach ausgegeben, egal welche Zahl man eintippt.
Hier mal die wichtigsten Ausschnitte:#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <ctype.h> #include <assert.h> int loesung(unsigned int input1, unsigned char input2){ unsigned char var0; // Hier liegt irgendwo der Fehler var0 = input1; while ( 1 ){ puts("107"); //wird nur einfach ausgegeben //soll aber so oft ausgegeben werden, wie der Wert der Zahl ist if ( --var0 <= 0 ); puts("108"); break; } } int main(void) { unsigned int input1=0; unsigned char input2=0; char weiter = 'y'; do{ puts("Please, enter a integer between 1 and 10"); if(scanf("%d", &input1)!= 1){ perror("Invalid integer input"); return EXIT_FAILURE; } while ( getchar() != '\n' ); puts("Please, enter a letter between a and z"); if(scanf("%c", &input2) != 1){ perror("Invalid character input."); return EXIT_FAILURE; } printf("input1=%d, input2=%c\n", input1, input2); if( loesung(input1, input2) != 0){ perror("error in loesung"); return EXIT_FAILURE; } while ( getchar() != '\n' ); puts("Continue [y|n]?"); scanf("%c", &weiter); while ( getchar() != '\n' ); }while(weiter == 'y'); return EXIT_SUCCESS; }
Ich hoffe irgendjmd versteht mein Problem und kann mir damit helfen...
Schonmal vielen Dank im voraus!
-
Arbeite mit besserem Einrücken:
if ( --var0 <= 0 ); puts("108"); break;
Außerdem solltest du am Anfang auch noch {} klammern setzen, dann fällt auf:
if ( --var0 <= 0 ); { puts("108"); break; }
Iwas passt mit dem ; nicht, oder was meinst du?
Hier wird kein Anweisungsblock gesetzt. Da du schon mit ; nach if beendest.
Außerdem würde selbst durch das gestrichene ; nur eine Anweisung ausgeführt werden.
=> Nach if erstmal nur {} und diese brauchen keine ;Edit:
if (Bedingung) { Anweisung1; ... AnweisungX; }
Edit²:
while(1) { if(Bedingung) break; ... }
Äquivalent zu:
while(!Bedingung) { ... }
-
DaRe schrieb:
Iwas passt mit dem ; nicht, oder was meinst du?
Hier wird kein Anweisungsblock gesetzt. Da du schon mit ; nach if beendest.
Außerdem würde selbst durch das gestrichene ; nur eine Anweisung ausgeführt werden.
=> Nach if erstmal nur {} und diese brauchen keine ;Vielen Dank, du hattest Recht. Ohne das Semikolon funktionierts
MfG
Andy