www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Softwaretechnik und Programmierung" - Zeichenketten
Zeichenketten < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Zeichenketten: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 00:33 Di 06.03.2007
Autor: dicentra

n'abend, wollte mal verschiedene methoden zum einlesen von strings anwenden. ergebnis is untenstehend. meine frage ist nun warum funkt dat prog nich? problem bei der ausführung is, dass die letzte funktion (f_fgets) übersprungen wird. es kommt zwar noch die ausgabe wo zur zeicheneingabe gebeten wird, dann aber is schluss. also wird nicht übersprungen sondern die eingabe kann nicht gemacht werden.
ferner frag ich mich, warum bei fgets, wenn ich es direkt nach den ersten beiden funktionen aufrufe, die scanf-funktion überspring, dann funkt es, 9 zeichen ausgegeben werden, wo doch zwei zeichen durch fgets angehängt werden. ein newlinezeichen und das terminierende nullbyte, müssten also eigentlich nur 8 zeichen sein, oder?


#include <stdio.h>
#include <conio.h>   // für getch
#include <stdlib.h>  // für fgets
#define MAX 10


/*****
* FUNKTION MIT GETCH
**********************/
void f_getch (){
char a[MAX];int i;

[mm] printf("\n\nGib [/mm] 10 Zeichen ein (getch): ");
for (i=0;i<MAX;i++)
a[i]=getch();

[mm] printf("\n\n");//Deine [/mm] eingegebenen Zeichen: ");
for (i=0;i<MAX;i++)
printf("%c",a[i]);

printf("-----");

}


/*****
* FUNKTION MIT GETCHE
***********************/
/* Wie oben nur mit 'getche'm mit Echo */
void f_getche (){
char b[MAX];int i;

[mm] printf("\n\n\nGib [/mm] 10 Zeichen ein (getche): ");
for (i=0;i<MAX;i++)
b[i]=getche();

[mm] printf("\n\nDeine [/mm] eingegebenen Zeichen: ");
for (i=0;i<MAX;i++)
printf("%c",b[i]);

printf("-----");
}


/*****
* FUNKTION MIT SCANF
*********************/
void f_scanf(){
   char c[MAX];

   [mm] printf("\n\n\nGib [/mm] Zeichen ein (scanf): ");
   scanf("%s",c);  // pufferüberlauf problem space
   printf("%s",c);
}


/*****
* FUNKTION MIT FGETS
*********************/
void f_fgets(){
   char d[MAX];

   [mm] printf("\n\n\nGib [/mm] 10 Zeichen ein (fgets): ");
   fgets(d, MAX, stdin);
   printf("%s",d);

   [mm] printf("-----\n\n\n"); [/mm]
}


/*****
* HAUPTFUNKTION
*****************/
int main(){
f_getch();  // ohne Echo auf dem Bildschirm
f_getche(); // mit Echo auf dem Bildschirm 'getchE'
f_scanf();  //
f_fgets();  // filegetstring
return 0;
}

        
Bezug
Zeichenketten: Antwort
Status: (Antwort) fertig Status 
Datum: 12:02 Di 06.03.2007
Autor: Marc

Hallo,

> n'abend, wollte mal verschiedene methoden zum einlesen von
> strings anwenden. ergebnis is untenstehend. meine frage ist
> nun warum funkt dat prog nich? problem bei der ausführung
> is, dass die letzte funktion (f_fgets) übersprungen wird.
> es kommt zwar noch die ausgabe wo zur zeicheneingabe
> gebeten wird, dann aber is schluss. also wird nicht
> übersprungen sondern die eingabe kann nicht gemacht
> werden.

Meine Vermutung ist, dass der Eingabepuffer nach Beendigung von scanf nicht leer ist, sondern z.B. noch die Whitespaces enthält, die zur Beendigung der Eingabe bei scanf geführt haben. Diese Zeichen führen dann beim anschließenden Aufruf von fgets direkt zur Beendigung (sozusagen eine leere Eingabe). Die Lösung sollte also sein, den Eingabepuffer nach Aufruf von scanf zu leeren.

>  ferner frag ich mich, warum bei fgets, wenn ich es direkt
> nach den ersten beiden funktionen aufrufe, die
> scanf-funktion überspring, dann funkt es, 9 zeichen
> ausgegeben werden, wo doch zwei zeichen durch fgets
> angehängt werden. ein newlinezeichen und das terminierende
> nullbyte, müssten also eigentlich nur 8 zeichen sein,
> oder?

Soweit ich es verstanden habe, liest fgets 9 Zeichen ein, inklusive dem Newlinezeichen. Dann hängt es ein Nullbyte an, so dass der Speicherbereich von 10 Zeichen nicht überschritten wird. Die Längenangabe enthält aber das nicht Nullbyte, also ist der String 9 Zeichen lang (das Array, in dem er steht, ist aber 10 Zeichen lang).

Viele Grüße,
Marc

Bezug
        
Bezug
Zeichenketten: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 01:20 Mi 21.03.2007
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de