Zum Inhalt springen

Einlesen mehrer Befehle aus einer Zeile ohne Zeiger in C


Empfohlene Beiträge

Geschrieben

Hallo

ich hab ein kleines Problem und

komme einfach nicht weiter.

Mein Programm steht soweit schon,

nur hält es sich noch nicht an alle Vorgaben.

Dazu gehört das alle Befehle aus

einer Eingabzeile eingelesen werden sollen,

und wir keine Zeiger verwenden dürfen außer *FILE.

Also erst Programmaufruf mit Dateiname der zu lesenden daten und einer

Optionalen Zahl zur bestimmung der Anzahl der aus der Datei zu lesenden

Zeilen.

<Programmname> <Dateiname> [<Zahl>]

Danach sollen einzelne Programmfunktionen auch so aufrufbar sein.

(Wobei die Datei feste Strukturierte Datentypen enthält)

Z.B Addiere Zeile eins mit Zeile zwei.

<Funktionsname> <Zeilenid1> <Zeilenid2>

Diese Eingaben sollen immer in nur einer Zeile geschehen.

Da scanf ja immer nur einen Typ einlesen kann oder zwischen jeder eingabe

auch ein Enter zulässt fällt das ja schonmal weg. Drum dachte ich mit fgets()

aber ohne zeiger bekommt man die einzelnen teile ja nicht mehr raus aus

dem string.

Auf nachfrage ob wir strtok() benutzen dürfen wurde mir gesagt dafür sollten

wir eine eigene Funktion schreiben. Und scanf() erst benutzen nachdem die

Korrektheit der eingabe geprüft wurde.

Ich hab schon einiges ausprobiert aber nichts funktioniert.

Hat evtl. jmd einen tip für mich womit das am besten zu realisieren ist?

Ganz wichtig is halt ,dass das alles ohne Zeiger ist.

MfG

Schmurgel

Geschrieben

Such zuerst die Leerzeichen in der Eingabezeile.

Dann vergleichst du den Teil bis zum ersten Leerzeichen mit allen bekannten Funktionsnamen (strncmp), und prüfst die anderen Teile darauf, ob sie ausschließlich aus Ziffern bestehen (isdigit).

Geschrieben

Hallo nochmal.

Ich habe mir jetzt die Zeile mit fgets() geholt und lasse in einer Schleife jedes einzelne

Zeichen auf ein Leerzeichen prüfen bis das ende des Strings erreicht ist.

Die jeweiligen Leerzeichenstellen merke ich mir in einem extra array.

Nun muss ich noch die einzelnen teile in ihre jeweiligen Variablen packen.

An welcher stelle diese jeweils anfangen weiß ich ja nu schon aber ich komm einfach nicht

drauf wie das zu bewerkstelligen wäre.

Hier mal mein code der Eingabe bei laufendem Prgramm:

int k=0;

int i=0;

int i2=0;

int r=0;

int bsz[3]; //beinhaltet die Zahl der jewiligen Leerzeichenstellen

char test[100]; //beinhaltet den String

char funktion;

fgets(test, 100, stdin);

printf("%s\n",test);

while(test!='\0') //solange bis String zu ende

{

for (i2;test[i2]!=' ';++i2) //solange bis Leerzeichen

{

k = i2+2;

//printf("k: %d, i: %d\n",k,i);

bsz[r]=i;

}

r++;

i=k-1;

i++;

i2=k;

//printf("%s\n",&test[k]);

}

r=0;

while(r!=3)

{

printf("%d\n",bsz[r]);

r++;

}

/* An dieser stelle habe ich nun versucht über die jeweils voher bestimmte stelle zumindest erstmal den funktionsnamen zu extrahieren... leider ohne erfolg

ich weiß auch leider garnicht ob getchar und putchar hier angebracht ist und ob man das so verwenden kann... */

int bsz1 = bsz[0];

int bsz2 = bsz[1];

int bsz3 = bsz[2];

while (bsz1;funktion=fgetc(test[bsz1])!=' ';bsz++)

{

putchar(funktion);

//funktion = getchar();

}

nochmal zu dem tip mit isdigit() den kann ich leider nicht verwenden da die zeilenid aus beliebiegen zeichen besteht.

Wäre also echt super wenn mir da jemand helfen könnte. Wie ich die zeichen aus dem string von einer bestimmten stelle bis zum Leerzeichen in eine extra Variable packen kann.

Geschrieben

Mh hab irgendwie zu kompliziert gedacht :)

Eigentlich doch ganz einfach...

Zuerst per fgets die Zeile geholt.

Dann nur die Anzahl der Leerzeichen gezählt.

Und dann je nach Anzahl der Leerzeichen

einfach mit sscanf die einzelteile geholt...

... Demzufolge gelöst :D

Grüße ...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...