Frage von Alinchen24, 75

Programmieren in c fehlerconde int* statt int?

der compiler gibt mir folgenden fehlercode:

 Statistik.c: In Funktion »main«: Statistik.c:25:1: Warnung: Format »%i« erwartet Argumenttyp »int«, aber Argument 2 hat Typ »int *« [-Wformat=] printf("ArrithmMittel= %i", &arithmMittel); ^ Statistik.c:25:1: Warnung: Format »%i« erwartet Argumenttyp »int«, aber Argument 2 hat Typ »int *« [-Wformat=]

mein Programm:

#include <stdio.h>

int main(){

printf("Geben Sie die Anzahl der Felder ein"); 

int anzahl; 

scanf("%i", &anzahl);

printf("Geben Sie die Werte ein"); 

int i; 

double werte[anzahl];

//Summe berechnen//

 i=1;

 int alteZahl;

 alteZahl= 0;

 while (i<=anzahl){

 werte[i]= scanf("%lf", &werte[i]);

 alteZahl= werte[i] + alteZahl; i++; }

int arithmMittel; 

arithmMittel= (1/anzahl)*alteZahl; 

printf("ArrithmMittel= %i", &arithmMittel); 

return 0; 

}

bin die ganze zeit schon am verzweifeln und probiere alle verschiedenen typen aus aber nix hilft :( für hilfe bin ich sehr dankbar :)

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von ceevee, 45
printf("ArrithmMittel= %i", &arithmMittel); 

Nimm da mal das & weg, dann gibt er die Zahl aus. Davon mal abgesehen sollte arithmMittel kein integer (Ganzzahl) sein, sondern ein Float/Double. denn mit der Berechnung in der Zeile darüber

arithmMittel= (1/anzahl)*alteZahl;

kriegst du irgendwelche komischen Ergebnisse, wenn alles ganzzahlig ist. Es könnte dann sein, dass 1/anzahl ganzzahlig immer 0 ist und deswegen arithmMittel auch. 

Kommentar von Alinchen24 ,

ja krieg ich, das arithmetische Mittel ist immer 62309 oder so unabh von der eingabe :)

Kommentar von ceevee ,

Oder so, dann kommt da nicht 0 raus, sondern der Maximalwert für einen unsigned int, also 65535. 

http://www.tutorialspoint.com/c_standard_library/limits_h.htm

Versuch mal

arithmMittel= (1.0/anzahl)*alteZahl;

und arithMittel muss dann den Datentyp float oder double haben. Wenn ich "1 / irgendwas" rechne, dann ist es meistens so, dass man da keine natürliche Zahl, also keinen Integer (sondern halt eine Dezimalzahl) als Ergebnis rausbekommt.

Kommentar von Alinchen24 ,

hab da jetzt 1.0 eingesetzt und auf %fl geändert hat aber nix am Ergebnis verändert :) und die warnung das der complier float* erwartet besteht immernoch ^^

Kommentar von ceevee ,

Dass der Compiler float* (anstatt float) erwartet, liegt daran, dass du in irgendeiner printf-Anweisung (wahrscheinlich in Zeile 25) "&variable" anstatt "variable" abfragst. Beim näheren Betrachten deines Codes ist mir aber noch

 i=1;

 while (i<=anzahl){

Arrays in C fangen immer bei 0 an zu zählen. Wenn du also als Anzahl 2 einträgst, dann hat das Array die Stellen 0 und 1. Du versuchst in der Schleife auf die Stellen 1 und 2 zuzugreifen, deswegen könntest du dich auch verrechnen.

Und was du rechnest, verstehe ich ehrlich gesagt nicht so ganz... das arithmetische Mittel ist Summe / Anzahl der Werte. Da bräuchtest du nichtmal ein Array, sondern könntest die Summe jedes mal aktualisieren, wenn du einen neuen Wert einliest.

Keine passende Antwort gefunden?

Fragen Sie die Community