Denkanstoss gesucht. Hat jemand einen Tip? Variablen zusammenrechnen!
-
HI,
ich will nu mal ein wenig mit der C-Programmierung befassen und stosse gerade auf ein kleines Problem.
Ich möchte in meinem Programm 2 Variablen eingeben und dass diese dann Zusammengerechnet werden.
Allerdings gibt er das Ergebnis nicht aus.
Ich komme da nicht weiter...
...und bitte nicht lachenLG
#include <stdio.h> main() { int wahl; printf("Allesrechner\n"); printf("Hauptmenue\n"); printf("1. einfacher Rechner\n"); printf("Ihre Wahl:"); scanf("%i",&wahl); if (wahl == 1) { printf("einfacher Rechner\n"); printf("Bitte wählen:\n"); printf("1.1 Addition\n"); printf("1.2 Subtraktion\n"); printf("1.3 Multiplikation\n"); printf("1.4 Division\n"); printf("Ihre Wahl:"); scanf("%i",&wahl); if (wahl == 1) { int vari1; int vari2; int vari3 = (vari1 + vari2); } printf("Addition\n"); printf("Bitte Variable 1 eingeben:\n"); //Variable 1 der Addition scanf("%i",vari1); printf("Bitte Variable 2 eingeben:\n"); //Variable 2 der Addition scanf("%i",&vari2); printf("Das Ergebnis von &vari1 und &vari2 lautet:"); printf("%d",vari3); //Ergebnis der Addition } if (wahl == 2) { printf("Subtraktion\n"); } if (wahl == 3) { printf("Multiplikation\n"); } if (wahl == 4) { printf("Division\n"); } } }
-
Ausdrücke werden in C sofort ausgewertet. Wenn du schreibst
int vari3 = (vari1 + vari2);
Dann erhält vari3 den Wert den vari1 plus vari2 genau in dem Moment haben in dem das Programm an dieser Stelle vorbeikommt. Der Ausdruck wird nicht erst dann ausgewertet wenn vari3 benutzt wird.
P.S.: Compiliert dein Programm überhaupt? Ohne Warnung? Die Klammerung sieht mir nämlich völlig falsch aus. Kann aber auch an deinem eigenwilligen Einrückungsstil liegen, bin gerade zu faul das genauer zu prüfen. Falls du Compilerwarnungen bekommt: Nicht ignorieren!
-
nein es kompiliert nicht:
Compiler: Default compiler
Building Makefile: "C:\Users\noise\Desktop\wws\Makefile.win"
Executing make...
make.exe -f "C:\Users\noise\Desktop\wws\Makefile.win" all
g++.exe -c wws.cpp -o wws.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"wws.cpp: In function
int main()': wws.cpp:25: error:
vari1' undeclared (first use this function)
wws.cpp:25: error: (Each undeclared identifier is reported only once for each function it appears in.)
wws.cpp:27: error: `vari2' undeclared (first use this function)wws.cpp:29: error: `vari3' undeclared (first use this function)
wws.cpp: At global scope:
wws.cpp:41: error: expected declaration before '}' tokenmake.exe: *** [wws.o] Error 1
Execution terminated
-
nein es kompiliert nicht:
Betrachte die Klammer in Zeile 22 genauer
Außerdem würde sich hier eher switch, anstatt einem if(-else) Konstrukt anbieten
-
#include <stdio.h> main() { int wahl; printf("Allesrechner\n"); printf("Hauptmenue\n"); printf("1. einfacher Rechner\n"); printf("Ihre Wahl:"); scanf("%i",&wahl); if (wahl == 1) { printf("einfacher Rechner\n"); printf("Bitte wählen:\n"); printf("1.1 Addition\n"); printf("1.2 Subtraktion\n"); printf("1.3 Multiplikation\n"); printf("1.4 Division\n"); printf("Ihre Wahl:"); scanf("%i",&wahl); if (wahl == 1) { int vari1; int vari2; int vari3; // } entfernt printf("Addition\n"); printf("Bitte Variable 1 eingeben:\n"); //Variable 1 der Addition scanf("%i",&vari1); // & hat gefehlt printf("Bitte Variable 2 eingeben:\n"); //Variable 2 der Addition scanf("%i",&vari2); vari3 = vari1 + vari2; // Ergebnis hier zusammenrechnen printf("Das Ergebnis von &vari1 und &vari2 lautet:"); printf("%d",vari3); //Ergebnis der Addition } if (wahl == 2) { printf("Subtraktion\n"); } if (wahl == 3) { printf("Multiplikation\n"); } if (wahl == 4) { printf("Division\n"); } } }
-
silentnoise schrieb:
wws.cpp: In function
int main()': wws.cpp:25: error:
vari1' undeclared (first use this function)
wws.cpp:25: error: (Each undeclared identifier is reported only once for each function it appears in.)
wws.cpp:27: error: `vari2' undeclared (first use this function)wws.cpp:29: error: `vari3' undeclared (first use this function)
wws.cpp: At global scope:
wws.cpp:41: error: expected declaration before '}' tokenIch hoffe, dir ist überhaupt klar, was diese Fehler bedeuten. Die stehen nicht nur da, weil der Compiler keine Lust hat. Wenn du sie liest, wirst du auch der Lösung einen Schritt näher kommen.
-
nein, das weiss ich leider nicht. fange ja auch gerade erst an zu lernen. und dafür lernt man doch oder nicht ?
-
zu der Klammerung:
weiss nicht was für einen Editor du benutzt, aber zB codeblocks kann zusammengehörige Klammern anzeigen. Einfach mit dem Cursor auf ein { oder } fahren.
Zusammen mit richtiger Einrückung fallen fehlende/zu viele Klammern dann schnell auf.
-
Ok, dann schauen wir mal, wie gut mein Englisch noch ist:
'vari1' undeclared - 'vari1' nicht deklariert:
vari1 hat bestechende Ähnlichkeit mit einer deiner Variablen. Und variablen kann man bekannterweise deklarieren. Dabei sagt man einer Variablen, was sie ist. Das tut man sinnvollerweise, bevor man sie benutzt. Tut man das nicht, ist sie an dieser Stelle nicht deklariert. Abhilfe: Variable deklarieren (steht im Kapitel Variablen gleich nach der Einleitung)! Ach ja, in C ist das Deklarieren von Variablen soweit ich weiß nur am Anfang einer Funktion erlaubt. Abgesehen von for-Schleifen ist das auch für C++ empfehlenswert, damit du den Überblick über deine Variablen behälst.
Was die Klammern angeht: jede, die du aufmachst, musst du auch wieder zumachen. Dann kann schonmal fast nix mehr schief gehen. Dann gibt es so ein paar Regeln zur Einrückung, die helfen, Code leserlich zu machen:
1. Nach einer { erfolgt ein Zeilenumbruch (Enter drücken)
2. Nach einer { wird der folgende Code eingerückt (Tab od. 2-4 Leerzeichen)
3. Vor einer } erfolgt ein Zeilenumbruch
4. Eine } wird bereits wieder ausgerückt
Das sieht in der Praxis dann so aus:if (a == b) { // Hier kommt eingerückter Code, // der sich auch über mehrere Zeilen hinziehen kann if (a > 0) { printf("Hello World!"); } } else { printf("Good bye World!"); }
So sieht das schon besser aus, oder?
-
ja das sieht auf jeden fall sehr sauber aus
vielen dank erst mal für alle kritiken und hilfestellungen. ich werds mir alles mal zu herzen nehmen und ein wenig dran arbeiten...vielen dank jungs (und mädels (?))
lg
-
if (a == b) { // Hier kommt eingerückter Code, // der sich auch über mehrere Zeilen hinziehen kann if (a > 0) { printf("Hello World!"); } } else { printf("Good bye World!"); }
so ists vieeeeeel schöer
-
Ob man die { in eine neue Zeile schreiben möchte, ist Geschmackssache. Ich mache es bei Funktionen immer so, damit die sich deutlicher von der Umgebung abheben. Bei anderen Strukturen (if, while, class) schreibe ich sie immer dahinter, um eine Zeile zu sparen. Da kommen mitunter einige Zeilen zusammen und irgendwann hast du nur noch
{
{
{
{
{
{
{
{
{
{
{
auf dem BildschirmNoch so ein kleiner Tip zu den Einrückungen:
Die meisten Editoren lassen sich was das angeht frei konfigurieren. Meines Erachtens ist ein Tab über 4 Leerzeichen etwas über das Ziel hinaus geschossen, daher konfiguriere ich den Tab immer auf zwei Leerzeichen. Außerdem kann man Tabs so konfigurieren, dass sie durch eine entsprechende Anzahl Leerzeichen ersetzt werden. Das hat aber zur Folge, dass ein nachträgliches Ausrücken zur Ticker-Arbeit wird, darum lass ich den Tab Tab sein.