Esercizio su vettori di caratteri

di Anonimizzato28411 il
86 risposte

#include <stdio.h>
#define MAXLINE 1000 // massima lunghezza di una riga in input
/*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);
void copy(char to[], char from[]);

// 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)//condizioni riga
		s[i] = c;
	if (c == '\n')
	{
		s[i] = c;
		++i;
	}
	s[i] = '\0';
	return i;
} 

main()
{
	int len;		// lunghezza della riga corrente1
	int max;		// lunghezza massima riscontrata finora2
	char line[MAXLINE];	// riga corrente1
	char longest[MAXLINE]; // contiene la riga più lunga trovata2

	max = 0;
	while ((len = getline(line, MAXLINE)) > 0)
		if (len > max) {
			max = len; // lunghezza massima riscontrata finora = lunghezza della riga corrente
			copy(longest, line);
		}
	if (max > 0) // c' era almeno una riga in ingresso
		printf("%s", longest);
	return 0;
}

// copy: copia la stringa 'from' sulla stringa 'to'; assume che 'to' sia sufficientemente lunga
void copy(char to[], char from[])
{
	int i;

	i = 0;
	while ((to[i] = from[i]) != '\0')//("\0")-->questo carattere non fa parte del testo normale
		++i;
}
Ciao forum, potete darmi consigli per questo esercizio?:

si riveda la funzione main del programma presentato qua sopra, affinchè visualizzi correttamente la lunghezza di righe arbitrariamente lunghe, e ne mostri la maggior parte di testo possibile.

L' esercizio dice di rivedere la funzione main ma non capisco se c'è da aggiungere solo una condizione oppure una cosa più grande

86 Risposte

  • Qualcuno ha qualche idea in mente?
  • Non si capisce cosa si intenda con la frase "si riveda la funzione...." ... non è affatto chiara ...
  • Forse intende dire che se len è proprio uguale a MAXLINE e l'ultimo carattere non è il terminatore, allora bisogna richiamare nuovamente getline() e andare avanti a sommare tutti i len parziali fin quando non arrivi a un terminatore

    Comunque non è chiaro
  • Si anch'io non ho ben capito cosa si deve fare
  • La costante MAXLINE vale 1000 quindi una riga può essere al massimo di 1000 caratteri. Provate a mettere MAXLINE 100 per comodità, se una frase è di 150 caratteri ne stampa solo 100 perchè MAXLINE vale 100, questo esercizio chiede di modificare la main in modo che si riesca a visualizzare di quella riga tutti i 150 caratteri oppure più caratteri possibile. Provate il programma però prima altrimenti non si riesce a capire.
  • Credo che dice apposta 'si riveda la funzione main' per alzare il livello di difficoltà
  • No non si capisce proprio ... la tua spiegazione non ha senso
  • Devi fare in modo che le righe con più caratteri del massimo per riga(valore indicato da MAXLINE) vengono visualizzate con tutti i loro caratteri anche se MAXLINE ha un valore minore del numero di caratteri della riga.
  • Non puoi perché l'input e la copia non possono superare MAXLINE

    A meno che non rifai tutto con l'allocazione dinamica (i VLA non li prendi in considerazione)
  • Ma lo dice l' esercizio come non posso!?
  • Quello che dice l'esercizio è confuso
    Quello che dici tu pure... quindi? Forse bisogna qualche chiarimento in più
  • Quindi dovrei fare l' allocazione non in main ma nelle funzioni?
  • No, nel main
  • Bho allora abbandono l' esercizio tanto è confuso giusto?
Devi accedere o registrarti per scrivere nel forum
86 risposte