PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Problem "Muliplikationstabelle"


CoconutKing
2008-03-14, 18:40:58
Hallo,

ich will eine Multiplikationstabelle schreiben mit der Aufgabenstellung:
Schreiben Sie ein Programm, das eine Multiplikationstabelle ausgibt:
1 2 3 4 ...
2 4 6 8 ...
3 6 9 12 . . .
: : : :
: : : :
Die Anzahl der Zeilen und die Anzahl der Spalten soll vom Nutzer eingegeben
werden können. D.h. das Programm fragt zun¨chst nach der Anzahl der Spalten,dann nach der Anzahl der Zeilen. Anschließend zeigt das Programm die Tabelle am Bildschirm an.

Einmal mit einer For-Schleife und einmal mit einer While-Schleife.

Das mit den 2 For-schleifen bekomm ich ohne Probleme hin, nur das mit den While-schleifen kapier ich nicht. häng bald ne stunde an dem mist. Hab irgendwo nen Denkfehler und komm nicht drauf.

hier mein code mit For-schleifen:

#include <stdio.h>

int main(void)
{
int zeilen;
int spalten;
int x;
int y;
printf("Programm für Multiplikationstabelle\n");
printf("===================================\n");
printf("Anzahl Zeilen eingeben: ");
scanf("%d",&zeilen);
printf("Anzahl Spalten eingeben: ");
scanf("%d",&spalten);
for(y=1;y<=zeilen;y++)
{
for(x=1;x<=spalten;x++)
{
printf("%d\t",x*y);
}
printf("\n");
}
}

liefert die richtige ausgabe und schön formatiert.
hier mein While- versuch der nur mist macht:

#include <stdio.h>

int main(void)
{
int zeilen;
int spalten;
int x=1;
int y=1;
printf("Programm für Multiplikationstabelle\n");
printf("===================================\n");
printf("Anzahl Zeilen eingeben: ");
scanf("%d",&zeilen);
printf("Anzahl Spalten eingeben: ");
scanf("%d",&spalten);
while(y<=zeilen)
{
while(x<=spalten)
{
printf("%d.\t",x*y);
x++;
}
y++;
printf("\n");
}
}


Ausgabe:
Programm für Multiplikationstabelle
===================================
Anzahl Zeilen eingeben: 2
Anzahl Spalten eingeben: 5
1. 2. 3. 4. 5.
10.

Ich find den Fehler nicht und steh irgendwie auf dem Schlauch

ManuelCalavera
2008-03-14, 18:46:24
Versuchs mal mit


while(y<=zeilen)
{
while(x<=spalten)
{
printf("%d.\t",x*y);
x++;
}
y++;
printf("\n");
x = 1; // <-- DAS HIER HAST DU VERGESSEN
}

CoconutKing
2008-03-14, 18:48:18
stimmt...

;D man kotzt mich die eine zeile jetzt an. 1 stunde für son kagg

ManuelCalavera
2008-03-14, 18:52:20
Dafür vergisst du sowas in Zukunft nie wieder :biggrin:

ScottManDeath
2008-03-15, 08:09:32
Kann man auch mit nur einer while Schleife machen ...

Ectoplasma
2008-03-15, 09:41:14
Kann man auch mit nur einer while Schleife machen ...

Das sieht dann aber nicht schön aus. Sowas würde ich lassen.

rotalever
2008-03-15, 15:31:25
Kann man auch mit nur einer while Schleife machen ...
Kann man auch mit goto machen.

ESAD
2008-03-15, 18:47:34
Kann man auch mit goto machen.

und wird dafür zurecht erschlagen

Coda
2008-03-15, 19:58:00
Hier stand Blödsinn :)

CoconutKing
2008-03-16, 20:03:31
hab noch ein Problem:
Programm soll ein einfacher Taschenrechner sein, der solange läuft bis man q drückt im menü der operanden:


#include <stdio.h>

