Anfänger mit c

Diskutiere Anfänger mit c im Developer Network Forum im Bereich Hardware & Software Forum; also dieser code will nicht hab in per copy&paste aus meiner ide kopiert schaut mal die ausgabe der 1. variablen haut nicht hin egal was ich für...
  • Anfänger mit c Beitrag #1
D

Dunar

Bekanntes Mitglied
Dabei seit
26.09.2008
Beiträge
53
Reaktionspunkte
0
also dieser code will nicht hab in per copy&paste aus meiner ide kopiert schaut mal die ausgabe der 1. variablen haut nicht hin egal was ich für Zahlen eintippe
und die 2. Variable fragt er nicht gefragt
(kommt immer 0 für 1. Zahl und 917504000 für die zweite Zahl)

getchar(); wiederhole ich weil sonst das Programm sofort schließt

Windows XP SP3
ide = Dev-C++

#include <stdio.h>

int main (void)
{
printf("\nTitle : Rechnen a + b\nProgramer: Maik *******\n");
int a,b;
printf ("\n gebe bitte zwei ganze Zahlen ein ... ");
scanf("\n 1. Zahl = %d",&a);
printf("die zweite Zahl bitte ... \n ");
scanf("\n 2. Zahl = %d",&b);
printf ("\n Summe aus %d und %d ist gleich %d",a , b, a+b);
getchar();getchar();getchar();
return 0;
}

/edit Sprachfehler verbessert und bitte verständlich antworten bin nicht sehr weit was man sicher anhand des Codes sieht ;-)
 
  • Anfänger mit c Beitrag #2
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Willst du C oder C++ lernen??

Ich hätte das Problem so gelöst (C++-Code):
Code:
#include <iostream>
using namespace std;

int main (void)
{
    int a=0;
    int b=0;
    
    cout << "Hallo!" << endl << endl;
    cout << "1. Zahl: ";
    cin >> a;
    
    cout << endl << "2.Zahl: ";
    cin >> b;
    cout << endl;
    cout << a << "+" << b << "=" << a+b;
    
    cin.get();
    cin.get();    
    return 0;
}
Dieses Programm wir auch bei dir funktionieren, Dev C++ ist ja eigentlich ein C++-Compiler...:D
 
  • Anfänger mit c Beitrag #4
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
scanf will im Format nur das haben, was wirklich gelesen wird. Für eine Dezimalzahl also nur "%d". Die Ausgaben musst du mit printf schreiben. Wenn die eingegebenen Zeichen nicht zum Format passen, bleiben sie im Eingabepuffer. Daher brauchst du am Ende auch mehrmals das getchar, weil deine eingebenen Zeichen noch im Puffer sind und sofort gelesen werden.

Zusätzlich wäre es eine gute Idee, die Variablen vorher mit 0 zu initialisieren, damit du siehst, ob sie verändert wurden, bzw. ein definierter Wert enthalten ist. Außerdem solltest du die Rückgabe von scanf auswerten; die gibt nämlich an, wieviele Werte korrekt gelesen wurden.

Noch ein kleiner Tipp: Der Compiler hat so gut wie immer Recht.
 
  • Anfänger mit c Beitrag #5
D

Dunar

Bekanntes Mitglied
Dabei seit
26.09.2008
Beiträge
53
Reaktionspunkte
0
Dank dem Tipps von cmddegi hats geklappt hier mein code so das er funktioniert ...

Code:
#include <stdio.h>

int main (void)
{
         printf("\nTitle : Rechnen a + b\nProgramer: Maik ******\n");
         int a,b ;
         a = 10 ;
         b = 10 ;
         printf ("\n gebe bitte zwei ganze Zahlen ein ... \n1. Zahl =");
         scanf("%d",&a);
         printf("die zweite Zahl bitte ... \n 2. Zahl = ");
         scanf("%d",&b);
         printf ("\n Summe aus %d und %d ist gleich %d",a , b, a+b);
         getchar();getchar();getchar();
         return 0;
                  }
 
  • Anfänger mit c Beitrag #6
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
eigentlich C weil ich damit mal angefangen hatte ...
[...]

