Vai al contenuto

[C] stringa con spazi da input


-hide-

Messaggi raccomandati

Ciao ragazzi.

Ho bisogno di prendere una stringa da input e che possa contenere anche spazi. L'usatissimo e standard scanf mi sa che non è utile per questo utilizzo e quindi conviene seguire carattere per carattere. La funzione adatta dovrebbe essere getchar.

for (i=0;((ch=getchar()) == '\n') && (i<20);i++)
     n[i]=ch;
n[i]= '\0';

Questo a mio avviso dovrebbe essere la parte di codide adatta alla scrittura di stringhe con getchar. Ovviamente le variabili sono già state dichiarate prima.

Solo che non funziona. Dopo aver schiacciato invio mi salta molte istruzione successive.

Se è necessari posto tutto il codice.

MacBook 2.4 Ghz Intel Core 2 Duo con Bus frontside a 1.07 Ghz - 4 Gb 1067 Mhz DDR3 - NVIDIA GeForce 9400M

Link al commento
Condividi su altri siti

Ti ho fatto questo :ciao: Sul tuo c'è qualche imperfezione (i controlli del for vanno invertiti, l'input deve essere != da '\n' e non eguale ... ;))

#include <stdio.h>
int main (int argc, char *argv[]) {
       char strbckup[21];
       char chr = '\0';
       int i;
       for (i = 0; (i < 20) && ((chr=getchar()) != '\n'); i++)
               if (chr != '\b') strbckup[i] = chr;
       strbckup[i] = '\0';
       printf("%s\n", strbckup);
       return 0;
}

:ciao: spero ti possa essere utile!

MacBook 2Ghz with 2GB ram + iBook G4 1.2Gzh with 512MB ram

Link al commento
Condividi su altri siti

Non va comunque.

Ora posto tutto il codice dove ho modificato sola la prima istruzione utile con quello che tu mi hai appena consigliato.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ELEM 100
#define NCHAR 20

// Definizione della struttura
typedef struct {
                   char nome[NCHAR];
                   char cognome[NCHAR];
                   char telefono[NCHAR];
                   char citta[NCHAR];
              } account;

// Variabili globali
account rubrica[ELEM];
int num_account = 0;

// Dichiarazione delle funzioni
void InsContatto (char nom[], char cogn[], char tel[], char cit[]);
void ModContatto (char nom[], char cogn[]);
void Cancella (char nom[], char cogn[]);
void Visualizza (char nom[], char cogn[]);

int main()
{ //OPEN main
    short int scelta, i; /* per inserire la scelta del men˘ */
    char n[NCHAR]; /* per inserire il nome */
    char m[NCHAR]; /* per inserire il cognome */
    char c[NCHAR]; /* per inserire la citt‡ */
    char t[NCHAR]; /* per inserire il numero di telefono */
    char ch = '\0';
    for (;scelta!= 0;)
    { //OPEN for
         printf ("\nLorenzo Carnevale\n");
         printf ("Rubrica V 1.0\n\n");
         printf ("\t\t  INDEX\n");
         printf ("\t***************************\n");
         printf ("\t* 1 - Inserisci Contatto  *\n");
         printf ("\t* 2 - Modifica Contatto   *\n");
         printf ("\t* 3 - Cancella Contatto   *\n");
         printf ("\t* 4 - Visualizza Contatto *\n");
         printf ("\t*                         *\n");
         printf ("\t* 0 - Esci dal programma  *\n");
         printf ("\t***************************\n\n");
         printf ("Digita: ");
         scanf ("%hd", &scelta);
         switch (scelta)
         { //OPEN switch
                case 0: // Exit
                          printf ("\n\t\tGrazie per la scelta\n\n");
                          break;
                case 1: // Inserisci contatto
                          printf ("\nNome: ");
                          for (i=0;(i<20) && ((ch=getchar())!='\n');i++)
                              if (ch != '\b') n[i] = ch;
                          n[i] = '\0';
                          printf ("Cognome: ");
                          scanf ("%s", m);
                          printf ("Telefono: ");
                          scanf ("%s", t);
                          printf ("Citta': ");
                          scanf ("%s", c);
                          printf ("\n");
                          InsContatto(n,m,t,c);
                          break;
                case 2: // Modifica Contatto
                          printf ("\nNome: ");
                          scanf ("%s", n);
                          printf ("Cognome: ");
                          scanf ("%s", m);
                          ModContatto (n,m);
                          break;
                case 3: // Cancella
                          printf ("\nNome: ");
                          scanf ("%s", n);
                          printf ("Cognome: ");
                          scanf ("%s", m);
                          Cancella (n,m);
                          break;
                case 4: // Visualizza
                          printf ("\nNome: ");
                          scanf ("%s", n);
                          printf ("Cognome: ");
                          scanf ("%s", m);
                          Visualizza (n,m);
                          break;
         } //CLOSED switch
   } //CLOSED for
   return 0;
} //CLOSED main

