PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Rechner..



Beaving
27.12.2008, 07:12
Moinsen, hab heute erst angefangen, C zu lernen.

Wollte mir mal so nen Rechner machen, mein aktueller code:



#include <stdio.h>

int main()
{
int num1,num2,num3;
printf("Enter your first number...\n");
scanf("%d", &num1);
getchar();
printf("Now enter minus, plus or whatever...\n");
scanf("%d", &num2);
getchar();
printf("And enter the last number...\n");
scanf("%d", &num3);
getchar();
printf("Problem one is num1 num2 num3, answer is: %d\n", num1 num2 num3);
system("PAUSE");
}



Der code funktioniert bis jetzt ganz gut, nur kann ich ihn wegen

printf("Problem one is num1 num2 num3, answer is: %d\n", num1 num2 num3);

nicht kompilieren.

Ich wollte aber den Rechner auf diesem Wege entwerfen, man müsste ja eig. nur num2 mit / oder + oder - ersetzen, das tut er aber nicht.

Wäre nett wenn jemand Lösungen hat.

Danke im Vorraus!

Cr4ckEye
27.12.2008, 08:11
Wenn man die "*+-/%" Operanden so abfrägt wie du, also per eingabe, werden sie nicht als INT sondern als char Arry/Pointer oder String gespeichert. Und selbst damit könntest du zwar eine ausgabe erzeuge in dem Stil 4 +3 nur würde er mit dem String als Rechenzeichen nichts anfangen. Das ist so auch nicht möglich, da der Code zu Runtime ja bekannt und kompiliert sein muss, da kannst du ihn nicht einfach so noch verändern. Bau 4 einzelfunktionen die jeweils eien aufgabe übernehmen.
Kleiner Tip:


if(!strcmp(num2,"+")) { ... }


MfG

Beaving
27.12.2008, 14:13
Danke!

Das hat mich viel weiter gebracht!

l0dsb
27.12.2008, 14:14
Ich würde zum Vergleichen eines einzelnen Zeichens nicht strcmp verwenden, das kann man ja noch mit einer (schnelleren) if-Abfrage erledigen (if(num2 == '+'), num2 sollte dann ein char sein; oder gleich eine switch-case mit num2 und den cases '+', '-', ...).

Beaving
27.12.2008, 14:30
Ich habs jetzt einfach so geregelt :mrgreen:



#include <stdio.h>

int main() {
int num;
int plus = 1;
int minus = 2;
int mal = 3;
int thru = 4;
int cancel = 5;

printf("Enter 1 for +; 2 for -; 3 for *; 4 for /; 5 for cancel:\n");
scanf("%d", &num);

if (num == plus) {
int num1,num2;
printf("You entered +, enter your first number...\n");
scanf("%d", &num1);
getchar();
printf("Enter your second number...\n");
scanf("%d", &num2);
getchar();
printf("Answer is: %d\n", num1 + num2);
system("PAUSE");
}

if (num == minus) {
int num1,num2;
printf("You entered +, enter your first number...\n");
scanf("%d", &num1);
getchar();
printf("Enter your second number...\n");
scanf("%d", &num2);
getchar();
printf("Answer is: %d\n", num1 - num2);
system("PAUSE");
}

if (num == mal) {
int num1,num2;
printf("You entered +, enter your first number...\n");
scanf("%d", &num1);
getchar();
printf("Enter your second number...\n");
scanf("%d", &num2);
getchar();
printf("Answer is: %d\n", num1 * num2);
system("PAUSE");
}

if (num == thru) {
int num1,num2;
printf("You entered +, enter your first number...\n");
scanf("%d", &num1);
getchar();
printf("Enter your second number...\n");
scanf("%d", &num2);
getchar();
printf("Answer is: %d\n", num1 / num2);
system("PAUSE");
}

if (num == cancel) {
printf("Canceled process...\n");
getchar();
system("PAUSE");
}
return 0;
}

Cr4ckEye
27.12.2008, 15:01
Wenns klappt is gut ;-) Aber um es auf 1/3 des Codes zu reduzieren schauste dir mal switch() und die ASCII Tabelle an ;-)