Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » getchar???

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.08.2004, 10:49 Uhr
~werner_wernersen
Gast


habe mal ne frage... und zwar lese ich in meinem Programm eine datei mit fgets zeilenweise ein...

C++:
while ( fgets (buff, MAX, file) != NULL)
{...

so, jetzt mein Problem: die zeilen die ich einlese, sehen in etwa so aus:

C++:
test , das ist / ein Test/ /

Ich möchte jetzt bei jeder eingelesenen Zeile die Anzahl der '/' zählen und in einer variable speichern... Wie bekomme ich denn heraus wieviele dieser zeichen in jeder zeile stecken? Habe es schon mit getchar versucht, da wird aber die eingabe von der Tastatur eingelesen. das will ich auch nicht
Hoffe mir kann jemand helfen... danke im voraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.08.2004, 11:01 Uhr
pin



Du kannst es so mal versuchen:


C++:
FILE *fp;
char c;
int anzahl=0;

/*öffnen der Datei testen ob das öffnen geklappt hat*/

fscanf(fp,"%c",&c);

while(!feof(fp))
{
    if(c == '\n')
    {
        printf("In dieser Zeile sind %i / zeichen",anzahl);
       anzahl=0;
     }
  
    else if (c != '\n' && c == 47)
     anzahl++;
   fscanf(fp,"%c",&c);
}



Kannst dir dies mal anschauen villeicht bringt dich dies weiter


Bearbeitung von Pablo:

Bitte, benutze die CPP Tags selber


Dieser Post wurde am 09.08.2004 um 15:48 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.08.2004, 11:17 Uhr
virtual
Sexiest Bit alive
(Operator)


@pin
Oje, das ist aber ein komischer Code.

@werner
Probier Deinen getchar ansatz doch einfach mit fgetc an Stelle von getchar.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.08.2004, 11:21 Uhr
pin



@virtual
echt sieht er nur schlimm aus oder ist er schlimm.
na ja ist aber auch egal hauptsache problem versucht zu lösen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.08.2004, 11:28 Uhr
virtual
Sexiest Bit alive
(Operator)


@pin
Naja, es kommt halt drauf an, wie man es sieht. Der Ganze Code ist halt eine Endlosschleife für jede nicht leere Datei... Vermutlich kann man es dadurch etwas hinbiegen, indem man das fscanf an die richtige Stelle (nämlich in die Schleife) verschiebt. Am besten läßt man es aber auch ganz weg und ersetzt es gleich durhc fegtc:

C++:
int c;
FILE* fp;
int counter;
int line = 0;
/* Datei öffnen usw... */
...
while((c=fgetc(fp))!=EOF) {
    switch(c)
    {
    case '\n':
         printf("Es gibt %d \"/\" Zeichen in Zeile %d", counter, ++line);
         counter = 0;
         break;
    case '/':
         ++counter;
         break;
    }
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.08.2004, 11:32 Uhr
pin



@virtual
Ne wenn die Datei leer wäre (beim ersten Durchlauf) würde die die Schleife direkt bei
while(!feof(fp)) und da bei jedem durchlauf erst beim ende eingelesen wird wird diese überprüfung immer stattfinden so wäre dies keine Endlosschleife müsste doch stimmen oder nicht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.08.2004, 11:50 Uhr
virtual
Sexiest Bit alive
(Operator)


Ach, ich habe das fscanf am Ende der Schleife übersehen... Sorry. Dennoch:
1. fscanf durch fgetc würde ich schon ersetzen, da letzters meßbar schneller geht.
2. Diese Konstruktion hier:

C++:
if(c == '\n')
{
...
}
else if (c != '\n' && c == 47)
...


Ist zumindestens unübersichtlich: wenn c==47 ist (Ich nehme mal an, daß 47=='/' ist), dann kann es eh niemals =='\n' sein; also letztlich:

C++:
if(c == '\n')
{
...
}
else if (c == 47)
...


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.08.2004, 11:55 Uhr
pin



ja stimmt da hast natürlich recht denkfehler.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: