Problem bei Funktion
-
Hallo! Ich will eine Funktion schreiben, die zu vorgegebnen natürlichen Zahlen x1, x2, y1, y2 die zugehörige Multiplikationstafel ausgibt, z.B. für x1=1, x2=3, y1=2 und y2=5 die Tafel:
| 2 3 4 5
---+--------------
1 | 2 3 4 5
2 | 4 6 8 10
3 | 6 9 12 15Dann soll die Funktion im Hauptprogramm mit verschiedenen einzulesenden
Werten aufgerufen werden.
Hab das alles soweit ganz gut fertig. Aber irgendwas stimmt nicht,
der rattert durch, ich komm irgendwie inne endlosSchleife schon
zu Beginn, kann also gar nicht mal sagen ob es so überhaupt geht?#include <stdio.h> #include <conio.h> int x1,x2,y1,y2; void tafel(int x1, int x2, int y1, int y2) { printf("Bitte x1 eingeben: "); scanf("%d", &x1); printf("Bitte x2 eingeben: "); scanf("%d", &x2); printf("Bitte y1 eingeben: "); scanf("%d", &y1); printf("Bitte y2 eingeben: "); scanf("%d", &y2); printf("Dies ist ein Unterprogramm: %d",x1); printf("Dies ist ein Unterprogramm: %d",x2); printf("Dies ist ein Unterprogramm: %d",y1); printf("Dies ist ein Unterprogramm: %d",y2); int i, j, wert; printf(" x "); for (i=x1;i=x2;i=i+1) { //erste Zeile der Tabelle mit den x Werten auffüllen printf("%d",i); printf(" "); } printf("\n" "\n"); printf("y" "\n"); for (j=y1;j=y2;j=j+1) { printf("\n"); printf("%d",j); // y-Wert in die 1. Spalte eintragen printf(" "); for (i=x1;i=x2;i=i+1) { wert= i * j; printf("%d",wert); // mit den zugehörigen x-Werten die Zeile vervollständigen printf(" "); } } } main(void) { tafel(x1,x2,y1,y2); getch(); return 0; }
Kann jemand helfen?
-
In all deinen Schleifen ist die Bedingung (der Ausdruck zwischen dem ersten und zweiten Semikolon) falsch. Erstens ist i=x2 eine Zuweisung, kein Vergleich, und zweitens läuft die Schleife, solange diese Bedingung wahr ist. Da muss also jeweils <= hin.
Übrigens ist es Quatsch, Variablen an eine Funktion zu übergeben, wenn diesen Variablen erst in der Funktion Werte zugewiesen werden. Außerdem verdecken die Funktionsparameter die gleichnamigen globalen Variablen.
-
So habs jetzt korrigiert! Nun siehst ganz gut aus.
Hätte dann aber noch 2 Fragen. Zum einem wenn ich zweistellige Zahlen bekomme, dann verscheibt sich die tabelle, wie kann ich das verhindern.
Und zum anderen wie ist die aufganbe zu verstehen? soll ich die x,y nun im hauptprogramm oder in der funktion erst einlesen? Wie muss ich meine Variablen dann deklarieren? Darf ich das mit den globalen nicht machen?#include <stdio.h> #include <conio.h> int x1,x2,y1,y2; void tafel(int x1, int x2, int y1, int y2) { printf("Bitte x1 eingeben: "); scanf("%d", &x1); printf("Bitte x2 eingeben: "); scanf("%d", &x2); printf("Bitte y1 eingeben: "); scanf("%d", &y1); printf("Bitte y2 eingeben: "); scanf("%d", &y2); int i, j, wert; printf(" y "); for (i=y1;i<=y2;i=i+1) { //erste Zeile der Tabelle mit den y Werten auffüllen printf("%d",i); printf(" "); } printf("\n" "\n"); printf("x" "\n"); for (j=x1;j<=x2;j=j+1) { printf("\n"); printf("%d",j); // x-Wert in die 1. Spalte eintragen printf(" "); for (i=y1;i<=y2;i=i+1) { wert= i * j; printf("%d",wert); // mit den zugehörigen y-Werten die Zeile vervollständigen printf(" "); } } } main(void) { tafel(x1,x2,y1,y2); getch(); return 0; }
-
Das ist so schlecht, um nicht zu sagen: total beschissen!
In etwa so wäre es sinnvoll:
#include <...> void tafel(int x1, int x2, int y1, int y2) { /* Tafel AUSGEBEN */ printf(...); } int main(void) { int ex1, ex2, ey1, ey2; /* Zahlen EINGABEN in die LOKALEN Variabeln */ scanf(...); tafel(ex1, ex2, ey1, ey2); }
Gruß
-
ok, ich mach die eingaben dann im hauptprogramm. ich hab die globalen variablen jetzt ganz weggenommen, ist das ok? muss ich die werte zwingend ex und ey nennen, oder kann ich die auch nennen wie in der Funktion?
-
muss ich die werte zwingend ex und ey nennen
nein
oder kann ich die auch nennen wie in der Funktion?
ja
-
Hat jemande ne Idee das auch bei 2 stelligen Zahlen die tabelle klar strukturiert bleibt? Wenns nur un mein minus gehen würde, würde ich einfach ein leerzeichen hinters % setzen! damit platz gelassen wird. aber wie kann ich es hier machen?
-
%2d
Oder einfach in die Dokumentation zu printf gucken.
-
danke, damit gehst wunderbar, kannte ich nicht den trick