|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 1644
|
[C] parole separate da uno spazio
ho un problema: devo inserire da tastiera 2 parole separate da uno spazio e alla fine dare un'invio.
parolaSPAZIOparolaINVIO devo salvare in 2 variabili diverse le due parole. come posso fare? io pensavo di fare un readline e catturare tutta la riga in una variabile e poi in qualche modo separare le due parole riconoscendo lo spazio. qualcuno potrebbe scrivermi qualche riga di codice per risolvere il problema? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Basta usare due variabili nello scanf:
ES: scanf("%d%d",&var1,&var2); Ciaociao! PS: visto che ti ho aiutato clicca il link nella mia firma xfavore! |
![]() |
![]() |
![]() |
#3 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Sarà utile andarsi a riguardare il comportamento di scanf, che tra l'altro è spiegato molto bene sul K&R.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Per leggere, puoi usare la gets() (ti legge tutta la stringa, fino al new line), e poi, mediante strchr() trovi la posizione dello spazio. A questo punto, hai praticamente finito. Supponendo che la tua riga non sia piu' lunga di MAX_CHARS: Codice:
#define MAX_CHARS 80 // Lunghezza massima linea int main (void) { char linea[MAX_CHARS + 1]; char var1[MAX_CHARS + 1]; char var2[MAX_CHARS + 1]; char *p; // Legge la linea. Non puo' essere piu' lunga di MAX_CHARS printf ("Dammi la linea contenente le due parole\n"); gets (linea); p = strchr (linea, ' '); // Cerca lo spazio if (!p) { printf ("Le parole non sono separate da uno spazio!\n"); } else { *p = '\0'; // Sostituisco lo spazio col terminatore, separando le parole p++; strcpy (var1, linea); strcpy (var2, p); printf ("Prima parola: %s\n", var1); printf ("Seconda parola: %s\n", var2); } } High Flying Sottovento |
|
![]() |
![]() |
![]() |
#5 | ||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Abituatevi da subito a usare fgets. Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||
![]() |
![]() |
![]() |
#6 | ||
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Cosa intendi per "Abituatevi da subito"? Quote:
ho un problema: devo inserire da tastiera 2 parole separate da uno spazio e alla fine dare un'invio. Se la specifica fosse stata diversa, probabilmente si sarebbe dovuto cercare uno o piu' spazi/tab/segni di interpunzione/... |
||
![]() |
![]() |
![]() |
#7 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 1644
|
grazie sottovento! erano proprio le linee di codice di cui avevo bisogno!
un'ultimo aiuto: le 2 parole non possono essere più lunghe di 14 caratteri ciascuna. nel caso che una delle due superi questo limite deve dare un mess di errore. come faccio a contare le lettere? carattere per carattere oppure c'è una funzione che lo fa in automatico? |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Riprendendo il codice di prima: Codice:
... omissis ... else { *p = '\0'; // Sostituisco lo spazio col terminatore, separando le parole p++; strcpy (var1, linea); strcpy (var2, p); if (strlen(var1) > 14 || strlen(var2) > 14) { printf ("Almeno una delle due parole e' troppo lunga!\n"); // A seconda dell'utilizzo che vorrai fare delle parole, qui dovrai // mettere il codice che gestisce questo errore. } else { // Qui metterai invece la parte che utilizza le parole, poiche' soddisfano // i requisiti di lunghezza. Per prova, le stampo printf ("Prima parola: %s\n", var1); printf ("Seconda parola: %s\n", var2); } } Sottovento |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 1644
|
ecco come si chiamava: STRLEN!!! non me lo ricordavo più sono proprio arrugginito di c... grazie ancora di tutto!
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:57.