|
|||||||
|
|
|
![]() |
|
|
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: 2788
|
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: 16214
|
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: 16214
|
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: 16214
|
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: 2788
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:39.



















