Anonymní profil Spartakus – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Spartakus – Programujte.comAnonymní profil Spartakus – Programujte.com

 

Příspěvky odeslané z IP adresy 90.178.157.–

C / C++ › Načítání znaků ze souboru (j…
1. 4. 2013   #174251

Díky, rewind mi vůbec nedošel. Moje chyba :)

Takto je to vyřešeno:

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

int PocetRadku(FILE *fr) //zjistím si počet řádků
{
    int c;
    int pocet = 1;

    while((c = getc(fr)) != EOF)
        if (c == '\n') pocet++;

    return pocet;
}

int je_cislice(char znak)
{
    if(((znak >= '0') && (znak <= '9')) || znak == '-')
        return 1;
    else
        return 0;
}

//void soucet_cisel(const char* vstup, const char* vystup)
void soucet_cisel(const char* vstup)
{
    FILE *fr, *fw;

    fr = fopen(vstup, "r");
    //fw = fopen("vylsdek.txt", "a+");

    int pocet_radku, soucet, i, help;
    pocet_radku = PocetRadku(fr);

    rewind(fr);

    char znak;


    if(fr == NULL)
    {
        printf("Soubor nenalezen!!!\n");
        system("PAUSE");
        return 0;
    }

    for(i = 1; i <= pocet_radku; i++)
    {
        soucet = 0;
        while(((znak = getc(fr)) != '\n') && (znak != EOF))
        {
            if(je_cislice(znak))
            {
                ungetc(znak, fr);
                fscanf(fr,"%d", &help);
                soucet += help;
            }
        }
        printf("Soucet je %d\n", soucet);
    }
    fclose(fr);
}


int main()
{
    soucet_cisel("vstup.txt");

    return 0;
}
Spartakus
C / C++ › Načítání znaků ze souboru (j…
1. 4. 2013   #174243

Zdravím. Uměl by někdo poradit, proč mi tento kód nedokáže načíst první znak v souboru a místo toho raději načítá mezeru?

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

int PocetRadku(FILE *fr) //zjistím si počet řádků
{
    int c;
    int pocet = 1;

    while((c = getc(fr)) != EOF)
        if (c == '\n') pocet++;

    return pocet;
}

int je_cislice(char znak)
{
    if(((znak >= '0') && (znak <= '9')) || znak == '-')
        return 1;
    else
        return 0;
}

//void soucet_cisel(const char* vstup, const char* vystup)
void soucet_cisel(const char* vstup)
{
    FILE *fr, *fw;

    fr = fopen(vstup, "r");
    //fw = fopen("vylsdek.txt", "a+");

    int pocet_radku, soucet, i, help;
    pocet_radku = PocetRadku(fr);
    //printf("%d", pocet_radku);
    char znak;


    if(fr == NULL)
    {
        printf("Soubor nenalezen!!!\n");
        system("PAUSE");
        return 0;
    }

    for(i = 1; i <= pocet_radku; i++)
    {
        soucet = 0;
        while(((znak = fgetc(fr)) != '\n') || (znak != EOF))
        {
            printf("%c!\n", znak);
            if(je_cislice(znak))
            {
                printf("%c", znak);
                ungetc(znak, fr);
                fscanf(fr,"%d", &help);
                soucet += help;
            }
            else break;
        }
        printf("Soucet je %d\n", soucet);
        i++;
    }
    fclose(fr);
}


int main()
{
    /*   FILE *fr;
       if((fr = fopen("vstup.txt","r")) == NULL)     //test otevreni
       {
           printf("Soubor se nepodarilo otevrit.\n");
           system("pause");
           return 1;
       }


       printf("Pocet radku %d\n",PocetRadku(fr));
       printf("%d", je_cislice('a'));*/

    soucet_cisel("vstup.txt");

    return 0;
}

Soubor pro testování u mě vypadá takto:

1 2 2

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý