| Autor |
Nachricht |
dbs
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.08.2012
Beiträge: 2
|
dbs Mitglied
13:04:32 17.08.2012 Titel: |
Merkwürdige Ergebnisse mit mehreren Texteingaben über scanf |
Zitieren |
Hallo! Ich bin eigentlich sehr neu in C und wollte gerade ein paar Experimente mit Operatoren machen, als sich mir ein Problem ergab (Sorry für die Formulierung ). Wahrscheinlich ist mein Fehler so primitiv, dass ich mich schämen müsste, aber naja.
Wenn man in diesen Code
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h>
int main()
{
char mae = 0, mae2 = 0;
scanf("%d", &mae);
scanf("%d", &mae2);
if (mae == 0 || (mae == 1 && mae2 >= 0))
{
printf("Text 1\n");
}
else
{
printf("Text 2\n");
}
return 0;
} | |
erst 2, dann 5 eingibt, so erhält man aus welchem Grund auch immer den Text 1. Ein ähnliches Problem hatte ich schon hier:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include <stdio.h>
void main()
{
int Art = 0;
char z1 = 0, z2 = 0, erg = 0;
printf("Welche Rechenart soll verwendet werden?\n");
printf("(0 fuer Addition, 1 fuer Subtraktion, 2 fuer Multiplikation, 3 fuer Division)\n");
scanf("%d", &Art);
printf("Die erste Zahl bitte\n");
scanf("%d", &z1);
printf("Die zweite Zahl bitte\n");
scanf("%d", &z2);
printf("%d", Art);
if (Art == 0)
{
erg = z1 + z2;
printf("%d und %d ergeben zusammen %d.", z1, z2, erg);
}
if (Art == 1)
{
erg = z1 - z2;
printf("%d und %d ergeben subtrahiert %d.", z1, z2, erg);
}
if (Art == 2)
{
erg = z1 * z2;
printf("%d und %d ergeben multipliziert %d.", z1, z2, erg);
}
if (Art == 3)
{
erg = z1 / z2;
printf("%d und %d ergeben dividiert %d.", z1, z2, erg);
}
} | |
Ich vermute, das hat irgendetwas mit den Variablen zu tun, da diese (das habe ich schon getestet) irgendwie ihren Wert ändern, wenn ich mehrere Sachen hintereinander einlese. |
|
|
|
 |
Bashar
Mitglied
Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 17821
|
Bashar Mitglied
13:13:17 17.08.2012 Titel: |
|
Zitieren |
Der scanf-Formatspezifizierer %d benötigt einen Zeiger auf int. char ist zu klein dafür. Was für einen Compiler benutzt du und welche Warnungseinstellungen? Manche geben eine Warnung aus, wenn die Typen nicht zu den Formatangaben passen. |
_________________ OSL♥
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 18399
|
SeppJ Moderator
13:16:33 17.08.2012 Titel: |
|
Zitieren |
|
 |
dbs
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.08.2012
Beiträge: 2
|
dbs Mitglied
13:46:56 17.08.2012 Titel: |
|
Zitieren |
| Bashar schrieb: | | Der scanf-Formatspezifizierer %d benötigt einen Zeiger auf int. char ist zu klein dafür. Was für einen Compiler benutzt du und welche Warnungseinstellungen? Manche geben eine Warnung aus, wenn die Typen nicht zu den Formatangaben passen. |
Vielen Dank, Leute! Das hat geholfen.
Und nein. Mein Compiler Code::Blocks hat mich nicht gewarnt. Böser Compiler! |
|
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 18399
|
SeppJ Moderator
13:55:38 17.08.2012 Titel: |
|
Zitieren |
| dbs schrieb: |
Und nein. Mein Compiler Code::Blocks hat mich nicht gewarnt. Böser Compiler!  | Das ist kein Compiler, sondern eine IDE. Unter deinem Code::Blocks wird sicherlich ein GCC als Compiler stecken (denn wenn du diese Standardeinstellung geändert hättest, dann hättest du gewusst, dass Code::Blocks kein Compiler ist). GCC kann diese Art von Warnung schon ewig lange. Musst du nur anschalten. Gibt wahrscheinlich in der IDE irgendwo einen Schalter für Warnoptionen. Ansonsten gib dem Compiler die Kommandozeilenoption "-Wall" (evtl. auch noch "-Wextra") mit. Warnungen sollte man immer anhaben, gerade bei neueren GCCs (4.6 und neuer) sind die Warnungen sehr gut gemacht. |
_________________ Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
Zuletzt bearbeitet von SeppJ am 13:55:57 17.08.2012, insgesamt 1-mal bearbeitet |
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|