Avatar
acerik97
Člen
Avatar
acerik97:

Jakou funkci bych měl použít, když mám v texťáku napsaná čísla 52 23 12 (nový řádek)
23 20 14 a chtěl bych je přečíst na konzoli?
Děkuji za odpověd

 
Odpovědět 25.2.2015 21:07
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na acerik97
Jan Vargovský:

funkce fscanf
class ifstream

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 25.2.2015 21:12
Avatar
Odpovídá na Jan Vargovský
Libor Šimo (libcosenior):

Ako mám docieliť, aby sa mi vypisovalo aj odriadkovanie tak, ako je to to v subore?
cisla.txt
123 456 789
987 654 321

Tento kód vypíše všetko do jedného riadku:

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

int main(void)
{
    FILE *fr;
    int i;

    if ((fr = fopen("cisla.txt", "r")) == NULL) {
        printf("Subor sa neda otvorit!");
        exit(1);
    }
    while (fscanf(fr, "%d", &i) == 1){
        printf("%d, ", i);
    }
    if (fclose(fr) == EOF) {
        printf("Subor sa nepodarilo zavriet!");
        exit(1);
    }

    return 0;
}
Nahoru Odpovědět 27.2.2015 9:49
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):

Týmto to vypíše správne, ale vypisuje to znaky.

while ((c = getc(fr)) != EOF){
    putchar(c);
}
Nahoru Odpovědět 27.2.2015 10:19
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):

Nejak som to vyriešil, ale zdá sa mi zo trochu zložité. Program z textového súboru spočíta celé čísla oddelené medzerou v každom riadku zvlášť a zvlášť to aj vypíše. Napríklad súbor.txt:
25 14 56 98 74
25 69 4 5
22
1 2 3 4 5 6 7 8 9

vypíše
25 + 14 + 56 + 98 + 74 = 267
25 + 69 + 4 + 5 = 103
22 = 22
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

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

int main(void)
{
    FILE *fr;
    int c, i = 0, cis, sucet = 0;
    char cislo[10];

    if ((fr = fopen("cisla.txt", "r")) == NULL) {
        printf("Subor sa neda otvorit!\n");
        exit(1);
    }
    while ((c = getc(fr)) != EOF){
        if (isdigit(c))
            cislo[i++] = c;
        else if (c == '\n' || c == EOF) {
            cislo[i] = '\0';
            cis = atoi(cislo);
            printf("%d + ", cis);
            sucet += cis;
            printf("\b\b= %d", sucet);
            putchar('\n');
            i = 0;
            sucet = 0;
        }
        else {
            cislo[i] = '\0';
            cis = atoi(cislo);
            printf("%d + ", cis);
            sucet += cis;
            i = 0;
        }
    }
    if (fclose(fr) == EOF) {
        printf("Subor sa nepodarilo zavriet!\n");
        exit(1);
    }

    return 0;
}
Nahoru Odpovědět 27.2.2015 13:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
acerik97
Člen
Avatar
acerik97:

Šlo by to i tímto zpusobem pokud vis predem kolik cisel mas na kazdem radku

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE * soubor;
    int a,b,c,d;

    soubor = fopen("text.txt","r");

       if(soubor == NULL)
       {
                 printf("Nastala chyba");
       }

    while(!(d=feof(soubor)))
    {
      fscanf(soubor,"%d %d %d\n",&a,&b,&c);

      printf("%d %d %d\n",a,b,c);
    }

    fclose(soubor);

    getch();
    return 0;

}
 
Nahoru Odpovědět 27.2.2015 14:10
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
Jan Vargovský:

Načíst řádek, ten si hodit do stringstreamu a z něj pak načítat. Musel bys ale speciálně načítat, pokud bys chtěl i přesný počet mezer mezi čísly.

 
Nahoru Odpovědět 27.2.2015 14:43
Avatar
Odpovídá na Jan Vargovský
Libor Šimo (libcosenior):

Máš pravdu, bolo by to jednoduchšie.

Nahoru Odpovědět 28.2.2015 12:39
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.