Problem bei Summenprogramm... (Bin wohl zu blöd)

Hempelchen

Châtaigne du Léman
Registriert
15.07.09
Beiträge
825
Hallo,

ich versuche ein "Summen" Programm zu schreiben aber irgendwie bin ich bisl überfordert... Bin recht neu und hab mir versucht so nen Ding anhand der wenigen Vorlesungsfolien die ich habe, zusammenzuschustern...

Kurz der Quelltext:

#include <stdio.h>
char zeichen=' ';
void skip(void)
double lies_zahl(void)
{ double zahl=0.,dp=1.,found=1.0, fak=10.;
skip();
while (zeichen!=' ' && zeichen!='=' && zeichen!='\nl')
{ if (zeichen<='9' && zeichen >='0')
{dp=dp*found;
zahl=zahl*fak+(zeichen-'0')*dp;
zeichen=getchar();}
else if (zeichen == '.')
{fak=1.; found=0.1;
zeichen=getchar();}
else if (zeichen == '=')
break;
else { zeichen='=';
printf("**falsche Eingabe**\n");
return 0;
break}
return zahl;
}
void skip()
{while (zeichen==' ' || zeichen=='\n')
zeichen=getchar();}
main()
{
double sum=0., zahl;
while (zeichen != '=')
{ zahl=lies_zahl();
sum+=zahl; }
printf("Summe: %d", sum);
}

Beim kompilieren kommt die Meldung:
summe3.c:7:50: warning: multi-character character constant
summe3.c:4: error: expected initializer before ‘double’

Aber ich dachte der Code wäre okey...
Was hab ich denn da falsch verstanden?
Kann mir wer helfen?
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Korrigiere mal bitte die Syntax in Zeile 3, da fehlt ein Semikolon hinter der Vorwärtsdeklaration von skip().
 

Pennywise81

Jonagold
Registriert
23.07.09
Beiträge
21
Und um die Warnung noch zu eliminieren, entferne noch das l nach dem \n in Zeile 7.
 

Hempelchen

Châtaigne du Léman
Registriert
15.07.09
Beiträge
825
Ah schön... Bin ein bischen weiter... Aber immernoch Fehler :D

summe3.c: In function ‘double lies_zahl()’:
summe3.c:20: error: expected ‘;’ before ‘}’ token
summe3.c:24: error: a function-definition is not allowed here before ‘{’ token
summe3.c:26: error: ‘main’ was not declared in this scope
summe3.c:27: error: expected `;' before ‘{’ token
summe3.c:33: error: expected `}' at end of input

Sind nun die "Folgefehler"

Ich habe den Code jetzt ein wenig umgebaut

#include <stdio.h>
char zeichen=' ';
void skip(void);
double lies_zahl(void)
{ double zahl=0.,dp=1.,found=1.0, fak=10.;
skip();
while (zeichen!=' ' && zeichen!='=' && zeichen!='\n')
{ if (zeichen<='9' && zeichen >='0')
{dp=dp*found;
zahl=zahl*fak+(zeichen-'0')*dp;
zeichen=getchar();}
else if (zeichen == '.')
{fak=1.; found=0.1;
zeichen=getchar();}
else if (zeichen == '=')
break;
else { zeichen='=';
printf("**falsche Eingabe**\n");
return 0;
break;}
return zahl;
}
void skip();
{while (zeichen==' ' || zeichen=='\n') zeichen=getchar();}
main()
{
double sum=0., zahl;
while (zeichen != '=')
{ zahl=lies_zahl();
sum+=zahl; }
printf("Summe: %d", sum);
}

Jedoch erhalte ich darauf immernoch die Fehlermeldungen

summe3.c: In function ‘double lies_zahl()’:
summe3.c:25: error: ‘main’ was not declared in this scope
summe3.c:26: error: expected `;' before ‘{’ token
summe3.c:32: error: expected `}' at end of input

Irgendwas muss ich da mit der main Deklaration machen... Aber ich raffe nicht was...
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Irgendwas muss ich da mit der main Deklaration machen... Aber ich raffe nicht was...
Es gehen mehr geschweifte Klammern auf als zu.

Tipp: rücke den Quellcode mal vernünftig ein, dann findest Du auch syntaktische Fehler leichter.
 

Hempelchen

Châtaigne du Léman
Registriert
15.07.09
Beiträge
825
Hallo,

danke für die viele Hilfe.
Der Code ist bei mir in Xcode eingerückt, aber beim rüberkopieren verziehts den aber immer...

Jetzt habe ich nurnoch EINEN einzigen Fehler über...

summe3.c:44: warning: conversion lacks type at end of format

In der Zeile
printf("Summe: %t", sum);
Sprich vorletzte Zeile...
Ich weiss aber nicht was er da für nen Typ haben will...
Langsam komm ich mir echt blöde vor...
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Was denn nun, %t oder %d wie im Schnippsel weiter oben? Ich tippe auf %f (klick!).
 

Hempelchen

Châtaigne du Léman
Registriert
15.07.09
Beiträge
825
Habs nu :D
Das Ding addiert zwar sehr komisch

3 + 4 = 11 aber er kompilierts mit %f wenigstens

Tippe mal darauf dass er durch getchar nicht die Zahlen sonderen deren ASCII Werte addiert

Naja ich hab mein Bestes gegeben und krieg jetzt einfach mal nen Rappel XD
 

sumpfmonsterjunior

Morgenduft
Registriert
17.03.05
Beiträge
167
Warum nicht einfach in C++?

Code:
#include <iostream>
#include <vector>
#include <iterator>

struct sum
{
	double value;
	sum() : value(0) {}
	void operator()(double zahl)
	{
		value += zahl;
	}
};

using namespace std;

int main (int argc, char * const argv[]) {
	vector<double> values;
	double zahl(0);

	while ( cin >> zahl ) {
		values.push_back(zahl);
	}
	sum summe = for_each(values.begin(), values.end(), sum() );
	cout << "Eingegebene Werte: ";
	copy( values.begin(), values.end(), ostream_iterator<double>( cout, " " ) );
	cout << endl << "Summe: " << summe.value << endl;
}
Einfach Zahlen eingeben und immer mit return bestätigen. Zum Summe ausgeben z.B. = und return.

Beste Grüße, SMJ
 
Zuletzt bearbeitet: