• 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

Mały hosting, OGROMNE możliwości
0 głosów
1,023 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ź 245 wizyt
pytanie zadane 20 listopada 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)
0 głosów
1 odpowiedź 637 wizyt
pytanie zadane 30 grudnia 2015 w C i C++ przez Jonki Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 367 wizyt
pytanie zadane 1 stycznia 2016 w C i C++ przez ToSzem Nowicjusz (170 p.)

93,718 zapytań

142,630 odpowiedzi

323,262 komentarzy

63,265 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...