"Einfaches" Problem bei C

#2280736
Lesenswert?

Guten Tag.

Ich bin daher das ich nun der Meinung bin mich ausreichend auf Assembler 
eingearbeitet zu haben dabei C zu Lernen.

Dabei habe ich momentan dieses einfache Problem:
1
#include <stdio.h>
2

3
float Summe;
4

5
int main()         {
6
                  
7
float Zahl();
8
float Zahl2();
9
float Addiere();
10
void Ausgabe();
11

12
Summe = Addiere(Zahl,Zahl);
13
//Ausgabe(Summe);
14

15
Zahl();
16
system("Pause");
17
return 0;
18
}
19

20
float Zahl(int Zahl)       {
21
      printf("\nBitte geben sie eine Zahl ein: ");
22
      scanf("%f", &Zahl);
23
      return Zahl;
24
      }
25

26
      
27
float Addiere(float Zahl1, float Zahl2)             {
28
      return (Zahl1+Zahl2)
29
      }

"Previous declaration of 'Addiere' was here" in Zeile 9
Aber ich muss das doch ankündigen oder??

Wie ist es richtig geschrieben das ich das Programm compilieren kann 
sodass er mich zwei Ziffern abfragt und diese Addiert.

Erklärung ist hier fast interessanter als der Lösungsweg ^^.

Wie muss solch eine Verschachtelung aufgebaut sein?
Was muss bei der bekanntmachung eines Unterprogramms in der Klammer 
stehen?
#2280751
Lesenswert?

Nu habe ich den Fehler in Zeile5 (da der Ausschnitt nun höher ist).

Desweiteren habe ich den Fehler:

