www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 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
Weitere Fächer:

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 ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]