Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
#include <stdio.h>
int main (void)
{
int in, cen, fin;
printf ("Inserisci il numero di telefono nella forma (xxx) xxx-xxxx: ");
scanf("(%d)%d-%d", &in, &cen, &fin);
printf ("Il numero è: %d.%d.%d\n", in, cen, fin);
return 0;
}
Non credo sia quello perché io ho provato sia con che senza e funziona lo stessoManca lo spazio dopo la parentesi nella chiamata a scanf.
#include <stdio.h>
#define MAXLEN 32
int main(void) {
char input[MAXLEN];
printf("Inserisci il numero: ");
fgets(input, MAXLEN, stdin);
char output[MAXLEN];
for (int i = 0, k = 0; input[i] != '\0'; i++) {
if ('0' > input[i] || input[i] > '9')
continue;
output[k++] = input[i];
if (k == 3 || k == 7)
output[k++] = '.';
}
printf("Numero inserito: %s\n", output);
return 0;
}
Sono nuovo... non conosco questi metodiIo lo avrei risolto alla vecchia maniera, facendo il parsing a mano. Con la scanf è garantito che prima o poi ci si fa male.
C:#include <stdio.h> #define MAXLEN 32 int main(void) { char input[MAXLEN]; printf("Inserisci il numero: "); fgets(input, MAXLEN, stdin); char output[MAXLEN]; for (int i = 0, k = 0; input[i] != '\0'; i++) { if ('0' > input[i] || input[i] > '9') continue; output[k++] = input[i]; if (k == 3 || k == 7) output[k++] = '.'; } printf("Numero inserito: %s\n", output); return 0; }
Hai provato senza le tonde attorno ai numeri ? Intendo vedo che hai messo in input (404) (113-123) prova (404) 123-123Io proprio non capisco cosa c'è di sbagliato...
Visto che stava seguendo l’esempio di un manuale e sta studiando la base base mi sa che se lo vuoi far passare da quella versione a questa ti tocca spiegargli ogni passaggio sennò non capisce nullaIo lo avrei risolto alla vecchia maniera, facendo il parsing a mano. Con la scanf è garantito che prima o poi ci si fa male.
C:#include <stdio.h> #define MAXLEN 32 int main(void) { char input[MAXLEN]; printf("Inserisci il numero: "); fgets(input, MAXLEN, stdin); char output[MAXLEN]; for (int i = 0, k = 0; input[i] != '\0'; i++) { if ('0' > input[i] || input[i] > '9') continue; output[k++] = input[i]; if (k == 3 || k == 7) output[k++] = '.'; } printf("Numero inserito: %s\n", output); return 0; }
@pexeq: hai scritto (404) (817-6900) invece di (404) 817-6900. Le parentesi in più non vanno bene nel tuo programma.
Si hai ragione, ho sostituito lo screen con quello corretto; ma anche in tal caso nienteIo lo avrei risolto alla vecchia maniera, facendo il parsing a mano. Con la scanf è garantito che prima o poi ci si fa male.
C:#include <stdio.h> #define MAXLEN 32 int main(void) { char input[MAXLEN]; printf("Inserisci il numero: "); fgets(input, MAXLEN, stdin); char output[MAXLEN]; for (int i = 0, k = 0; input[i] != '\0'; i++) { if ('0' > input[i] || input[i] > '9') continue; output[k++] = input[i]; if (k == 3 || k == 7) output[k++] = '.'; } printf("Numero inserito: %s\n", output); return 0; }
@pexeq: hai scritto (404) (817-6900) invece di (404) 817-6900. Le parentesi in più non vanno bene nel tuo programma.
Hai ragione infatti, la foto l'ho cambiata ahahh; ma anche in tal caso niente;Hai provato senza le tonde attorno ai numeri ? Intendo vedo che hai messo in input (404) (113-123) prova (404) 123-123
Edit: o hai cambiato foto allegata o mi drogo comunque boh non vedo nulla di strano aiuto ahah
Messaggio unito automaticamente:
Visto che stava seguendo l’esempio di un manuale e sta studiando la base base mi sa che se lo vuoi far passare da quella versione a questa ti tocca spiegargli ogni passaggio sennò non capisce nulla
#include <stdio.h>
// La costante MAXLEN vale 32; ovvero, ogni volta che scrivo MAXLEN è come se
// stessi scrivendo 32.
#define MAXLEN 32
int main(void) {
char input[MAXLEN]; // Definisco una stringa di (al più) MAXLEN caratteri.
printf("Inserisci il numero: "); // Stampo un messaggio a schermo: "Inserisci il numero: ".
// Voglio leggere una stringa (il numero di telefono) che potenzialmente
// potrebbe contenere degli spazi. Al posto di usare scanf che, se non usata
// bene, da problemi con gli spazi, preferisco usare fgets.
//
// La funzione fgets ha tre parametri:
// 1) dove memorizzare la stringa che vado a leggere (nella variabile input);
// 2) quanti caratteri (al massimo) devo leggere (non più di MAXLEN = 32); e
// 3) da dove devo leggere questo input (da stdin).
//
// Con "stdin" vado ad indicare un posto speciale chiamato standard input
// che sarebbe il posto (rimango sul generico) dove l'utente scrive.
fgets(input, MAXLEN, stdin);
char output[MAXLEN]; // Definisco un'altra stringa di (al più) MAXLEN caratteri.
for (int i = 0, k = 0; input[i] != '\0'; i++) { // Per ogni carattere dato in input:
if ('0' > input[i] || input[i] > '9') { // se il carattere non è un numero:
//-------------------------------------------
// QUESTO RIGA È PER DEBUGGARE IL TUO CODICE
// AI FINI DELL'ESERCIZIO SI PUÒ RIMUOVERE.
printf("DEBUG: %x => %c\n", input[i], input[i]);
//-------------------------------------------
continue; // passa al carattere successivo
}
// Questa parte di codice viene eseguita solo quando non entriamo
// nell'if precedente. Quindi, sappiamo che input[i] contine una cifra
// (i.e., un numero da '0' a '9').
output[k++] = input[i]; // copia il carattere nella k-esima posizione di output, poi incrementa k
if (k == 3 || k == 7) // se k è uguale a 3 oppure è uguale a 7:
output[k++] = '.'; // copia il '.' nella k-esima posizione di output, poi incrementa k
// Perché stiamo controllando se k è uguale a 3 oppure a 7? Considera il
// numero 404.817.6900, in che posizione abbiamo messo il '.'?
//
// 404.817.6900
// ^ ^
// 3 7
//
// Il primo è in posizione 3 e il secondo in posizione 7.
}
printf("Numero inserito: %s\n", output); // Stampo a schermo il risultato.
return 0; // Esco dal programma.
}
Hai provato ad eseguire il tuo programma dal terminale?Ho notato che in un compilatore online e se copio il numero da una parte e lo incollo sul mio di compilatore, il codice funziona perfettamente;