Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Wahrscheinlich sehr leichtes Problem in C

Diskussion: Wahrscheinlich sehr leichtes Problem in C im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, ich hoffe ihr könnt mir weiterhelfen. Ist wahrscheinlich eine total einfache Sache aber ich weiß nicht sorecht was ...

Antwort
Alt 10.01.11, 17:43   #1 (permalink)
 
Registriert seit: 10.01.11
want3d21 Leistung: Facit NTK
Likes: 0
Question Wahrscheinlich sehr leichtes Problem in C

Anzeige

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

Geändert von want3d21 (10.01.11 um 17:57 Uhr)
want3d21 ist offline   Mit Zitat antworten
Alt 10.01.11, 17:59   #2 (permalink)
Senior Member
 
Benutzerbild von odigo
 
Registriert seit: 25.12.04
odigo Leistung: 8086odigo Leistung: 8086
odigo eine Nachricht über ICQ schicken
Likes: 54
Standard

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.
odigo ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 10.01.11, 18:01   #3 (permalink)
Themenstarter
 
Registriert seit: 10.01.11
want3d21 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Zitat von odigo Beitrag anzeigen
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
want3d21 ist offline   Mit Zitat antworten
Alt 10.01.11, 18:51   #4 (permalink)
 
Registriert seit: 13.08.07
thodt Leistung: Z3
Likes: 2
Standard

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:
void linie(int zeichen, int laenge)
Code:
void loesche_bild(int x)
thodt ist offline   Mit Zitat antworten
Alt 10.01.11, 21:53   #5 (permalink)
Themenstarter
 
Registriert seit: 10.01.11
want3d21 Leistung: Facit NTK
Likes: 0
Standard

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");
}
want3d21 ist offline   Mit Zitat antworten
Alt 10.01.11, 21:56   #6 (permalink)
 
Benutzerbild von blue182
 
Registriert seit: 21.08.10
blue182 Leistung: Facit NTK
Likes: 10
Standard

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 ...

Geändert von blue182 (10.01.11 um 21:59 Uhr)
blue182 ist offline   Mit Zitat antworten
Alt 10.01.11, 22:03   #7 (permalink)
Themenstarter
 
Registriert seit: 10.01.11
want3d21 Leistung: Facit NTK
Likes: 0
Standard

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..."
want3d21 ist offline   Mit Zitat antworten
Alt 10.01.11, 22:04   #8 (permalink)
 
Registriert seit: 13.08.07
thodt Leistung: Z3
Likes: 2
Standard

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

Geändert von thodt (10.01.11 um 22:06 Uhr)
thodt ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Wahrscheinlich sehr leichtes Problem in C
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61