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
floatSumme;
4
5
intmain(){
6
7
floatZahl();
8
floatZahl2();
9
floatAddiere();
10
voidAusgabe();
11
12
Summe=Addiere(Zahl,Zahl);
13
//Ausgabe(Summe);
14
15
Zahl();
16
system("Pause");
17
return0;
18
}
19
20
floatZahl(intZahl){
21
printf("\nBitte geben sie eine Zahl ein: ");
22
scanf("%f",&Zahl);
23
returnZahl;
24
}
25
26
27
floatAddiere(floatZahl1,floatZahl2){
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?
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
(floatAddiere(floatZahl1,floatZahl2);
Braucht ihr alle 7 Fehlermeldungen?
Zum Programmieren nutze ich DEV-C++
Inwiefern passen die nicht zusammen?
Sind doch beides float Addiere()
Michael Dierken schrieb:> Braucht ihr alle 7 Fehlermeldungen?
Eigentlich brauchst du die, aber wenn wir etwas dazu sagen sollen, dann
brauchen wir die zusammen mit dem jeweils aktuellen Quelltext.
Es sei denn, die Hellseher des Forums sind gerade anwesend.
Michael Dierken schrieb:> Sind doch beides float Addiere()
Aber es gibt auch noch jeweils eine PARAMETERLISTE.
Der Rückgabewert ist nicht alles.
Ein C-Buch mal zu lesen würde vielleicht helfen.
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.
Der Übersicht halber nochmal der Quelltext (bin vlt. schon etwas weiter
gekommen):
1
#include<stdio.h>
2
3
floatSumme;
4
5
6
intmain(){
7
8
floatZahl();
9
floatAddiere(floatZahl1,floatZahl2);
10
voidAusgabe();
11
12
Summe=Addiere(Zahl,Zahl);
13
//Ausgabe(Summe);
14
15
16
system("Pause");
17
return0;
18
}
19
20
floatZahl(intZahl){
21
printf("\nBitte geben sie eine Zahl ein: ");
22
scanf("%f",&Zahl);
23
returnZahl;
24
}
25
26
27
floatAddiere(floatZahl1,floatZahl2){
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.
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.
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
floatSumme;
4
5
6
intmain(){
7
8
floatZahl(floatZahlx);
9
floatAddiere(floatZahl1,floatZahl2);
10
voidAusgabe();
11
12
Summe=Addiere(Zahl,Zahl);
13
//Ausgabe(Summe);
14
15
16
system("Pause");
17
return0;
18
}
19
20
floatZahl(floatZahlx){
21
printf("\nBitte geben sie eine Zahl ein: ");
22
scanf("%f",&Zahlx);
23
returnZahlx;
24
}
25
26
27
floatAddiere(floatZahl1,floatZahl2){
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.
Michael Dierken schrieb:> float Zahl(float Zahlx);> ...> Summe = Addiere(Zahl,Zahl);
Willst du unbedingt die Funktion Zahl an Adiere übergeben?
Oder warum schreibst du das hin?
Danke für die Hilfe.
Fehler war:
Addiere(Zahl(), Zahl());
Es fehlten die () nach den Zahl.
Ich möchte das sich das Unterprogramm Addiere mittels des Unterprogramms
Zahl zwei Zahlen holt und diese dann Addiert.
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...