Hi,
Da Dir hier Hilfe ohne Erklärung zuteil wurde (kommt eher selten vor, wundert mich eigentlich), mach ich mich mal dran. Auch wenn das wahrscheinlich mal wieder kein Schwein liest ;-)
Verlangt wird Standard-C, ja?
#include <stdio.h>
#include <string.h>
#include <conio.h>
conio.h ist nicht im Standard enthalten.
#define ANZ 20
Hier fehlt der kurze Kommentar, was diese Nummer machen soll.
void zeichenausgabe(void)
Eigentlich sollte eien Funktion, in der etwas schiefgehen kann, auch immer etwas zurückgeben. Aber gut, will nicht _zu_ kleinlich sein.
{
Geschweifte Klammern auf eine neue Zeile zu setzen kann zu Unfällen führen. War erst neulich hier im Forum.
int x;
In stdint.h sind passende Typen für alle Zwecke aufgeführt. Nimm diese anstatt einfach nur int.
#include <stdint.h>
char string[ANZ+1] , c;
Man sollte die Variablen vorbelegen (nicht immer, aber das kommt erst sehr viel später. Richtig falsch ist aber nie):
uint8_t x = 0;
char string[ANZ+1], c=(char)(0); // oder c = '\0'
memset(string,'\0',ANZ+1);
printf("STRING\n");
printf("-------\n");
printf("Eingabe ");
Kannst Du zusammenfassen (printf() ist teuer)
printf("STRING\n-------\nEingabe ");
x=0;
Kann hier wegfallen, da oben bereits initialisiert.
do{
c = getch();
getch() ist nicht im Standard, getc(FILE *stream) ist es. Es gibt auch noch getchar(), das ist äquivalent zu getc(stdin).
c = getchar();
if(c == EOF){ // unter Linux und der Bash kann man EOF mit STRG+d erzeugen
printf("getchar(): %25.25s\n",strerror(errno));
}
if(x<ANZ && x!=13)
Was versteckt sich hinter der 13? Versuchst Du die Entertaste zu erwischen? Laut Deinem Code testest Du aber nur darauf, ob schon der 13. Buchstabe eingegeben wurde. Ein for-Loop wäre hier sinnvoller. Du kannst, was Du wahrscheinlich nicht wußtest, auch mehrere Bedingungen hineinpacken:
for(; x<ANZ && x!=13;x++){ ...
{
putchar(c);
string[x] = c;
++x;
}
}while(c!=13);
Hier testest Du darauf, ob ein Zeichen mit der Nummer 13 eingegeben wurde. Du scheinst die 13 zu mögen, was? ;-)
BTW: ein cast wäre hier eigentlich angesagt:
}while(c!=(char)(13));
Und 13 ist \r. Wenn Du das Zeilenende erwartest, dann benutze auch das entsprechende Zeichen. Leider ist das nicht portabel, da es eine Menge Zeichen für dsa Zeilenende gibt. Selbst wenn man es auf die gängigsten 3 reduziert wird unangenehm: Apple hat '\r', MS hat '\r\n', Unix hat '\n'.
string[x-1] = '\0';
Brauchst Du nicht, da weiter oben schon im Gesamten auf '\0' gesetzt.
printf("\n\nString %s \n", string);
printf("Laenge %d\n\n", strlen(string));
printf("\n\n\n\n");
Auch hier kannst Du zusammenfassen (\t ist der Tabulator):
printf("\nString\t%s\nLaenge\t%d\n",string, strlen(string));
so short
Christoph Zurnieden