Wahrscheinlich sehr leichtes Problem in C

Hallo, ich hoffe ihr könnt mir weiterhelfen. Ist wahrscheinlich eine total einfache Sache aber ich weiß nicht sorecht was die Fehlermeldungen zu sagen haben.
Ich versuche grade für die Schule C zu lernen, schreibe morgen eine Arbeit. :>
Unter anderem werden Funktionen drinne vorkommen. Ich versuche grade das es mit einem Prototypen geht aber das klappt irgendwie nicht.
Jedoch bekomme ich eine Fehlermeldung die ich nicht verstehe.
Ich arbeite mit Dev-c++.
Hier erstmal der Code:
Code:
#include <stdio.h>

int linie(int zeichen, int laenge);
int loesche_bild(int x);

int main() {

int zeichen,wieoft;

printf("\n Ich schreibe jetzt 10 ?\n");
linie('?',10);
printf("\n Welches Zeichen?: ");
zeichen=getchar();
printf("Wie oft?: ");
scanf("%i",&wieoft);
printf("\n");
linie(zeichen,wieoft);  

int linie(int zeichen, int laenge) {
          int i;
          for(i=1; i<=laenge; i++)
          printf("%c",zeichen);
          return(zeichen);
}

int loesche_bild(int x) {
                 for(x=1; x<= 25; x=x+1)
           printf("\n");
           return(x);

}
    
    
    
    return 0;
}

Und hier die Fehlermeldungen:
[Linker error] undefined reference to `linie'
[Linker error] undefined reference to `linie'
ld returned 1 exit status
C:\Dev-Cpp\Makefile.win [Build Error] [bsp0035.exe] Error 1 3

(Weiß nicht ob das wichtig ist aber der Code stammt aus dem Buch "C Programmieren von Anfang an")
Mfg
 
Zuletzt bearbeitet:
Ich bin leider bei C etwas eingerostet, aber wieso hast du deine beiden Funktionen innerhalb der main-Funktion implementiert? Das scheint mir falsch zu sein.
 
Ich bin leider bei C etwas eingerostet, aber wieso hast du deine beiden Funktionen innerhalb der main-Funktion implementiert? Das scheint mir falsch zu sein.

Ouh, das frag ich mich auch grade.
Ich habe das jetzt nocheinmal unter main verschoben und jetzt geht es.
Sorry ich weiß grad nicht was mit mir los ist, dass hätte mir auffallen müssen :>

Vielen Danke :)
 
Was mir noch aufgefallen ist:
Die Rückgabewerte deiner 2 Funktionen sind unnötig (auch wen loesche_bild gar nicht aufgerufen wird ;)), da du diese beim Aufruf innerhalb von main gar nicht verarbeitest. Besser so:

Code:
[B]void[/B] linie(int zeichen, int laenge)
Code:
[B]void[/B] loesche_bild(int x)
 
Habe schon das nächste Problem. Wenn ich kompiliere dann kommt keine Fehlermeldung oder ähnliches. Wenn ich aber das Programm starten will dann kommt eine Meldung.
".. hat einen Fehler versursacht und muss beendet werden"
Ich weiß nicht mehr weiter.
Hier der Code.
Code:
#include <stdio.h>
 
int addieren (int a, int b);
int loesche_bild();

int main()
{
int a,b,ergebnis;
    printf("Erste Zahl eingeben: ");
    scanf("%i,&a");
    loesche_bild();
    printf("Zweite Zahl eingeben: ");
    scanf("%i,&b");
    ergebnis = addieren (a, b);
    printf ("%i + %i = %d\n",ergebnis);
 
  return 0;
}
 
int addieren (int a, int b)
{
  printf ("%i", (a + b));
  
}

int loesche_bild() {
int x;
for(x=1; x<=25; x=x+1)
printf("\n");
}
 
Also ein Laufzeitfehler.
Versuche den Code Schritt für Schritt zu debuggen und finde heraus, an welcher Stelle dein Programm beendet wird.

BTW, ich tippe mal auf die Zeile, in der das Ergebnis ausgegeben wird ;)

Ich weiß zwar nicht welchen Compiler du nutzt, aber ich kann dir nur empfehlen alle Warnungen auszugeben und diese auch zu beachten. So lassen sich Laufzeitfehler recht gut vermeiden ...
 
Zuletzt bearbeitet:
Ich benutze Dev-cpp. Das Problem ist ja nur es wird beim kompilieren keine Fehlermeldungen oder ähnliches angezeigt. Nur halt wenn ich das Programm starten will ".. Fehler verursacht muss beendet werden..."
 
Hi,

1. Die Anführungszeichen sind falsch gesetzt. Diese kommen nur um den Formatierungsstring.

Code:
scanf("%i",&a);
Code:
scanf("%i",&b);

2. Du weist der Variable ergebnis den Rückgabewert der Funktion addieren zu.

Code:
ergebnis = addieren (a, b);

In deiner Funktion gibts du aber keinen Wert (mit return) zurück. Sondern gibst das Ergebnis nur mittels printf auf dem Bildschirm aus. Daher müsste die Funktion richtig folgendermassen aussehen:

Code:
int addieren (int a, int b)
{
	return (a+b);
}

3. Ist die letzte printf Anweisung falsch.

Code:
printf ("%i + %i = %d\n",ergebnis);

printf erwartet hier durch die 3 Platzhalter auch 3 Werte, du gibst aber nur eine Variable an, die zu dem noch nichts enthält (siehe 2.).

Richtig wäre:

Code:
printf ("%i + %i = %i\n", a, b, ergebnis);


Nun müsste dein Programm etwa wie folgt aussehen:

Code:
#include <stdio.h>
 
int addieren (int a, int b);
int loesche_bild();

int main()
{
int a,b,ergebnis;
    printf("Erste Zahl eingeben: ");
    scanf("%i",&a);
    printf("Zweite Zahl eingeben: ");
    scanf("%i",&b);
    ergebnis = addieren (a, b);
    printf ("%i + %i = %i\n", a, b, ergebnis);
 
  return 0;
}
 
int addieren (int a, int b)
{
	return (a+b);
}

int loesche_bild() {
int x;
for(x=1; x<=25; x=x+1)
printf("\n");
}

Hoffe das ist einigermassen verständlich ;)
 
Zuletzt bearbeitet:
Zurück
Oben