Vorteile von C++ gegenüber C

  • Ein-/Ausgabeoperationen sind mit Objekten realisiert, der fehlerhafte Umgang mit printf() und scanf(), insbesondere die falsche Verwendung der Formatspezifizierer, entfällt.
  • Das dynamische Anlegen von Elementen und Arrays ist wesentlich einfacher, sicherer mit C++ und datentypbezogener.
  • Konstanten müssen nicht mehr mit Präprozessorbefehlen erzeugt werden, es gibt das Schlüsselwort const dafür. Solche Konstanten können dann auch für Arraydimensionen verwendet werden.
  • Die freie Plazierung von Variablendefinitionen wird unterstützt.
    Ausnahmebehandlung ist bei Fehlern möglich und muss nicht selbst entwickelt werden.



Falls ich dich jetzt überzeugt habe:

Das beste C++ Tutorial
Ein C++ Tutorial nach dem ISO Standard (ISO/IEC 14882:1998). Neben einer Erklärung der Syntax der Sprache C++ werden auch Idiome und 'gängige Praxis' ...
 
  • Anfänger mit c Beitrag #7
A

axel_foley

Bekanntes Mitglied
Dabei seit
02.05.2007
Beiträge
130
Reaktionspunkte
0
Hallo Max11.111,

gibt es sowas auch in PDF Form, damit ich es mir ausdrucken und auf Papier lesen kann?

cu

axel
 
  • Anfänger mit c Beitrag #10
FatherFrost

FatherFrost

Moderator
Teammitglied
Dabei seit
26.11.1999
Beiträge
4.710
Reaktionspunkte
3
Ort
NorthPole
vielleicht sollte man den fehler auch richtig erklären. meiner ansicht nach (hab hier keinen c compiler zum testen) steckt der fehler in den zeilen:

int a,b;
scanf("\n 1. Zahl = %d",&a);
scanf("\n 2. Zahl = %d",&b);

man sollte sich im klaren sein was hier passiert und deswegen sollten anfänger auch zuerst java lernen und nicht c (java würde hier mit einer null pointer exception aussteigen)
du deklarierst hier 2 variablen a und b und sagst dass sie vom typ int sind (übrigens ein sehr schlechter programmierstill mehrere variablen in einer zeile zu deklarieren). die eigentliche unzulässige operation geschieht in den nächsten zeilen: das &a bedeutet, das du der funktion "scanf" die adresse (im RAM) der variablen "a" übergibst. du hast aber noch keinen specher für die variable a reserviert. die pointer auf a zeigt ins nirgendwo (bzw. da steht wohr ein zufälliger wert drin). um diesen fehler zu vermeiden solltest du die variable initialisieren:

int a=0;
int b=0;

da wird auch gleich speicher der variablen zugewiesen

#include <stdio.h>

int main (void)
{
printf("\nTitle : Rechnen a + b\nProgramer: Maik *******\n");
int a,b;
printf ("\n gebe bitte zwei ganze Zahlen ein ... ");
scanf("\n 1. Zahl = %d",&a);
printf("die zweite Zahl bitte ... \n ");
scanf("\n 2. Zahl = %d",&b);
printf ("\n Summe aus %d und %d ist gleich %d",a , b, a+b);
getchar();getchar();getchar();
return 0;
}

/edit Sprachfehler verbessert und bitte verständlich antworten bin nicht sehr weit was man sicher anhand des Codes sieht ;-)
 
  • Anfänger mit c Beitrag #11
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Sorry, aber das ist schlichtweg falsch. Das mag möglicherweise bei Java so sein, aber nicht in C.
int a, b; erzeugt ganz korrekt zwei Variablen vom Typ int. (Ob das schlechter Stil ist, darüber kann man sich streiten. Ich für meinen Teil mag es, wenn zusammengehörige Variablen in einer Zeile deklariert werden. Außerdem wird das Programm sonst unnötig lang.) Dabei wird natürlich auch der nötige Speicher reserviert. Bei einer Deklaration innerhalb einer Funktion werden die Variablen allerdings in der Tat nicht initialisiert. Das ist hier eigentlich auch nicht nötig, aber vorteilhaft, um Änderungen erkennen zu können. Ob die bei der Deklaration oder in einer extra Zeile initialisiert werden ist natürlich unerheblich.
Deshalb funktioniert auch die Adressübergabe genauso wie sie soll.

