matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

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:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenSoftwaretechnik und ProgrammierungZeichenketten
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
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.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]