Schiffe versenken mit kleinem Problem
-
Schreib doch einfach eine untendrunter:
int main() { }
und probiere es aus!
-
Also hier ist meine Main Funktion, aber die ist auf einer eigenen Datei!
# include <stdio.h> # include <stdlib.h> # inlcude "schiffe.h" main() { int feld[20][20]; int spalten, zeilen, schiffe; int schifflaenge[20]; printf(" S C H I F F E V E R S E N K E N \n\n\n"); printf("Anzahl Spalten (1 - 20): "); scanf("%d", &spalten); printf("Anzahl Zeilen (1 - 20): "); scanf("%d", &zeilen); printf("Anzahl Schiffe: "); scanf("%d", &schiffe); printf("\n\n\n"); printf("Die Eingabe der Schiffe erfolgt in der Form:\n"); printf("Spalte Zeile - Laenge - Richtung.\n"); printf("Richtung: u => nach unten\n"); printf(" o => nach oben\n"); printf(" r => nach rechts\n"); printf(" l => nach links\n"); init_feld(feld, spalten, zeilen); positioniere_schiffe(feld, spalten, zeilen, schiffe, schifflaenge); spielbeginn(feld, spalten, zeilen, schiffe, schifflaenge); }
-
Gibst du beim compilieren denn alle Dateien mit an?
Welchen Compiler (Name, Version) benutzt du und wie rufst du ihn auf?
Und wie lauten die Meldungen vom Compiler/Linker?
-
also hier der gesamte code mit der main funtkion:
# include <stdio.h> # include <stdlib.h> # include "schiffe.h" void init_feld(int feld[20][20], int spalten, int zeilen) { int a, b; for(a = 0; a < zeilen; a++) { for(b = 0; b < spalten; b++) feld[a][b] = 0; } printpositionfeld(feld, spalten, zeilen); } void positioniere_schiffe(int feld[20][20], int spalten, int zeilen, int schiffe, int schifflaenge[]) { int i, a; char temp_x, richtung; int x; int y, laenge; for(i = 0; i < schiffe; i++) { printf("\n %d. Schiffe: ", i); fflush(stdin); scanf("%c%d-%d-%c", &temp_x, &y, &laenge, &richtung); x = temp_x - 'a'; y = y - 1; if(schiff_zulaessig(feld, x, y, laenge, richtung, spalten, zeilen)) { for(a = 0; a < laenge; a++) { if(richtung == 'r') feld[y][x+a] = i; if(richtung == 'l') feld[y][x-a] = i; if(richtung == 'u') feld[y+a][x] = i; if(richtung == 'o') feld[y-a][x] = i; } schifflaenge[1] = laenge; printpositionfeld(feld, spalten, zeilen); } else { printf("\nIhre Schiffstellung ist nicht zulaessig!\n\n"); printf("Die Schiffe schneiden sich oder passen nicht ins Feld.\n\n"); printf("Geben Sie eine neue Stellung ein.\n\n"); i--; } } printf("\nAlle Schiffe wurden positioniert."); printf("\nZum Weitermachen die Eingabetaste betaetigen."); scanf("%c", &temp_x); } int pruefe_rechts(int feld[20][20], int spalte, int zeile, int laenge, int spaltenges) { int i; if(spalte + laenge > spaltenges) return 0; for(i = 0; i < laenge; i++) { if(feld[zeile][spalte+i] != 0) return 0; } return 1; } int pruefe_links(int feld[20][20], int spalte, int zeile, int laenge) { int i; if(spalte + 1 - laenge < 0) return 0; for(i = 0; i < laenge; i++) { if(feld[zeile][spalte- i] != 0) return 0; } return 1; } int pruefe_unten(int feld[20][20], int spalte, int zeile, int laenge, int zeilenges) { int i; if(zeile + laenge > zeilenges) return 0; for(i = 0; i < laenge; i++) { if(feld[zeile+i][spalte] != 0) return 0; } return 1; } int pruefe_oben(int feld[20][20], int spalte, int zeile, int laenge) { int i; if(zeile + 1 - laenge < 0) return 0; for(i = 0; i < laenge; i++) { if(feld[zeile-i][spalte] != 0) return 0; } return 1; } int schiff_zulaessig(int feld[20][20], int spalte, int zeile, int laenge, char richtung, int spaltenges, int zeilenges) { if(richtung == 'r') return pruefe_rechts(feld, spalte, zeile, laenge, spaltenges); if(richtung == 'l') return pruefe_links(feld, spalte, zeile, laenge); if(richtung == 'u') return pruefe_unten(feld, spalte, zeile, laenge, zeilenges); if(richtung == 'o') return pruefe_oben(feld, spalte, zeile, laenge); return 0; } int treffer(int feld[20][20], int spalte, int zeile, int schifflaenge[]) { if(feld[zeile][spalte] > 0 && feld[zeile][spalte] <= 20) { schifflaenge[feld[zeile][spalte]]--; return 1; } return 0; } void spielgebinn(int feld[20][20], int spalten, int zeilen, int schiffe, int schifflaenge[]) { int i; int rzeile; char temp_rspalte; int rspalte; for(i = 0; i < 20; i++) printf("\n\n"); printratefeld(feld, spalten, zeilen); for(i = 0; ;i++) { int schiff; printf("\n %d. Schuss: ", i+1); scanf("%c%d", &temp_rspalte, &rzeile); fflush(stdin); rspalte = temp_rspalte - 'a'; rzeile = rzeile - 1; if((feld[rzeile][rspalte] > GETROFFEN) || (feld[rzeile][rspalte] == 'w') || (feld[rzeile][rspalte] == '#')) { printf("Sie haben auf dieses Feld bereits geschossen."); printratefeld(feld, spalten, zeilen); continue; } if(treffer(feld, rspalte, rzeile, schifflaenge)) { schiff = feld[rzeile][rspalte]; feld[rzeile][rspalte] += GETROFFEN; if(!schifflaenge[schiff]) { int a, b; for(a = 0; a < zeilen; a++) { for(b = 0; b < spalten; b++) { if(feld[a][b] == schiff + GETROFFEN) feld[a][b] = '#'; } } } } else feld[rzeile][rspalte] = 'w'; printratefeld(feld, spalten, zeilen); if(spiel_ende(schiffe, schifflaenge)) { printf("\nALLE SCHIFFE VERSENKT !!!\n\n"); break; } } } int spiel_ende(int schiffe, int schifflaenge[]) { int i; for(i = 1; i <= schiffe; i++) { if(schifflaenge[i]) return 0; } return 1; } void printpositionfeld(int feld[20][20], int spalten, int zeilen) { int a, b; printf("\n "); for(a = 0; a < spalten; a++) printf(" %c", 'a'+a); printf("\n"); for(a = 0; a < zeilen; a++) { printf("%2d", a+1); for(b = 0; b < spalten; b++) { if(feld[a][b] == 0) printf(" -"); else printf(" x"); } printf("\n"); } } void printratefeld(int feld[20][20], int spalten, int zeilen) { int a, b; printf("\n "); for(a = 0; a < spalten; a++) printf(" %c", 'a'+a); printf("\n"); for(a = 0; a < zeilen; a++) { printf("%2d", a+1); for(b = 0; b < spalten; b++) { if(feld[a][b] > GETROFFEN) { printf(" x"); continue; } if(feld[a][b] == '#') { printf(" #"); continue; } if(feld[a][b] == 'w') { printf(" w"); continue; } printf(" -"); } printf("\n"); } } main() { int feld[20][20]; int spalten, zeilen, schiffe; int schifflaenge[20]; printf(" S C H I F F E V E R S E N K E N \n\n\n"); printf("Anzahl Spalten (1 - 20): "); scanf("%d", &spalten); printf("Anzahl Zeilen (1 - 20): "); scanf("%d", &zeilen); printf("Anzahl Schiffe: "); scanf("%d", &schiffe); printf("\n\n\n"); printf("Die Eingabe der Schiffe erfolgt in der Form:\n"); printf("Spalte Zeile - Laenge - Richtung.\n"); printf("Richtung: u => nach unten\n"); printf(" o => nach oben\n"); printf(" r => nach rechts\n"); printf(" l => nach links\n"); init_feld(feld, spalten, zeilen); positioniere_schiffe(feld, spalten, zeilen, schiffe, schifflaenge); spielbeginn(feld, spalten, zeilen, schiffe, schifflaenge); }
ich benutze den devc++!
Meldung vom compilier: [Linker Error]...321: undefined reference to 'Spielbeginn(int()[20], int, int, int, int)
-
In C wird Groß-Kleinschreibung unterschieden.
Spielbeginn ist etwas anderes als spielbeginn.
Schau mal genau hin.
-
DirkB schrieb:
Welchen Compiler (Name, Version) benutzt du ..
Es gibt da eine verbreitete Version 4.9.9.2 vom März 2005.
Die ist schon über acht Jahre alt. mittlerweil gibt es aber eine neuere.
-
int main()
wäre angebrachter als nur
main()
-
so hab endlich meinen fehler gefunden! hab einmal Spielbeginn falsch geschrieben!
-
Heinzi1991 schrieb:
eine main Funktion hab ich noch nicht, kann es vl daran liegen, das ich noch keine main Funktion habe?
Hattest Du wirklich 300 Zeilen Code geschrieben ohne zwischendurch mal zu testen?
Man schreibt ein Programm nicht in einem Rutsch runter!
-
Heinzi1991 schrieb:
so hab endlich meinen fehler gefunden! hab einmal Spielbeginn falsch geschrieben!
Das finde ich etwas merkwürdig, denn in dem Code den du uns gezeigt hast, war alles richtig.
Also hast du uns nicht den Code gezeigt, mit dem du arbeitest. Da können wir dann auch keine Fehler finden.Immer Copy&Paste von dem aktuellen Stand.