Problem mit fgets() in c

maltor

Mitglied
Ich möchte mit fgets() eine Benutzereingabe (ein Name) einlesen.
An dieser Stelle [printf("Bitte geben sie den Namen ein\n")] im Programm. Die Zeichen werden in den Puffer char buff [12] gespeichert (oder sollen es).

Aber in der for Schleife in dem case 1 wird nichts ausgeben. Das ist mein erstes Problem. Nun das andere die Funktion fgets() speichert doch '\n' newline diese möchte ich entfernen, das sollte dann nicht mehr in den Array buff stehen.

Hier nun ein Ausschnitt meines Quelltextes.


Code:
#include<stdlib.h>
#include<stdio.h>

typedef struct data_record { //Datensatz
   char * first_name;
   char * surname;
   char  nation[4];
   char  time[12];
   int   key;
   struct data_record * next;
}elem;

int main()
{
	int uChoice=0;
	char buff [12];
	int i;
	
	while (uChoice!=5)// Das Programm wird beendet wenn der Benutzer 5 eingiebt
	{
	
		// Ausgabe der Wahlmöglichkeiten des Benutzers
		if (uChoice==0)
		{
		printf("\nBitte wählen Sie aus!\n1. Eingabe eines neuen Datensatzes\n2. Disqualifikation eines Spielers\n3. Abspeichern der Ergebnisliste\n4. Laden der Ergebnisliste\n5. Beenden (aber wer will das schon)\n");
		scanf("%i", &uChoice);	
		}
		// Die gewünschte Aktion des Benutzers ausführen
		switch (uChoice)
		{
			//	Eingabe eines neuen Datensatzes	
			case 1:{
							printf("Bitte geben sie den Namen ein\n");
							fgets(buff,sizeof(buff), stdin); 
							for  (i = 0;i< 10;i++)
							 {printf("%i",3);}
							 uChoice = 10;
				
							
						}
 
maltor hat gesagt.:
Ich möchte mit fgets() eine Benutzereingabe (ein Name) einlesen.
An dieser Stelle [printf("Bitte geben sie den Namen ein\n")] im Programm. Die Zeichen werden in den Puffer char buff [12] gespeichert (oder sollen es).

Aber in der for Schleife in dem case 1 wird nichts ausgeben. Das ist mein erstes Problem.
Ein/Ausgabe in C sind (zeilenweise) gepuffert. Es wird keine Ausgabe geben wenn du nicht entweder ein \n ausgibst oder fflush(stdout) aufrufst.
maltor hat gesagt.:
Nun das andere die Funktion fgets() speichert doch '\n' newline diese möchte ich entfernen, das sollte dann nicht mehr in den Array buff stehen.
C:
char *nl = strrchr(buff, '\n');
if (nl != NULL) *nl = '\0';

Du solltest übrigens immer prüfen ob auch etwas eingelesen wurde. Wenn nicht gibt die Funktion fgets NULL zurück.

Gruß
 
Wenn ich nun hier

Code:
      printf("Bitte geben sie den Namen ein\n");
fgets(buff,sizeof(buff), stdin);

zu dieser Eingabe komme, wie kann ich die Eingabe bestätigen mit return geht das nicht, ich komme aus der Eingabe nicht herraus.
 
Mach mal noch explizit ein fflush(stdout) nach dem printf Aufruf. Ansonsten funktioniert es bei mir aber.

Gruß
 
Zurück