Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82

    [C++] leggere da file parole separate da spazio

    Ciao a tutti,

    devo creare un programmino che mi legga da file una riga in cui sono presenti delle parole separate dal carattere spazio. Mettere poi ogni parola letta in un secondo file, dove ogni parola occupa una riga.

    Il mio problema sta nel fatto che non capisco che comando devo usare per far si che la lettura della riga si arresti a ogni spazio e poi continui... Il comando EOF se non sbaglio vale solo per la fine file..

    Se mi potreste aiutare ve ne sarei grato, grazie

  2. #2
    letto il carattere puoi usare la funzione isspace, che ritorna non zero se questo carattere è uno spazio, un tab, un tab verticale, un line feed, un ritorno carrello o una nuova linea.
    ciao
    sergio

  3. #3
    L'overload per stringhe dell'operatore di estrazione (>>) estrae automaticamente testo fino a quando non incontra uno spazio o una tabulazione; usa quello.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82
    Intanto vi ringrazio per le vostre risposte..
    Il fatto è che devo riuscire a fare quasta cosa senza usare funzioni particolari..
    Io ho provato a creare un file parola.txt con all'interno: "ciao come va" e a capo; una volta scritto sull'altro file il risultato è questo:

    ciao
    come
    va



    ¨
    ˙
    "

    Non capisco perchè quei caratteri in fondo...

    Ecco quello che ho fatto:

    #include <stdio.h>
    #define N 8

    int main()
    {
    FILE *fp,*fc;
    char parola[N];
    int i;

    fp=fopen("parola.txt","r");
    fc=fopen("scrivi.txt","w");

    if(fp==NULL)
    printf("errore di lettura");

    else
    {

    for(i=0;i<N;i++)
    {
    do{
    fscanf(fp,"%c",&parola[i]);
    printf(" %c ",parola[i]);
    fprintf(fc,"%c",parola[i]);

    }while(parola[i]!=' '&& !feof(fp));

    fprintf(fc,"\n");

    }

    }
    fclose(fp);
    fclose(fc);

    system("pause");

    }


    Come potete vedere ho usato il controllo ' ' lasciando lo spazio, e sembra che funzioni.. ma la fine è sballata..

    vi sarei grato se mi aiutaste ad aggiustarlo, grazie

  5. #5
    perchè non usi le classi iostream per leggere e scrivere sui file ?

  6. #6
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82
    perchè i comandi che ci hanno spiegato in uni sono questi oltre a fgetc e fputc... se ci dà questi ese spero che dovrebbe essere fattibile risolverlo solo con queste funzioni..

  7. #7
    Usa
    codice:
    fscanf("%s",parola);
    .
    Comunque se usi fscanf et similia invece di iostream stai lavorando in C, non in C++.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82
    Hai ragione! scusa è che il programma è devc++ e nn ci ho fatto caso di aver scritto c++ anzichè c..

    Comunque ho cambiato il ciclo for in questo modo e sembra andar bene..

    while(!feof(fp))
    {
    do{
    fscanf(fp,"%c",&parola[i]);
    printf(" %c ",parola[i]);
    fprintf(fc,"%c",parola[i]);

    }while(parola[i]!=' '&& !feof(fp));

    fprintf(fc,"\n");
    i++;
    }



    Secondo voi è sintatticamente corretto o è solo fortuna? Anchew perchè sinceramente non so nemmeno io come ho fatto ...

  9. #9
    codice:
    	char parola[500];
    
    	while( fscanf( fp, "%s", parola), !feof(fp))
    	{
    		printf("'%s'\n", parola);
    		fprintf(fc,"%s\n", parola);
    	}
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  10. #10
    Io per maggior sicurezza farei
    codice:
    	char parola[500];
    
    	while( fscanf( fp, "%s", parola) && !feof(fp))
    	{
    		printf("'%s'\n", parola);
    		fprintf(fc,"%s\n", parola);
    	}
    , così anche se c'è qualche altro problema la lettura questa viene interrotta.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.