Visualizza certe righe

di il
8 risposte

Visualizza certe righe

Esercizio: si scriva un programma che visualizzi tutte le righe in ingresso che superino gli 80 caratteri.

#include <stdio.h>
#define MAXLINE 1000
/*getline legge la riga succesiva del testo in ingresso;
deve segnalare l' eventuale fine del file (EOF)
deve restituire la lunghezza della riga letta o 0 se non vi sono altri dati in ingresso*/
int getline(char line[], int maxline);

int main()
{
	int len;		// lunghezza della riga corrente
	char line[MAXLINE];	// riga corrente
	while ((len = getline(line, MAXLINE)) > 10) {
		printf("%s", line);
	}
	/*printf("%d", len);
	printf("%s", line);*/

	return 0;

}

// getline: legge una riga in ingresso, la assegna a s, ne restituisce la lunghezza
int getline(char s[], int lim)
{
	int c, i;
	for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
		s[i] = c;
	if (c == '\n')
	{
		s[i] = c;
		++i;
	}
	s[i] = '\0';
	return i;

}
Secondo voi vabene come ho risolto questo esercizio o poteva essere fatto meglio?
Il programma visualizza la riga subito dopo che l' hai inserita se ha più di 10 caratteri ma ci sarebbe un modo per inserire prima tutte le righe e poi alla fine visualizzare soltanto quelle che hanno più di 10 caratteri?

8 Risposte

  • Re: Visualizza certe righe

    Alla fine di cosa? Come si dovrebbe individuare la fine dell'inserimento di tutte le righe?
  • Re: Visualizza certe righe

    Mi sono spiegato male...
    se scrivi una riga che ha più di dieci caratteri e schiacci invio te la fa visualizzare e poi ti fa immettere un' altra riga mentre io vorrei inserire una riga poi schiacciare invio ma non per visualizzare la riga (sempre se ha + di 10 caratteri) ma per immettere un' altra riga. Poi alla fine con ctrl+z visualizzare l' elenco delle righe con + di 10 caratteri. Perchè volendo credo si potrebbe fare anche cosi.
  • Re: Visualizza certe righe

    Ma scusa, perché non usi la getline() standard?
    Primo link trovato su google
    .
  • Re: Visualizza certe righe

    Mai vista...
  • Re: Visualizza certe righe

    Mi permette di fare quello che ho chiesto?
  • Re: Visualizza certe righe

    SuperManPC ha scritto:


    Poi alla fine con ctrl+z visualizzare l' elenco delle righe con + di 10 caratteri. Perchè volendo credo si potrebbe fare anche cosi.
    No

    Non sai a priori quante righe supereranno il limite
    Quindi non puoi dimensionare un array adeguato per conservarle
    A meno che tu non usi l'allocazione dinamica
    La conosci?
  • Re: Visualizza certe righe

    Buongiorno a tutti
    ho le risposte alle domande per le due discussioni gemelle iniziate da SuperManPC; la notte ha portato consiglio
    qui rispondo alla domanda: perché non usi la getline() standard

    perché il testo dell'esercizio vine dritto dritto dal K&R prima edizione inglese del 1978, temo che la funzione standard getline() non ci fosse ancora, e comunque non sarebbe adatta per l'altro esercizio, quello del post gemello
  • Re: Visualizza certe righe

    Ho capito, ecco perché il testo il codice è scritto in quel modo.

    Vabbé se vuoi un esempio moderno di getline
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAXLINE 10
    
    int main() {
        char buffer[MAXLINE + 1] = "";
        char * ptr = buffer;
        int size = sizeof(buffer);
        int caratteri;
        
        printf("Inserisci il testo: ");
        fflush(stdout); // forza scrittura output del terminale
        if((caratteri = getline(&ptr, &size, stdin)) > 0){
            printf("Hai inserito in totale %d caratteri\n", caratteri - 1); // tolgo il newline dal conteggio
            printf("Hai inserito il testo: %s", buffer);
        }
        else
            printf("Raggiunto limite del buffer! Testo inserito : %s\n", buffer);
        
        return 0;
    }
    
    @SuperManPC

    Vai pure avanti, l'IO da terminale in C non è il massimo della vita - ci ritorni dopo, intanto impara le altre cose più importanti
Devi accedere o registrarti per scrivere nel forum
8 risposte