Forum: Compiler & IDEs Was ist falsch?


von Simon N. (ardi)


Lesenswert?

Hab nach langem mal wieder C programmiert:
1
‪#‎include <stdio.h>
2
3
int main(){
4
int ro;
5
int erste;
6
int zweite;
7
int ergebnis;
8
printf("Welche Rechenoperation moechten sie durchfuehren?\n");
9
printf("1 fuer + 2 fuer /:");
10
scanf("%c", ro);
11
12
if(ro==1){
13
14
printf("1. Zahl:");
15
scanf("%c", erste);
16
printf("2. Zahl:");
17
scanf("%c", zweite);
18
printf("Ergebnis: ",ergebnis);
19
ergebnis=erste+zweite;
20
21
}else {
22
printf("Hallo");
23
}
24
return 0;
25
}
Aber immer nach der ersten Eingabe stürzt das Programm ab.
Was ist da falsch?
Danke und Gruß

von Simon N. (ardi)


Lesenswert?

habs: kaufmannsund vergessern und anstatt %c %d

von Amateur (Gast)


Lesenswert?

Versuchs mal mit passenden Parametern. scanf("%c", ro);
Mit so was wie: "%d" und &ro. Muss aber nicht sein;-)

von Dr. Sommer (Gast)


Lesenswert?

Falsch ist: Einrückung fehlt.
1
#‎include‬ <stdio.h>
2
3
int main () {
4
  int ro;
5
  int erste;
6
  int zweite;
7
  int ergebnis;
8
  printf ("Welche Rechenoperation moechten sie durchfuehren?\n");
9
  printf ("1 fuer + 2 fuer /:");
10
  scanf ("%c", &ro);
11
12
  if (ro == 1) {
13
14
    printf ("1. Zahl:");
15
    scanf ("%c", &erste);
16
    printf ("2. Zahl:");
17
    scanf ("%c", &zweite);
18
    printf ("Ergebnis: ", ergebnis);
19
    ergebnis = erste + zweite;
20
21
  } else {
22
    printf ("Hallo");
23
  }
24
  return 0;
25
}

von Amateur (Gast)


Lesenswert?

@Dr. Sommer

Spielverderber!

So kann man das ja sogar vernünftig lesen.

Nee, nee.

von Simon N. (ardi)


Lesenswert?

Und jetzt: Geht auch nicht beim "modifiezieren":
1
#include <stdio.h>
2
3
int main(){
4
int ro;
5
int erste;
6
int zweite;
7
int ergebnis=erste + zweite;
8
printf("Welche Rechenoperation moechten sie durchfuehren?\n");
9
printf("1 fuer + 2 fuer /:");
10
scanf("%d", ro);
11
12
if(ro==1){
13
    printf("1. Zahl: ");
14
    scanf("%c", &erste);
15
    printf("2. Zahl: ");
16
    scanf("%c", &zweite);
17
    printf("Ergebnis: ",ergebnis);
18
19
}else {
20
    printf("Hallo");
21
}
22
return 0;
23
}

von Amateur (Gast)


Lesenswert?

Sticht Dir das nicht ins Auge?
scanf("%d", ro);        hole ASCII-Zahl
scanf("%c", &erste);    hole ASCII-Zahl
scanf("%c", &zweite);   hole ASCII-Zahl

Wie bereits geschrieben: Mein Favorit ist scanf ( "%d",&ro );
Musst Du aber nicht machen.

von Tom K. (ez81)


Lesenswert?

1
1.c: In function ‘main’:
2
1.c:11: warning: format ‘%c’ expects type ‘char *’, but argument 2 has type ‘int’
3
1.c:16: warning: format ‘%c’ expects type ‘char *’, but argument 2 has type ‘int’
4
1.c:18: warning: format ‘%c’ expects type ‘char *’, but argument 2 has type ‘int’
5
1.c:19: warning: too many arguments for format
6
1.c:11: warning: ‘ro’ is used uninitialized in this function
7
1.c:16: warning: ‘erste’ may be used uninitialized in this function
8
1.c:18: warning: ‘zweite’ may be used uninitialized in this function
9
1.c:19: warning: ‘ergebnis’ may be used uninitialized in this function

Wer Compilerwarnungen nicht auf die höchste Stufe stellt, hat entweder 
einen sehr guten Grund dafür oder eben kein Interesse an 
funktionierendem Code.

von Karl H. (kbuchegg)


Lesenswert?

Simon Name schrieb:
> Und jetzt: Geht auch nicht beim "modifiezieren":
>
1
> #include <stdio.h>
2
> 
3
> int main(){
4
> int ro;
5
> int erste;
6
> int zweite;
7
> int ergebnis=erste + zweite;
8
>

Würdest du mir mal erklären, wie du an dieser Stelle ein Ergebnis 
berechnen kannst, noch bevor die Werte überhaupt eingelesen wurden?
Das ist doch nicht Excel, das erst mal eine halbe Stunde darüber 
sinniert in welcher Reihenfolge welche Berechnungen gemacht werden 
müssen, damit dann hoffentlich das raus kommt, was du dir vorstellst!

>
1
> printf("Welche Rechenoperation moechten sie durchfuehren?\n");
2
> printf("1 fuer + 2 fuer /:");
3
> scanf("%d", ro);
4
>

Wo ist das & ?

>
1
> if(ro==1){
2
>     printf("1. Zahl: ");
3
>     scanf("%c", &erste);
4
>

%c ?
Echt?
erste ist ein char?

>
1
>     printf("2. Zahl: ");
2
>     scanf("%c", &zweite);
3
>

Selbiges nochmal

>
1
>     printf("Ergebnis: ",ergebnis);
2
>

Wo ist das Formatierzeichen für den auszugebenden Integer?
Schon angesprochen, was es mit ergebnis auf sich hat


Alles in allem: ein bischen mehr Sorgfalt!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.