Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    25

    [C]Acquisizione matrice e ciclo while

    Ciao a tutti,
    dovrei realizzare un programma che legga una stringa di caratteri (che contenga anche spazi) e che ritorni a video l'elenco delle parole immesse (visto che in generale la stringa puo' contenere spazi e quindi essere composta da piu' parole) con accanto il numero di caratteri che le compongono.
    Ho risolto in questo modo:
    codice:
    #include<stdio.h>
    #define MAX 50
    void leggi();
    void conta();
    void stampa();
    char nome[MAX];
    char vettore[MAX][MAX];
    int cont[MAX];
    int h,k;
    void main()
    {leggi();
    conta();
    stampa();
    system("PAUSE");}
    
    void leggi()
    {int i,j;
    printf("Inserire nome(massimo 50 caratteri)");
    fgets(nome,50,stdin);
    i=0;
    j=0;
    k=0;
    h=0;
    while(nome[i]!='\0')
    {if(nome[i]!=' ')
    {vettore[j][k]=nome[i];
    k++;}
    else 
    {vettore[j][k]='\0';
    j++;h++;k=0;}
    i++;}
    vettore[j][k]='\0';
    vettore[j][k-1]='\0';}
    
    void conta()
    {int i,j;
    for(i=0;i<=h;i++)
    {cont[i]=0;
    j=0;
    while(vettore[i][j]!='\0')
    {cont[i]++;j++;}
    }}
    
    void stampa()
    {int i,j;
    for(i=0;i<=h;i++)
    {for(j=0;j<cont[i];j++)
    {printf("%c",vettore[i][j]);}
    printf("     numero di caratteri:%d\n",cont[i]);
    }}
    Tuttavia non mi spiego perchè devo inserire:

    codice:
    vettore[j][k-1]='\0';
    il problema è nella funzione leggi: se non inserisco l'assegnazione soprastante infatti per l'ultima parola (ovvero in corrispondenza dell'ultima riga della matrice) k viene incrementato una volta in piu' del dovuto, e a quanto ho capito nella cella di troppo della matrice viene messo un bel \n.....
    come mai??? cioè secondo me in vettore[j][k-1] dovrebbe esserci l'ultima lettera della parola in questione... e invece c'è il \n, che mi crea problemi, e così devo inserirgli io il terminatore.

    grazie.

  2. #2
    Non so, forse il problema potrebbe essere la fgets(), non è una funzione sicura, sottolineo che non ne ho la certezza ma magari legge anche il '\n' dell'invio digitato dall'utente dopo l'inserimento...
    Per leggere la stringa nome io farei:

    codice:
    char c;
    
    do
    {
           c = getchar ();
           if (c != 10)
           {
                  nome[i] = c;
                  i++;
           }
    }
    while (c != 10);
    nome[i] = '\0';
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    scusate lakius hai pm!.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    25
    Ciao !!Si anche secondo me è la fgets...

    grazie ciao!

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Originariamente inviato da bikerinside
    scusate lakius hai pm!.
    Scusami, ma non mi pare assolutamente una buona idea intervenire in discussioni altrui, senza fornire alcuna soluzione valida al problema indicato, per segnalare a un altro utente che ha un messaggio privato (dato che il forum già provvede a questo).

    Vediamo di non abusare del mezzo per le proprie esigenze del tutto personali...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    scusatemi, non sapevo se al'utente arrivasse la notifica di un messaggio privato, dato che a me non lo fa.

    scusatemi.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.