float calculator(char optr, float opr1, float opr2);

int main(void)
{
char operator;
float operand1, operand2,ergebnis;
printf("\033[2J"); /*Bidlschirm löschen*/
printf("\033[0;0f");/*Bildschirm löschen*/
while(operator!='q')
{
printf("Eingabe: Operator <return> Operand1 <return> Operand2 <return>");
printf("\nBitte Eingabe Operator (+, -, *, /, q):");
operator=getchar();
if(operator!='q')
{
printf("Bitte Eingabe Operand1: ");
scanf("%f",&operand1);
printf("Bitte Eingabe Operand2: ");
scanf("%f",&operand2);
ergebnis=calculator(operator,operand1,operand2);
printf("Ergebnis: %2.2f %c %2.2f = %2.2f\n",operand1, operator, operand2, ergebnis);
operator='s';
}
}
return 0;
}

float calculator(char optr, float opr1, float opr2)
{
switch(optr)
{
case '+':
return opr1+opr2;
break;
case '-':
return opr1-opr2;
break;
case '*':
return opr1*opr1;
break;
case '/':
return opr1/opr2;
break;
case 'q':
break;
}
}

Der erste durchlauf geht ohne probleme:
operator +
op1:5
op2:3
=> 5 +3 = 8
Doch dann startet die schleife nochmal und die abfrage des operators wird übersprungen und es folgt die eingabe des ersten operanden.....

hab schon versucht den operator nach aufruf der calculator funktion mit operator=NULL; auf urzustand zu setzen aber hilt leider nix.

an der eingabe kann es auch nicht liegen, hab atm die funktion getchar(); drin, mit scanf("%c",&operator) geht es auch nicht.

Gast
2008-03-16, 20:04:44
Nimm cout.

CoconutKing
2008-03-16, 20:06:21
cout geht erst mit c++ glaub ich!?
soll nur C Code sein

Gast
2008-03-16, 20:24:39
Dann nimm halt C++.

ManuelCalavera
2008-03-16, 21:02:52
Dann nimm halt C++.
sehr konstruktiv :rolleyes:

probiers mal mit fflush:
...
printf("Eingabe: Operator <return> Operand1 <return> Operand2 <return>");
printf("\nBitte Eingabe Operator (+, -, *, /, q):");
fflush(stdin);
operator=getchar();
...

dein multiplikationsoperator hat nen tippfehler :)
return opr1*opr1;

CoconutKing
2008-03-17, 07:47:30
hilft leider nicht mit dem fflush.

Besserwissend
2008-03-17, 08:06:21
Probier mal 2 fflushs:


printf("Eingabe: Operator <return> Operand1 <return> Operand2 <return>");
printf("\nBitte Eingabe Operator (+, -, *, /, q):");
fflush(stdin);
operator=getchar();
fflush(stdin);

Gast
2008-03-17, 12:35:27
So gehts: cout << flush;

astro
2008-03-17, 15:20:38
Kann man auch mit goto machen.
Made my day ;)

Gast
2008-03-17, 15:46:05
fflush(stdin) ist undefiniert, siehe dazu 7.19.5.2.2.

void ignorestdin(char delim) {
char in;
while ((in = getchar()) != EOF && in != delim);
}

Dann: ignorestdin('\n');

CoconutKing
2008-03-17, 18:54:52
fflush(stdin) ist undefiniert, siehe dazu 7.19.5.2.2.

void ignorestdin(char delim) {
char in;
while ((in = getchar()) != EOF && in != delim);
}

Dann: ignorestdin('\n');


danke! das hilft, allerdings versteht ich das problem nicht. hab bisher öfter die lösung mit der while schleife und beenden mit Q verwendet, allerding mit borland c++ compilern. das ist mein erster versucht mit gcc.

edit:
jetzt muss man beim ersten aufruf nach eingabe des operators 2 x enter drücken bis man die operanden eingeben kann ...