Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] Problemi con printf()

    Ciao a tutti,
    da poco ho iniziato a studiare il linguaggio C++ e nel manuale ke ho comprato prima spiega il C come parte necessaria del C++, ma la spiegazione fà spesso riferimento a delle nozioni ke io nn ho.
    Cos' sono stato costretto a leggermi delle guide + semplici per comprendere il mio manuale!
    Ad esempio ho preso questo pezzo di codice dalla guida al C di HTML.it

    #include <stdio.h>

    int main()
    {
    int i;
    char miastringa[40];
    FILE *stream = fopen("miofile.txt","a");
    printf("Inserisci meno di 40 caratteri -> ");
    fscanf(stdin, "%s", miastringa);
    fprintf(stream, "La mia stringa e' : %s\n", miastringa);
    fflush(stream);
    fclose(stream);
    }


    Ora il problema è ke per esempio a miastringa assegno "ciao come và?"
    Dopo quando vado ad aprire il miofile.txt trovo scritto solamante "La mia stringa e' : ciao" in pratica una volta arrivato a leggere il primo spazio della scritta "ciao come và?" lui smette di scrivere nel file miofile.txt... VVoVe:

    Ora ho pensato ke il programma trovando uno spazio lo interpretasse come una array nullo di chiusura...

    e con le mio modesta capacità ho provato a inserire...

    /* Se /t è contenuto nella stringa miastringa...*/
    if(strstr(miastringa,'\t'))
    {
    for(i=0;i< strlen(miastringa);i++)
    {
    if(miastringa[i] == '\t')
    {
    miastringa[i] = ' ';
    }
    }
    }

    l' ho compilato e poi al momenti dell' esecuzione si blocca tutto dopo ke ho inserito il testo per fscanf(stdin, "%s", miastringa);

    Vi prego fatemi sapere dove sbaglio

  2. #2
    e' normale..
    mi pare che la fgets non si fermi agli spazi..
    :master: pero' forse mi sbaglio..
    comunque basta fare un ciclo
    (pseudocodice)..
    while(a=fgetc()!='\n')
    miastringa[i++]=a;

  3. #3
    Ho provato a scrivere:

    #include <stdio.h>

    int main()
    {
    int i = 0;
    char a, miastringa[40];
    FILE *stream = fopen("miofile.txt","a");
    printf("Inserisci meno di 40 caratteri -> ");
    fscanf(stdin, "%s", miastringa);
    while(a = fgetch()!='\n') miastringa[i++] = a;
    fprintf(stream, "La mia stringa e' : %s\n", miastringa);
    fflush(stream);
    fclose(stream);
    }


    ma mi dà errore, e nn riesco nemmeno a capire ke errore sia xkè nn mi dice la riga a cui si trova...
    Cmq io uso Borland C++ Builder X e nn è ke la funzione fgetch() è compresa in qualke libreria particolare?
    Ma nn è ke ti sei sbagliato a scrivere e al posto di fgetch() devo mettere fgets()?

  4. #4
    Originariamente inviato da Sibil
    Ho provato a scrivere:

    #include <stdio.h>

    int main()
    {
    int i = 0;
    char a, miastringa[40];
    FILE *stream = fopen("miofile.txt","a");
    printf("Inserisci meno di 40 caratteri -> ");
    fscanf(stdin, "%s", miastringa);
    while(a = fgetch()!='\n') miastringa[i++] = a;
    fprintf(stream, "La mia stringa e' : %s\n", miastringa);
    fflush(stream);
    fclose(stream);
    }


    ma mi dà errore, e nn riesco nemmeno a capire ke errore sia xkè nn mi dice la riga a cui si trova...
    Cmq io uso Borland C++ Builder X e nn è ke la funzione fgetch() è compresa in qualke libreria particolare?
    Ma nn è ke ti sei sbagliato a scrivere e al posto di fgetch() devo mettere fgets()?
    no,
    int fgetc(*FILE);
    non avevo passato il file alla funzione..

    comunque per dubbi sui file:

    http://forum.html.it/forum/showthrea...hreadid=477366

    while(a = fgetc(file)!='\n') miastringa[i++] = a;
    ..e aggiungi subito dopo
    miastringa[i]='\0';

  5. #5
    Allora devo essere un completo imbranato xkè nn và...mi dà lo stesso errore ma nn capisco cosa cavolo vuole...

    #include <stdio.h>
    #include <stdio.h>

    int main()
    {
    int i = 0;
    char a, miastringa[40];
    FILE *stream = fopen("miofile.txt","a");
    printf("Inserisci meno di 40 caratteri -> ");
    fscanf(stdin, "%s", miastringa);
    while(a = fgetch()!='\n')
    {
    miastringa[i++] = a;
    miastringa[i]='\0';
    }
    fprintf(stream, "La mia stringa e' : %s\n", miastringa);
    fflush(stream);
    fclose(stream);
    }
    }



    mi dice:
    Error: Unresolved external '_fgetch' referenced from I:\PROGRAMMI\CBUILDERX\SAMPLES\WELCOME\WINDOWS\REL EASE_BUILD\MY_PROJECT\WINDOWS\DEBUG_BUILD\PROVA PRINTF E SCANF.OBJ

    Warning: Public symbol '_main' defined in both module I:\PROGRAMMI\CBUILDERX\SAMPLES\WELCOME\WINDOWS\REL EASE_BUILD\MY_PROJECT\WINDOWS\DEBUG_BUILD\PROVA PRINTF E SCANF.OBJ and I:\PROGRAMMI\CBUILDERX\SAMPLES\WELCOME\WINDOWS\REL EASE_BUILD\MY_PROJECT\WINDOWS\DEBUG_BUILD\TRIS.OBJ

    ILINK32 exited with error code: 2
    Build cancelled due to errors

    ke cavolo vuol dire...
    Mi consigli un buon compilatore?

  6. #6
    non fgetch ma fgetc
    inoltre devi passare come parametro il nome del file da cui prendere l'imput..
    nel tuo caso stdin..

  7. #7
    ok ora puoi anke darmi del niubbo incapace però:

    #include <stdio.h>

    int main()
    {
    int i = 0;
    char a, miastringa[40];
    FILE *stream = fopen("miofile.txt","a");
    printf("Inserisci meno di 40 caratteri -> ");
    fscanf(stdin, "%s", miastringa);
    while(a = fgetc(stream)!='\n')
    { miastringa[i++] = a;
    miastringa[i]='\0';
    }
    fprintf(stream, "La mia stringa e' : %s\n", miastringa);
    fflush(stream);
    fclose(stream);
    }

    se lo eseguo mi si blocca tutto stdin dove lo mettere?!?

  8. #8
    Originariamente inviato da Sibil
    ok ora puoi anke darmi del niubbo incapace però:

    #include <stdio.h>
    codice:
    int main()
    {
       int i = 0;
       char a, miastringa[40];
       FILE *stream = fopen("miofile.txt","a");
       printf("Inserisci meno di 40 caratteri -> ");
       fscanf(stdin, "%s", miastringa);
       while(a = fgetc(stdin)!='\n')
       { miastringa[i++] = a;
       miastringa[i]='\0';
       }
       fprintf(stream, "La mia stringa e' : %s\n", miastringa);
       fflush(stream);
       fclose(stream);
    }
    se lo eseguo mi si blocca tutto stdin dove lo mettere?!?

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    6
    l'errore riscontrato può essere corretto direttamente nel codice originale:

    codice:
    #include <stdio.h>
    int main()
      {
      int i;
      char miastringa[40]; 
      FILE *stream = fopen("miofile.txt","a");
      printf("Inserisci meno di 40 caratteri -> ");
      fscanf(stdin,"%[^\n]%*c", &miastringa[0]); 
      fprintf(stream, "La mia stringa e' : %s\n", miastringa);
      fflush(stream);
      fclose(stream);
      }
    L'iterazione é umana, la ricorsione é divina ...
    ... il tracollo dello stack é divinamente dietro l'angolo

  10. #10
    Originariamente inviato da DVice
    l'errore riscontrato può essere corretto direttamente nel codice originale:

    codice:
    #include <stdio.h>
    int main()
      {
      int i;
      char miastringa[40]; 
      FILE *stream = fopen("miofile.txt","a");
      printf("Inserisci meno di 40 caratteri -> ");
      fscanf(stdin,"%[^\n]%*c", &miastringa[0]); 
      fprintf(stream, "La mia stringa e' : %s\n", miastringa);
      fflush(stream);
      fclose(stream);
      }
    si, ma non funziona con tutti i compilatori..

    (nemmeno la mia soluzione se prima non viene disabilitato
    il buffering dell' input)..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.