Der Fehler ist wie oben beschrieben schlicht und einfach die falsche Verwendung des Format-Specifiers. Das ist aber mit Sicherheit kein Grund, C die Schuld zu geben und zu sagen, man solle mit Java anfangen.

Um etwas Licht in die Sache zu bringen:
Der von dir beschriebene Fehler würde auftreten, wenn man statt zweier int's nur zwei Pointer auf int's deklarieren würde, und diese direkt (ohne &, da es ja bereits Pointer sind) an scanf übergibt, ohne den Pointern vorher die Adresse einer bereits existierenden int-Variable (oder reserviertem Speicher, oder ...) zuzuweisen.
 
  • Anfänger mit c Beitrag #12
C

cc_ip

Bekanntes Mitglied
Dabei seit
08.03.2007
Beiträge
214
Reaktionspunkte
0
was vielleicht auch noch intressant ist, google: fflush(); fpurge(); rewind();
oder aber gleich: fflush(stdin); fpurge(stdin); rewind(stdin);
 
  • Anfänger mit c Beitrag #13
Realiti

Realiti

Bekanntes Mitglied
Dabei seit
13.04.2008
Beiträge
297
Reaktionspunkte
0
Ort
Deutschland was sonst!
Willst du C oder C++ lernen??

Ich hätte das Problem so gelöst (C++-Code):
Code:
#include <iostream>
using namespace std;

int main (void)
{
    int a=0;
    int b=0;
    
    cout << "Hallo!" << endl << endl;
    cout << "1. Zahl: ";
    cin >> a;
    
    cout << endl << "2.Zahl: ";
    cin >> b;
    cout << endl;
    cout << a << "+" << b << "=" << a+b;
    
    cin.get();
    cin.get();    
    return 0;
}
Dieses Programm wir auch bei dir funktionieren, Dev C++ ist ja eigentlich ein C++-Compiler...:D

Hey darf ich mal fragen für was du 2 mal cin.get(); geschrieben hast?
also:
cin.get();
cin.get();

?????
Das programm schliest auch nicht wenn man es nur einmal eingibt!
 
  • Anfänger mit c Beitrag #14
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Es kann manchmal Probleme bei einfachem "cin.get();" geben. Allerdings ist die Variante mit:
Unter umständen reicht ein cin.get(); nicht aus um das schließen des Fensters zu verhindern. Dann kann man mit
cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cin.get(); den Eingabepuffer löschen.
Kurze Erklärung: cin.clear() versetzt cin wieder in den Ursprungsstatus (zB Fehler werden wieder zurückgesetzt). cin.ignore(cin.rdbuf()->in_avail()); löscht alle Zeichen die noch im Einagebpuffer stehen (wenn man cin.get() schreibt, und jemand gibt 2 Zeichen ein, bleibt 1 Zeichen im Puffer stehen - denn cin.get() liest ja nur eines aus).
wesentlich schöner.

Zum nachlesen: http://tutorial.schornboeck.net/hello_world.htm
 
  • Anfänger mit c Beitrag #15
Cheddar

Cheddar

Bekanntes Mitglied
Dabei seit
05.04.2009
Beiträge
453
Reaktionspunkte
0
Ort
Cheddar (Somerset)
Code:
#include <stdio.h>

int main (void)
{

	printf("\nRechnen a + b von Maik *******\n");
	int a,b;
	printf ("\nGeben Sie den Wert der Variable a ein:\n");
	scanf("%d",&a);
	printf("Geben Sie nun den Wert der Variable b ein:\n");
	scanf("%d",&b);
	int c=a+b;
	printf ("\nDie Summe aus a=%d und b=%d ist c=%d\n",a,b,c);
	getchar();
	getchar();
	return 0;

}

So würde ich das realisieren. Das Programm macht zwar das selbe wie Dunars Lösung, aber ich habe das ganze noch ein bisschen übersichtlicher gemacht.
 
Thema:

Anfänger mit c

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben