• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

fscanf - wczytywanie tylko jednej linii z pliku

Object Storage Arubacloud
0 głosów
842 wizyt
pytanie zadane 10 grudnia 2015 w C i C++ przez baszmest Gaduła (3,080 p.)

Witam, załóżmy że mam plik z danymi:
 

4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Chciałbym, żeby w przypadku gdy w pierwszej linii jest więcej lub mniej niż 2 liczby, to żeby program odpowiednio zareagował. 
Chciałem użyc takiej konstrukcji:
 

if ( fscanf( input, "%d" "%d", &zmienna1, &zmienna2) != 2)
{
     ...
     //Odpowiednia reakcja programu
     ...
}

 Jednak ten if nigdy sie nie wykona jesli liczb w całym pliku jest więcej niż 2 - ponieważ, gdy w pierwszej linii jest jedna liczba, to kolejną czyta z następnej linii, a to jest w moim przypadku niepożądane. Czy można to jakoś inaczej wykonać ? (tak, aby nie czytał kolejnej linii, gdy w pierwszej są mniej niż 2 cyfry)

Tylko język C.
C+ odpada.

1 odpowiedź

+1 głos
odpowiedź 11 grudnia 2015 przez Radfler VIP (101,030 p.)
wybrane 13 grudnia 2015 przez baszmest
 
Najlepsza

Witaj. Moja propozycja jest taka:

1. Pobierz z pliku linę funkcją fgets do tablicy char,

2. Wyjmuj dane ze stringu funkcją sscanf,

3. Sprawdzaj poprawność danych.

Ogólnie napisałem taki kod:

char line[1 << 7]; // 1 << n <=> pow(2, n)

FILE* file = fopen("input.txt", "r");

int x, y;
while(fgets(line, sizeof(line), file) != NULL) {
  if(sscanf(line, "%d %d", &x, &y) != 2) {
    // failure
    break;
  }
  printf("%d, %d\n", x, y);
}

fclose(file);

Jedyną wadą jest to, że program reaguje tylko gdy w linii jest za mało liczb. Jeżeli jest za dużo to zostaną zignorowane.

komentarz 13 grudnia 2015 przez baszmest Gaduła (3,080 p.)
Ok, dzięki, przyda się- Sorry, ze jakos zapomniałem o tym poscie :D

Podobne pytania

+1 głos
1 odpowiedź 133 wizyt
pytanie zadane 20 listopada 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)
0 głosów
1 odpowiedź 463 wizyt
pytanie zadane 30 grudnia 2015 w C i C++ przez Jonki Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 235 wizyt
pytanie zadane 1 stycznia 2016 w C i C++ przez ToSzem Nowicjusz (170 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...