Re: Trasformare una sequenza di controllo

di Anonimizzato28411 il
32 risposte

#include <stdio.h>
#include <string.h>
void read_string(char s[], unsigned int dim);
void invert_escape(char s[], char t[]);
void main()
{
	int i, j;
	char t[20];
	char s[45];
	read_string(t, 20);
	invert_escape(s, t);
	printf("%s", s);

}

void read_string(char s[], unsigned int dim)
{
	int c;
	unsigned int i;
	for (i = 0; i < dim - 1 && (c = getchar()) != EOF; ++i)
	{
		s[i] = c;

	}
	s[i] = '\0';
}

void invert_escape(char s[], char t[])
{
	int i, j;
	for (j = i = 0; i < strlen(t) - 1; i++) {
		if (t[i] == '\\') {
			if (t[++i] == 't') s[j++] = '\t';
		    else if (t[++i] == 'n') s[j++] = '\n';
		}
		else s[j++] = t[i];
	}
	s[j] = '\0';

}
Ho cambiato la funzione escape al contrario, converte una sequenza di controllo nei caratteri corrispondenti ma funziona solo con \t e non con \n.
Qualcuno sa dirmi perchè?

32 Risposte

  • Qual è la differenza tra ++i e i+1 ?
    Sicuramente l'hai studiato... fa parte delle basi
  • Allora ++i fa prima l' incremento poi usa il valore di i invece i+1 incrementa i di 1 e basta credo...
  • Vedi se queste informazioni ti possono bastare
  • Il problema è solo negli incrementi?
  • Il problema è lì ... non ti serve postare ancora nel forum ... sbattici un po' la testa e ragiona ...
  • Solo con lo switch sono riuscito a farlo funzionare, con if-else if-else non riesco
  • Ho risolto con con switch come dice l' esercizio
    
    #include <stdio.h>
    #include <string.h>
    void read_string(char s[], unsigned int dim);
    void invert_escape(char s[], char t[]);
    void main()//converte una sequenza di controllo nei suoi caratteri corrispondenti
    {
    	int i, j;
    	char t[25];
    	char s[50];
    	read_string(t, 20);
    	invert_escape(s, t);
    	printf("%s", s);
    
    }
    
    void read_string(char s[], unsigned int dim)
    {
    	int c;
    	unsigned int i;
    	for (i = 0; i < dim - 1 && (c = getchar()) != EOF; ++i)
    	{
    		s[i] = c;
    
    	}
    	s[i] = '\0';
    }
    
    void invert_escape(char s[], char t[])
    {
    	int i, j;
    	for (j = i = 0; i < strlen(t) - 1; i++) {
    		switch (t[i])
    		{
    		case '\\':
    		case 't':
    			s[j++] = '\t';
    			break;
    		case 'n':
    			s[j++] = '\n';
    			break;
    		default:
    			s[j++] = t[i];
    			break;
    		}
    	}
    	s[j] = '\0';
    
    }
    
    
    
    [code]
  • E dici che hai risolto perché l'hai compilato e provato? Siamo alle solite ...
  • Scusa cos'è che non va bene adesso?
  • Ho semplicemente scritto

    ciao mondo

    Comunque non mi hai risposto e questo non va bene. Hai compilato? Hai provato?
  • Certo che ho compilato e provato sennò non direi a caso che funziona
  • Hai scritto

    ninna nanna

    e cosa restituisce?
  • Evero non me ne ero accorto
  • E che avevi provato?

    Comunque è un errore ovvio che si comprende a prima vista dal codice della funzione ...

    Continua a pensarci e PRIMA di dire che va bene, fai tutte le prove del caso ...
Devi accedere o registrarti per scrivere nel forum
32 risposte