Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleme mit fgetc

Empfohlene Antworten

Veröffentlicht

Hey, ich bins mal wieder.

Also, ich habe jetzt versucht etwas aus einer Datei, die geöffnet habe (Ihr wisst schon, mit fopen), mit fgetc herauszulesen. Nun habe ich das Problem, das er mir dabei ja einen int Wert zurückliefert. Ich möchte aber ja das gelesene (bis zu einem Leerzeichen, wo ich auch noch nicht weiß wie ich das machen soll), als String in einem char Array speichern, um es dann später noch weiter zu untersuchen. Wie kann ich die Konvertierung machen?

Bine

versuchs mal damit:


int main ()

{

   char* buffer = new char[MAX_SIZE];

   int pos = 0;

   // ... datei öffnen ...

   do

   {

      buffer[i] = fgetc(/*Parameter*/);

   } while (buffer[i++] != '\n');

   // ...

   delete buffer;

}

ich hoffe das das hilft und nicht so viele fehler enthält. bei fgetc muß du noch die parameter entsprechend einfügen. die kenne ich nicht.

ps: ich hoffe du wolltest keine C- Code.

also, wenn ich dich richtig verstanden hab, möchtest du immer einen sting bis zu einem leerzeichen einlesen, und die einzelnen zeichen des strings in einem array ablegen.

ich würd das so machen:

 


#include blabla

// max zeilenlänge

#define MAXCHARS 2500


void main() {

FILE *InFile;

char Zeile[MAXCHARS];

int i,k;

int wortnummer;

int zeichen;

int zeilenlaenge;

// 500: maximale wort anzahl

//  50: maximale wort länge

char words[500][50];


InFile = fopen("meineDatei.txt","r");


wortnummer=0;

//liest bis dateiende erreicht immer eine zeile ein 

//und speichert sie in "Zeile" ab

while ((fgets(Zeile,MAXCHARS-1,InFile)!=0) {

zeilennummer++;

zeilenlaenge = strlen(Zeile);

zeichen=0;

for (i=0;i<zeilenlaenge;i++) {


if (Zeile[i]!= " ") {

strcpy(words[wortnummer][zeichen],Zeile[i]);

zeichen++;

} else {

zeichen=0;

wortnummer++;

}

}


}



}


 

doppelt gemoppelt

<FONT COLOR="#a62a2a" SIZE="1">[ 05. Oktober 2001 09:22: Beitrag 1 mal editiert, zuletzt von Poldi ]</font>

Ja, so habe ich das ja auch im letzten Schritt in etwa getan. Nun hat mein CHef aber gesagt, ich solle die Funktion 'fgetc' anwenden und nicht 'fgets'. Das ist mein Problem.

Bine

Wie muss ich die Bedingung einer while Schleife schreiben, damit ich Zeichen aus der Datei mit 'fgetc' so lange einlesen kann, bis ein Leerzeichen kommt?

while (fgetc (fz)!= ??????? )

{

bla bla bla

}

versuchs mal mit


int main()

{

   char buffer[250];

   int pos;

   while (buffer[pos++] = fgetc(fz) != ' ');

}

dann werden die zeichen auch gleich noch gespeichert.

du hast das do vergessen:

do {

bla bla bla;

} while (Bedingung);

du kannst dir auch noch n int array zusätzlich anlegen, in dem du dir merkst, wo in dem anderen array das nächste wort anfängt. dann kannst du die später auch wieder ausgeben.

  while (buffer[pos++] = fgetc(fz) != ' '); 

Vorsicht! Wenn ich mich nicht sehr taeusche, fehlen da Klammern. (Das Ergebnis der Abfrage wird in den Buffer geschrieben, nicht das gelesene Zeichen.)

Uli

Nur als Anmerkung: Solltest Du CStrings haben, kannst Du über GetBuffer() einen Pointer auf den Inhalt bekommen und mit GetBufferSetLength() die Länge des gewünschten Char-Arrays bestimmen: Achtung!!! Es kann u.U. sein, daß man noch das 0-er Bytes ans Ende ranhängen muß (auf jeden Fall wenn GetBufferSetLength den String nach unten begrenzt)

<FONT COLOR="#a62a2a" SIZE="1">[ 05. Oktober 2001 11:04: Beitrag 1 mal editiert, zuletzt von Crush ]</font>

@uli:

stimmt die klammern fehlen. habe ich wohl vergessen. vergleiche kommen vor zuweisungen. kann ja mal passieren

@poldi:

dir kann ich aber nicht zustimmen das do habe ich nicht vergessen.

richtig müsste es dann heisen


int main()

{

   char buffer[255];

   int pos = 0;

   while ((buffer[pos++] = fgetc(fz)) != ' ');

}

ps: zählt sowas eigentlich schon zum guten und von allen geliebten spagethicode ???

<FONT COLOR="#a62a2a" SIZE="1">[ 05. Oktober 2001 11:12: Beitrag 1 mal editiert, zuletzt von maddin ]</font>

Kein Problem, maddin, ich bin da auch schon drauf reingefallen... ;)

In C gilt es nicht als Spaghetticode, zumal es sehr praktisch, kurz, uebersichtlich und syntaxregelkonform ist. K&R bringen es ja auch in ihrem Standardwerk.

Den Freaks von der Pascalaesthetikerfront faellt natuerlich jedesmal der Kitt aus den Zaehnen, wenn die sowas sehen. :D

Uli

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von EisenUli:

<STRONG>

Den Freaks von der Pascalaesthetikerfront faellt natuerlich jedesmal der Kitt aus den Zaehnen, wenn die sowas sehen. :D

Uli</STRONG>

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>

while ((buffer[pos++] = fgetc(fz)) != ' ');

Hey,

ich danke Euch allen erst einmal, war ganz schön viel zu lesen nach einem so langen Wochenende, und werde jetzt versuchen das, was ich hier bei Euch gelesen haben umzusetzen (ohne wirklich Eure Lösungen zu benutzen, denn ich will dabei ja auch was lernen).

Danke Bine :)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.