Problemi funzione di input controllo e visualizzazione

di il
3 risposte

Problemi funzione di input controllo e visualizzazione

Ho scritto questo codice che acquisisce 11 caratteri controlla la lunghezza e se è maggiore di 10 permette di inserire nuovamente il nome.
Non riesco a capire perchè per visualizzare il primo nome devo per forza copiarlo in un altro array.
aiutatemi per favore
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {

	int lunghezza=0;
	char name1[11];
	char name2[11];
	char name[11];
	int esito=1;

	while(esito==1){
		printf("inserisci primo nickname\n");
		scanf("%11s",name1);
		fflush(stdin);
		strcpy(name,name1);
		lunghezza=strlen(name1);

		esito=1;
		if (lunghezza>10){
			printf("ERRORE INSERIMENTO\n");

			printf("nickname inserito troppo lungo\n");

			printf("riprova, inserire nome di massimo 10 caratteri\n");
			esito=1;
		}
		else {
			printf("NICKNAME INSERITO CORRETTAMENTE\n");
					esito=0;
		}

	}
	esito=1;
	while(esito==1){
			printf("inserisci secondo nickname\n");
			scanf("%11s",name2);
			fflush(stdin);
			lunghezza=strlen(name2);

			esito=1;
			if (lunghezza>10){
				printf("ERRORE INSERIMENTO\n");
				printf("nickname inserito troppo lungo\n");

				printf("riprova\n");
				esito=1;
			}
			else {
				printf("NICKNAME INSERITO CORRETTAMENTE\n");
						esito=0;
			}



		}

	printf(" PLAYER1:   %s\n",name);
	printf(" PLAYER2:   %s\n",name2);
	system ("PAUSE");
	return EXIT_SUCCESS;

}

3 Risposte

  • Re: Problemi funzione di input controllo e visualizzazione

    Prima cosa la scanf non permette di specificare la lunghezza delle stinga ne formato e in ogni caso un array di 11 caratteri può contenere solamente 10 caratteri più il terminatore di stringa..

    Seconda cosa
    
    fflush(stdin);
    
    è un errore: non si possono "flushare" gli stream di input, solo gli output (stdout, stderr)
  • Re: Problemi funzione di input controllo e visualizzazione

    LPs ha scritto:


    Prima cosa la scanf non permette di specificare la lunghezza delle stinga ne formato e in ogni caso un array di 11 caratteri può contenere solamente 10 caratteri più il terminatore di stringa..

    Seconda cosa
    
    fflush(stdin);
    
    è un errore: non si possono "flushare" gli stream di input, solo gli output (stdout, stderr)

    ho risolto ho dichiarato l' array di 12. grazie per questo.
    la scanf e la fflush sono corretti.
  • Re: Problemi funzione di input controllo e visualizzazione

    supervip97 ha scritto:


    LPs ha scritto:


    Prima cosa la scanf non permette di specificare la lunghezza delle stinga ne formato e in ogni caso un array di 11 caratteri può contenere solamente 10 caratteri più il terminatore di stringa..

    Seconda cosa
    
    fflush(stdin);
    
    è un errore: non si possono "flushare" gli stream di input, solo gli output (stdout, stderr)

    ho risolto ho dichiarato l' array di 12. grazie per questo.
    la scanf e la fflush sono corretti.
    Giusto per essere chiari fflush(stdin) è sbagliato e basta.... giusto per dati un riferimento allo [url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf]standard C[7url]

    7.21.5.2 The fflush function
    Synopsis
    1 #include <stdio.h>
    int fflush(FILE *stream);
    Description
    2 If stream points to an output stream or an update stream in which the most recent
    operation was not input, the fflush function causes any unwritten data for that stream
    to be delivered to the host environment to be written to the file; otherwise, the behavior is
    undefined.
Devi accedere o registrarti per scrivere nel forum
3 risposte