// Definizione delle funzioni
void InsContatto (char nom[], char cogn[], char tel[], char cit[])
{ //OPEN InsContatto
    int i;
    if (num_account == ELEM)
    { //OPEN if
        printf ("Hai raggiunto il limite di contatti offerto\n\n");
        return;
    } //CLOSED if
    for (i=0; i<=num_account; i++)
    { //OPEN for
        if ((strcmp (nom,rubrica[i].nome)==0) && (strcmp (cogn,rubrica[i].cognome)==0))
        { //OPEN if
           printf ("Nome e Cognome utente esistono in memoria\n\n");
           return;
        } //CLOSED if
    } //CLOSED for
    strcpy (rubrica[num_account].nome,nom);
    strcpy (rubrica[num_account].cognome,cogn);
    strcpy (rubrica[num_account].telefono,tel);
    strcpy (rubrica[num_account].citta,cit);
    num_account++;
    return;
} //CLOSED InsContatto

void ModContatto (char nom[], char cogn[])
{ //OPEN ModContatto
    int i;
    for (i=0; i<=num_account; i++)
    { //OPEN for
        if ((strcmp (nom,rubrica[i].nome)!=0) && (strcmp (cogn,rubrica[i].cognome)!=0))
        { //OPEN if
           printf ("Il contatto non esiste");
           printf ("\n\n");
           return;
        } //CLOSED if
        else
        { //OPEN else
            printf("Nuovo Nome: ");
            scanf("%s", rubrica[i].nome);
            printf("Nuovo Cognome: ");
            scanf("%s", rubrica[i].cognome);
            printf("Nuovo Telefono: ");
            scanf("%s", rubrica[i].telefono);
            printf("Nuova Citta': ");
            scanf("%s", rubrica[i].citta);
            return;
        } //CLOSED else
    } //CLOSED for
} //CLOSED ModContatto

void Cancella (char nom[], char cogn[])
{ //OPEN cancella
    int i;
    for (i=0; i<=num_account; i++)
    { //OPEN for
        if ((strcmp (nom,rubrica[i].nome)!=0) && (strcmp (cogn,rubrica[i].cognome)!=0))
        { //OPEN if
           printf ("Il contatto non esiste");
           printf ("\n\n");
           return;
        } //CLOSED if
        else
        { //OPEN else
           rubrica[i].nome[0] ='\0';
           rubrica[i].cognome[0] ='\0';
           rubrica[i].telefono[0] ='\0';
           rubrica[i].citta[0] ='\0';
           return;
        } //CLOSED else
    } //CLOSED for
} //CLOSED Cancella

void Visualizza (char nom[], char cogn[])
{ //OPEN Visualizza
    int i;
    for (i=0; i<=num_account; i++)
    { //OPEN for
        if ((strcmp (nom,rubrica[i].nome)==0) && (strcmp (cogn,rubrica[i].cognome)==0))
        { //OPEN if
           printf ("Il contatto scelto e': \n");
           printf ("\n%s %s\n", rubrica[i].nome, rubrica[i].cognome);
           printf ("%s\n%s", rubrica[i].telefono, rubrica[i].citta);
           printf ("\n\n");
           return;
        } //CLOSED if
        else
        { //OPEN else
           printf ("Il contatto non esiste");
           printf ("\n\n");
           return;
        } //CLOSED else
    } //CLOSED for
} //CLOSED Visualizza

MacBook 2.4 Ghz Intel Core 2 Duo con Bus frontside a 1.07 Ghz - 4 Gb 1067 Mhz DDR3 - NVIDIA GeForce 9400M

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...