sto cercando di fare una routine di stampa che leggendo da file di testo un testo, lo stampi a video rispettando le dimensioni della console del C, e cioè 80x25 caratteri, però sto trovando molti problemi:
leggo un carattere alla volta, e memorizzo tutto nella variabile "parola", e quindi cerco di acquisire una parola alla volta e stamparla, cosi che se una parola poi alla fine della riga nn ci sta interamente, mando a capo e la stampo sulla nuova riga. però il programma non so perchè ma a volte mi spezza ancora le parole alla fine mandando a capo a metà parola e non mandandola a capo tutta intera.
ho provato a vedere quale può essere l'errore ma niente da fare . nn riesco a risolvere, il problema sta nel fatto che quando leggo da testo il carattere e lo memorizzo in ch, e poi faccio il controllo di cosa è ch con gli "if", molte volte me lo sballa, e mi vede ad esempio una "n" come un simbolo, pur avendola inserita all'interno del vettore "lettere", e cosi mi tronca le parole e ad esempio un seplice "signora" me lo vede come 3 parole divise in "si" "gnor" "a"... perchè?
facendo cosi tutto il lavoro del mandare a capo una parola intera se nn ci sta sulla riga diventa inutile siccome cmq nn mi vede le parole intere e quindi me le tronca cmq...

ecco il prog col file allegato per la prova:
http://rapidshare.com/files/79438391...olmes.rar.html



codice:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h>

main()
{
    FILE *c;
    char str[10000];//nn guardatela
    char ch;
    char parola[100];
    char spazio[14]={"          "};// faccio cosi perchè nn so come fare un char che significhi "spazio"... allora faccio controllare al programma se il simbolo sarà uguale a uno degli spazi contenuti in sto vettore
    char segnidiinterruzione[4]={',',';','!','?'};//non sono tutti ma tanto è per provare
    char altrisimboli[4]={'[',']','(',')'};//lo stesso
    char lettere[63]={'0','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','l','m','n','o','p','q','r','s','t','u','v','z','x','y','k','j','w','A','B','C','D','E','F','G','H','I','L','M','N','O','P','Q','R','S','T','U','V','Z','X','Y','W','J'};
    char var;
    int z=0;//indice per il ciclo
    int h=0;
    int lunghezza;//lunghezza stringa
    int ris;//nn guardatelo
    int y=0;//contatore delle righe passate
    int x=0;//contatore dei caratteri su una riga
    int MAX=76;//numero massimo di caratteri su una riga, vorrei mettere che scriva tra: 2 spazi prima di iniziare, e 2 spazi prima di finire la riga...,
    int band=0;
    int inizio=0;


    c = fopen("prologo1.txt", "r"); //apro il file
    while(!feof(c)) //ciclizzo fino a fine file
        {
        ch = fgetc(c);//piglio il carattere


        while(1)//ciclizzo infinito
          {
            z++; //aumento z di 1
            if (ch==lettere[z]) //se il carattere è la lettera a posizione z eseguo...
              {
                parola[h]=ch; // memorizzo il carattere in parola h
                h++; //aumento di 1 h
                break; //esco dal ciclo
              }

            if (ch==segnidiinterruzione[z]) //conmtrollo che ch sia un segno di interruzione
              {

                parola[h]=ch; // memorizzo ch in nella stringa parola, in posizione h
                h++; //incremento h di 1
                parola[h]='\0'; //termino la stringa
                band=1;
                break;
              }
            else if (ch==altrisimboli[z])
              {
                parola[h]=ch;
                h++;
                break;
              }
             if (z==3)//ho messo 3, ma potevo metter anche 4 o 5, siccome sono tutte posizioni della stringa dove c'è lo spazio
             {
             if (ch==spazio[z])//se ch è uno spazio
              {

                parola[h]=' ';
                h++;
                parola[h]='\0';//se c'è lo spazio la strigna è finita quindi la termino
                band=1;//pongo band=1 in modo che dopo possa stampare la stringa
                break;
              }
             }

          }
          if (band==1)//se la parola è finita
          {
          lunghezza=strlen(parola);//memorizzo il numero dei caratteri in lunghezza
          x=x+lunghezza;//sommo la lunghezza della stringa
          if (x>MAX)//se il numero di caratteri della parola è maggiore di MAX(numero massimo di caratteri che può contenere una riga)
          {
          printf("\n");//vado a capo
          printf("  ");
          x=0;//riazzero x
          x=x+lunghezza;//ripongo x uguale ad h, cioè i caratteri contenuti nella nuova riga
          y++;//aumento y che è la variabile che mi serve a contare quante righe son passate
          if (y==24)//se son 24 è finita la pagina, e vado "a capo" nell'altra...
          {
          var=getch();//lo metto per stoppare la schermata e permettere di leggere tutto
          y=0;
          system("cls");
          printf("  ");
          }
          }
          //else x=x+lunghezza;//se è minore di max, sommo x(lettere stampate fino a qui) a lunghezza
          if (inizio==0)
          printf("  ");
          printf("%s",parola);//stampo a video la parola
          inizio=1;
          //riazzero tutto
          band=0;
          h=0;
          z=0;
          }

        }


    fclose(c);


}

vi prego aiutatemi ;_;, son giorni e giorni che son fermo a questo punto e ho bisogno d'aiuto >_>...