Problema con array di tipo char

di il
2 risposte

Problema con array di tipo char

Ciao ragazzi, sto studiando gli array e ho un problema con un codice. Da quello che ho capito su gli array, imposto il tipo (int, char ecc...), imposto una variabile, e per ciascun indice assegno un valore; fin quando si è trattato di array di tipo int non ho avuto grosse difficoltà, ma questo array di tipo char non lo capisco; il codice è questo:

#include<iostream>
using std::cin;
using std::cout;
using std::endl;

int main()
{
char stringa[12] = {0};

cout<<"scrivi \"hello there\": ";
cin>>stringa;

cout<<"\nstringa e': "<<stringa; //visualizza solo "hello"

cin>>stringa;
cout<<"\nstringa e': "<<stringa; //visualizza solo "there"

system("pause");
}

lasciando 12 spazi in memoria, pensavo che l'array stringa avrebbe preso tutti i caratteri dell'input "hello there" (compreso il carattere nullo \0) e li assegnasse ai sui indici; per fare una ulteriore verifica ho inserito un ciclo for per ricevere il valore di un dato indice, ma a seconda di dove metta il for, dopo il primo o il secondo cin>>, visualizza solo "hello" o "there", lasciando i restanti indici a 0

for(int i = 0; i<12; i++)
cout<<"char["<<i<<"]"<<" "<<stringa<<endl;

sto usando visual c++ 2008 express edition come compilatore.

grazie, ciao

2 Risposte

  • Re: Problema con array di tipo char

    Ciao

    Io non sono esperto di C++, però credo proprio che sia un "problema" di
    cin>>stringa;
    
    nel senso lui divide le stringe quando incontra uno spazio quindi dovresti fare una cosa del genere
    
    cin>>stringa;
    strcpy(stringa,cin);
    
    o comunque un operazione simile.
  • Re: Problema con array di tipo char

    Il problema sta nel fatto che lo spazio viene interpretato come valore tappo (\0), come diceva Cesco90;

    Un metodo per ovviare questo inconveniente, volendo inserire una stringa che contenga anche spazi, può essere la lettura da tastiera carattere per carattere (compresi gli spazi e caratteri speciali) accodando un valore tappo "\0" in coda all'array:
    
    pos = -1;
    do
             pos++;
             s[pos] = getchar();
    while (s[pos] == '\n');
    s[pos] = '\0';
    
    la getchar legge il carattere da tastiera e lo mette nella posizione (pos) puntata dell'array; quando legge INVIO (\n) inserisce il carattere tappo '\0'.
Devi accedere o registrarti per scrivere nel forum
2 risposte