"an argument type that has a default promotion can't match an empty 
parameter name list declaration" in Zeile 29
1
(float Addiere (float Zahl1,float Zahl2);

Braucht ihr alle 7 Fehlermeldungen?

Zum Programmieren nutze ich DEV-C++


Inwiefern passen die nicht zusammen?

Sind doch beides float Addiere()
Gast #2280761
Lesenswert?

Ich denke Du kannst Dir gleich mal angewöhnen, eine Funktion mit Name 
UND Parametern zu beschreiben.

Obe schreibst Du

float Addiere();

unten steht

float Addiere(float Zahl1, float Zahl2)
{
   ...
}

Das passt nicht zusammen.
Oben sagst Du - die Funktion hat keine Parameter
( Obwohl dann auch ein void fehlt )
Unten hat sie dann doch welche.
#2280762
Lesenswert?

Der Übersicht halber nochmal der Quelltext (bin vlt. schon etwas weiter 
gekommen):
1
#include <stdio.h>
2

3
float Summe;
4

5

6
int main()         {
7
                  
8
float Zahl();
9
float Addiere(float Zahl1, float Zahl2);
10
void Ausgabe();
11

12
Summe = Addiere(Zahl,Zahl);
13
//Ausgabe(Summe);
14

15

16
system("Pause");
17
return 0;
18
}
19

20
float Zahl(int Zahl)       {
21
      printf("\nBitte geben sie eine Zahl ein: ");
22
      scanf("%f", &Zahl);
23
      return Zahl;
24
      }
25

26
      
27
float Addiere(float Zahl1, float Zahl2)             {
28
      return (Zahl1 + Zahl2)
29
      }

Fehlermeldungen:

In function `main':
12 incompatible type for argument 1 of `Addiere'
12 incompatible type for argument 2 of `Addiere'
In function `Addiere':
29 syntax error before '}' token

Sind immerhin nun "nurnoch" 3Fehler in diesem extrem langen Koplexen 
Programm (Ist ja fast wie mein erstes Diktat).

Wachtler: Bin gerade dabei mit einem Online Tutorial zu Lernen (Erst 
gelesen und nun am Programmieren).

Edit: Nun sinds nurnoch die beiden in Zeile 12.
#2280780
Lesenswert?

Für meine Assembler Fortschritte?

Habe ich zuhause.

Meine erfolgreichen Programme waren zuletzt:


Frequenzzähler um 32Bit Umrechner für Drehzahl Auto

Gerät zum Auslesen der Fehlercode meines Autos

Keyboard auf TextDisplay

Ansteuerungsroutine für GrafikLCD.

sowie

Routine zum Anzeigen einer Grafik auf GrafikLCD mit angabe Position X, Y 
im Pixel ohne über Rand schreiben.
Gast #2280793
Lesenswert?

1
#include <stdio.h>
2

3
float Zahl(void);   // Parameterliste nicht vergessen
4
float Addiere(float Zahl1, float Zahl2);
5
void Ausgabe(float); // Parameterliste nicht vergessen
6

7
int main()         {
8
                  
9
  float Summe, Zahl = 1.0;
10

11
  Summe = Addiere(Zahl,Zahl);
12
//  Ausgabe(Summe);
13

14
  system("Pause");
15
  return 0;
16
}
17

18

19
float Zahl(void)       {  // was sollte das int da?
20
      float Zahl;
21
      printf("\nBitte geben sie eine Zahl ein: ");
22
      scanf("%f", &Zahl);
23
      return Zahl;
24
      }
25

26
      
27
float Addiere(float Zahl1, float Zahl2)             {
28
      return (Zahl1 + Zahl2);
29
      }

Nimm lieber double statt float, ist genauer. (Bei scanf dann aber "%lf")
#2280798
Lesenswert?

Habe das mit dem "Zahl" angepasst das nun Zahl als Funktion und Zahlx 
als Variable vorhanden ist sowie float Zahlx in den Prototypen für Zahl 
eingefügt, bekomme aber weiterhin die gleiche Fehlermeldung:
1
#include <stdio.h>
2

3
float Summe;
4

5

6
int main()         {
7
                  
8
float Zahl(float Zahlx);
9
float Addiere(float Zahl1, float Zahl2);
10
void Ausgabe();
11

12
Summe = Addiere(Zahl,Zahl);
13
//Ausgabe(Summe);
14

15

16
system("Pause");
17
return 0;
18
}
19

20
float Zahl(float Zahlx)       {
21
      printf("\nBitte geben sie eine Zahl ein: ");
22
      scanf("%f", &Zahlx);
23
      return Zahlx;
24
      }
25

26
      
27
float Addiere(float Zahl1, float Zahl2)             {
28
      return (Zahl1 + Zahl2);
29
      }

In function `main':
12 incompatible type for argument 1 of `Addiere'
12 incompatible type for argument 2 of `Addiere'

Warum kann man die Funktion "Zahl" nicht so in die Funktion "Addiere" 
einsetzen?

Ich habe mal testweise

Test = Zahl(); geschrieben.

Hier erhalte ich den Fehler: too few arguments to function `Zahl'

Das Programm Zahl geht wieder (Habe die float Zahlx gelöscht und einmal 
eins IN das Programm Zahl geschrieben.
#2280824
Lesenswert?

Du solltest die Bezeichner etwas sorgfältiger wählen. Dein "Zahl()" ist 
ja keine Zahl, sondern eine Funktion, die eine Zahl einliest. Da wäre 
ein passender Name z.B. ZahlEinlesen(). Dann erkennt man beim Aufruf mit
Summe = Addiere(  ZahlEinlesen(),  ZahlEinlesen() )
sofort, dass da zweimal eine Zahl eingelesen wird. Bei Zahl() weiß man 
hingegen nicht, wo die Zahl nun herkommt...
Gast #2280844
Lesenswert?

Versuchs mal so in der Art (ohne Garantie, habs nicht getestet):
1
#include <stdio.h>
2

3

4
float getZahl();
5
float Addiere(float, float);
6

7

8

9
int main()         {
10
  float Summe, Zahl1, Zahl2;
11
  
12
  Zahl1 = getZahl();
13
  Zahl2 = getZahl();
14
  Summe = Addiere(Zahl1,Zahl2);
15
  
16
  printf("\nSumme: %f", Summe);
17
  
18
  system("Pause");
19
  return 0;
20
}
21

22
float getZahl()       {
23
    float Zahlx;
24
      printf("\nBitte geben sie eine Zahl ein: ");
25
      scanf("%f", &Zahlx);
26
      return Zahlx;
27
      }
28

29
      
30
float Addiere(float Zahl1, float Zahl2)             {
31
      return (Zahl1 + Zahl2);
32
      }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren