Anzahl Zeichen eine Zeile herausfinden.
Hallo zusammen,
ich benötige eine Funktion mit der ich ermitteln kann wieviel Zeichen in einer Zeile sind. Da ich gerade einen Hänger habe und nicht weiterkomme möchte ich hier fragen.
Meine While-Schleife:
Diese liet von der Eingabe(stdin) eine Anzahl von Zeichen ein, die Anzahl der Zeichen die eingelesen werden, wird durch "C_value+1" bestimmt. Maximal ließt diese Schleife jeweils bis zu einem Newline oder EOF.
Nun möchte ich herausfinden wieviele Zeichen die Zeile tatsächlich hat.
In Prinzip möchte ich es einfach irgndwie anstellen womit ich abfragen kann wieviele Zeichen die Zeile tatsächlich hat, sodass ich diese Abfrage machen kann:
.
Vielen Dank
Greeze raphidue
ich benötige eine Funktion mit der ich ermitteln kann wieviel Zeichen in einer Zeile sind. Da ich gerade einen Hänger habe und nicht weiterkomme möchte ich hier fragen.
Meine While-Schleife:
while (fgets(current_line, C_value + 1, stdin) != NULL)
Nun möchte ich herausfinden wieviele Zeichen die Zeile tatsächlich hat.
In Prinzip möchte ich es einfach irgndwie anstellen womit ich abfragen kann wieviele Zeichen die Zeile tatsächlich hat, sodass ich diese Abfrage machen kann:
if(C_value < ANZAHLZEICHENDERZEILE)
Vielen Dank
Greeze raphidue
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 186305
Url: https://administrator.de/contentid/186305
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo raphidue
Folgendes Beispiel:
Eingelesen wird mit der getline() Funktion und die Länge des Strings wird mit der Funktion size() ausgelesen.
Löst das vieleicht dein Problem?
Kaioshin
Folgendes Beispiel:
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
cout << "Zeile eingeben: ";
getline(cin, input);
cout << "Länge: " << input.size() << endl;
return 0;
}
Eingelesen wird mit der getline() Funktion und die Länge des Strings wird mit der Funktion size() ausgelesen.
Löst das vieleicht dein Problem?
Kaioshin
Hallo raphidue,
da du mit fgets() ja gerade dabei bist eine Zeile aus dem Filestream einzulesen, kannst du nicht vorher schon wissen wie lang die Zeile ist.
Da die Anzahl der eingelesenen Zeichen vom Typ
Anderer Ansatz:
read line from file without knowing the line length
Grüße
rubberman
da du mit fgets() ja gerade dabei bist eine Zeile aus dem Filestream einzulesen, kannst du nicht vorher schon wissen wie lang die Zeile ist.
Da die Anzahl der eingelesenen Zeichen vom Typ
int
ist (siehe Funktionsreferenz), kannst du ein Buffer-Array der Länge INT_MAX
(limits.h) anlegen.Anderer Ansatz:
read line from file without knowing the line length
Grüße
rubberman
Hallo raphidue,
ich glaube ich hab's verstanden. Der stdin Buffer wird weiter ausgelesen ...
Teste mal Folgendes:
Grüße
rubberman
<edit: Buffergröße korrigiert, auf getc() umgeschwenkt />
ich glaube ich hab's verstanden. Der stdin Buffer wird weiter ausgelesen ...
Teste mal Folgendes:
int main(void)
{
int C_value = 3;
char current_line[C_value + 1];
int ch = 0;
while (fgets(current_line, C_value + 1, stdin) != NULL)
{
if(current_line[strlen(current_line) - 1] == '\n')
current_line[strlen(current_line) - 1] = '\0';
else
while((ch = getc(stdin)) != '\n' && ch != EOF) continue;
printf("___%s___\n", current_line);
}
return 0;
}
Grüße
rubberman
<edit: Buffergröße korrigiert, auf getc() umgeschwenkt />
Hallo raphidue,
deine Lösung hat mindestens einen Punkt, bei dem das Ganze nicht so funktioniert, wie du willst.
Aber wenn die Eingabe genau
Grüße
rubberman
deine Lösung hat mindestens einen Punkt, bei dem das Ganze nicht so funktioniert, wie du willst.
fgets()
liest das abschließende '\n'
(Enter) mit in das Array. Somit hast du also immer das '\n'
in der Variable, wenn die Eingabe kürzer als C_value
ist. Wenn das kein Problem darstellt, OK.Aber wenn die Eingabe genau
C_value - 1
lang ist, dann kommt das '\n'
als letztes Element im Array ('\0'
mal außen vor gelassen). strlen()
spuckt dir also C_value
als Länge aus. Somit kommt getchar()
ins Spiel und wartet auf das nächste '\n'
oder EOF
. Das kommt aber erst mit der nächsten Eingabe, die somit komplett ignoriert wird.Grüße
rubberman