Dlaczego kod nie działa?

0

Cześć, napisałem kawałek kodu, który oblicza ile razy przecięto 0(zmieniono znak)
Program kompiluje się poprawnie.
Uruchamiam go wraz z danymi wejściowymi w dokumencie txt komendą " cat dane.txt|./a.out "
Program działa popranie na macOS, jednak kiedy przekopiowałem kod na serwer z systemem solaris po skompilowaniu wyświetla błąd danych.
To samo dzieje się na serwerze z debianem.

Załączam kod, dane wejściowe i screenshoty.

#include <stdio.h>
#define UP 10
#define LOW -10
#define END 99

int main() {

    float parametr1, parametr2, i=0;
    int cross0=0, number=1;  /*cross0=liczba przecięć 0*/

do {
    scanf("%f", &parametr1); /*wczytanie danych*/
    i++;
    
    if (parametr1>=LOW && parametr1<=UP) /*Sprawdzenie czy wartość zawiera się w <-10,10>*/
        if (parametr1*parametr2<0) { /*Sprawdzenie czy występuje przecięcie 0*/
            parametr2=parametr1;
            cross0++; }
    
    if (i==98) {
        
        if(cross0>=8 && cross0<=14) /*Sprawdzenie czy częstotliwość nalezy do przedziału od 8 do 14*/
            printf("Pomiar %d. Częstotliowość wynosi %d \n", number, cross0); /*Wyświetlenie częstotliowść dla 99 pomiarów*/
        else
            printf("Pomiar %d. Błąd danych! Częstotliwość wynosi %d \n", number, cross0);
        i=0;       /*Zerowanie wskaźników*/
        cross0=0;
        number++;
    }

} while (parametr1!=END); /*Koniec programu dla 99*/
    return 0;
}
0

Obstawiam na Undefined Behaviour - masz niezainicjalizowaną zmienną parametr2 a mnożysz ją z parametr1

0
atmal napisał(a):

Obstawiam na Undefined Behaviour - masz niezainicjalizowaną zmienną parametr2 a mnożysz ją z parametr1

Zainicjalizowanie parametr2=0 nie pomogło.

0

Ale jeżeli zainicjalizujesz tą zmienną wartością 0 to nigdy nie wykona Ci się:

if(parametr1 * parametr2 < 0)

Bo cokolwiek * 0 = 0

Zainicjalizuj jako 1 i powinno być ok.

0

A co to ma niby robić? Bo niby to co opisałeś w tekście, ale jednak nie do końca.

0

Też nie mogłem z początku zrozumieć ale doszedłem to tego że program liczy ile razy zmienił się znak. Choć nie rozumiem dlaczego ilość mniejsza niż 8 lub większa niż 14 oznacza błąd, ale to już nie ma dużego znaczenia.

0

Stawiam na to, że w jednym przypadku wprowadzasz złe dane i od tego momentu program nic nie wczytuje.
Pętla powinna wyglądać tak:

while (1 == scanf("%f", &parametr1))
{
    …
    ++i;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1