Überprüfen von n auf bestimmten Bereich
-
Erstmal ein hallo an die C++ Comm
Zwecks Studium fang ich gerade mit C an und bewege mich irgendwo im Urschleim, und benötige bisschen Hilfe.
Aufgabe:
Schreiben Sie ein Programm, dass den n-ten Buchstaben des Alphabetes auf dem Bildschirm ausgibt, nachdem es Sie nach der Zahl n gefragt hat.Ich möchte das Programm noch um eine Überprüfung des eingegebenen Wertes erweitern, welche überprüft ob n sich im Bereich von 1 - 26 bewegt.
#include <stdio.h> int main () { int buchstabe; abfrage (); } int abfrage() /* Abfrage einer beliebigen Zahl */ { int buchstabe; fflush (stdin); printf ("Gib eine Zahl im Bereich von 1 - 26 ein!\n"); scanf ("%d", &buchstabe); printf ("Du hast %d eingegeben.\n",buchstabe); pruef (buchstabe); /* Pruefung einleiten */ } int pruef() /* var buchstabe auf Zahlenbereich 1-26 pruefen */ { int buchstabe; if (1 <= buchstabe <= 26) { return buchstabe; } else } printf ("Bitte gib eine Zahl im Bereich von 1 - 26 ein!\n"); abfrage(); /* Programm neu starten eigentlich ^^ */ } }
Ich hab ne ziemlich lange Fehlerliste
Wuerd sie auch noch rein kopieren, wenn mir jmnd sagt wie man das mit bloodshed macht?
Mag ungern Zeile fuer Zeile kopieren..Für mich ist das was ich geschrieben hab logisch, für den Compiler aber net
Ma die Fehlerliste ran hängt:
28 D:\Programmieren\Projekte\Buchstabe\buchstabe.c syntax error before string constant
28 D:\Programmieren\Projekte\Buchstabe\buchstabe.c conflicting types for 'printf'
28 D:\Programmieren\Projekte\Buchstabe\buchstabe.c a parameter list with an ellipsis can't match an empty parameter name list declaration
28 D:\Programmieren\Projekte\Buchstabe\buchstabe.c [Warning] data definition has no type or storage class
29 D:\Programmieren\Projekte\Buchstabe\buchstabe.c [Warning] data definition has no type or storage class
30 D:\Programmieren\Projekte\Buchstabe\buchstabe.c syntax error before '}' token
-
#include <stdio.h> int main () { int buchstabe; int abfrage (); int pruef (); abfrage (); pruef (buchstabe); /* Pruefung einleiten */ } int abfrage() /* Abfrage einer beliebigen Zahl */ { int buchstabe; fflush (stdin); printf ("Gib eine Zahl im Bereich von 1 - 26 ein!\n"); scanf ("%d", &buchstabe); printf ("Du hast %d eingegeben.\n",buchstabe); } int pruef() /* var buchstabe auf Zahlenbereich 1-26 pruefen */ { int buchstabe; if (1 <= buchstabe <= 26) { return buchstabe; } else } /* printf ("Bitte gib eine Zahl im Bereich von 1 - 26 ein!\n"); */ abfrage(); /* Programm neu starten eigentlich ^^ */ } }
Ok Fehlerliste schon mal gekürzt.
Aber dem passt was mit dem printf in der if Funktion nicht.32 D:\Programmieren\Projekte\Buchstabe\buchstabe.c [Warning] data definition has no type or storage class
mit der Fehlermeldung kann ich schon mal gar nix anfangen..
-
Ist es logisch eine Funktion in main aufzurufen die er erst später kennen lernt?
#include <stdio.h> int abfrage() /* Abfrage einer beliebigen Zahl */ { int buchstabe; fflush (stdin); printf ("Gib eine Zahl im Bereich von 1 - 26 ein!\n"); scanf ("%d", &buchstabe); printf ("Du hast %d eingegeben.\n",buchstabe); return buchstabe; } int pruef(int buchstabe) /* var buchstabe auf Zahlenbereich 1-26 pruefen 1 = var is glültig 0 = ungültig */ { if (buchstabe >= 1 && buchstabe <= 26) return 1; return 0; } int main () { int buchstabe; do { buchstabe = abfrage (); }while(!pruef(buchstabe)) return 0; }
da sind bestimmt auch Fehler drin habs nicht probiert :x
-
zeile 26 fehlt am ende noch ; sonst klappts
-
Mein Kollege meinte gestern ich soll mir angewöhnen die main Funktion oben hin zu schreiben.
Ich dachte das funktioniert so, dass wenn ne Funktion in main aufgerufen wird, schaut das Programm ob diese in der Datei enthalten ist und springt dann da hin, oder nicht?
-
Die Funktionen sind bei der Benutzung nicht bekannt du musst sie vorwärtsdeklarieren oder vor die main schreiben. Bevor du also Funktionen verwendest solltest du auch verstehen wie man damit Werte übergibt und zurückgibt sie deklariert etc...
-
Ja und da ist schon das Problem.
Könnte es mir bitte jemand erklären.
Sonst komm ich im Programmieren wohl auf keinen grünen Zweig.
-
kannst dich ja bisschen durch die kapitel lesen
-
Mit möglichst wenig Änderungen korrigiert. Ging noch einiges kürzer. Wutz hätte bestimmt eine Lösung in 4 Zeilen die man erst nach 10 min überlegen versteht
#include <stdio.h> int pruef(int buchstabe) { /* var buchstabe auf Zahlenbereich 1-26 pruefen */ if ((buchstabe > 0) && (buchstabe < 27)) { return buchstabe; } else { printf("Bitte gib eine Zahl im Bereich von 1 - 26 ein!\n"); return 0; } } int main() /* Abfrage einer beliebigen Zahl */ { int buchstabe; do { printf("Gib eine Zahl im Bereich von 1 - 26 ein!\n"); scanf("%d", &buchstabe); } while (!pruef(buchstabe)); printf("Du hast %d %c eingegeben.\n", buchstabe, buchstabe + 'a' - 1); }
-
Gradiee schrieb:
Mein Kollege meinte gestern ich soll mir angewöhnen die main Funktion oben hin zu schreiben.
Ich dachte das funktioniert so, dass wenn ne Funktion in main aufgerufen wird, schaut das Programm ob diese in der Datei enthalten ist und springt dann da hin, oder nicht?
Dem Programm ist es auch egal, weil es dann schon fertig compiliert ist.
Aber dem Compiler ist es nicht egal. Der läuft im Prinzip nur einmal durch den Quellcode und übersetzt das ganze.
Die Funktionen müssen vor dem ersten Gebrauch bekannt sein, damit der Compiler weiß, welches Format die Parameter haben.
-
erstmal danke für die vielen Antworten.
Werd mich jetzt erst nochmal selber rein wurschteln und präsentier dann die endlösung
-
in main fehlt return
-
ich++ schrieb:
in main fehlt return
Stimmt, aber der gcc meckert überhaupt nicht. Ist es evtl auch ohne C89 oder C99?
-
#include <stdio.h> int abfrage (); int pruefung (); void main() { int input; int pruef = 0; while (pruef == 0) { printf ("Gib eine Zahl ein: "); input = abfrage(); pruef = pruefung(input); if (pruef == 1) { printf ("Du hast %d eingegeben.\n", input); input = input + 64; printf ("Den Buchstabe den du suchst ist: %c", input); } else printf ("Von vorn du Trottel!\n"); } } int abfrage() { int input; fflush (stdin); scanf ("%d", &input); return input; } int pruefung(int input) { if (input >= 1 && input <= 26) return 1; else return 0; }
Das ist jetzt das fertige Endprodukt, vllt nicht die sauberste Lösung, aber es funzt