Jeśli scanf to nic to return 1

Odpowiedz Nowy wątek
2018-11-09 00:19
0

Mam problem. Głowię się nad zadaniem, które pewnie jest proste ale nic mi nie działa :/

Zadanie:

Napisz program, który pobierze od użytkownika ciąg liczb rzeczywistych (maksymalnie 100, w przypadku mniejszej liczby danych wartość 0 będzie oznaczała koniec wprowadzania danych) i zapisze je do tablicy. Następnie, wykorzystując przygotowane funkcje, program ma wyznaczyć i wyświetlić, z dokładnością dwóch miejsc po przecinku, w kolejnych liniach sumę podanych wartości oraz wartość średnią. W przypadku niepodania żadnej wartości program ma wyświetlić komunikat “Error” i zakończyć działanie z kodem błędu 1, jeżeli wszystkie operacje się powiodą program powinien zwrócić wartość 0.

Zrobiłem większą część zadania (tak wiem, jeszcze kilka rzeczy do poprawy np. max 100 liczb itd ale to nie problem) ale ten Error sprawia mi problem.

Kod:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int sum(const float* tab, unsigned int size, float *result);
int avg(const float* tab, unsigned int size, float *result);
 
int main()
{   
    float ile;
    float a[10];
    float *tab=a;
    float wynik;
    float *result=&wynik;
    int i=0;
    float podana;
    int size = 0;
    int k=0;
    for(i=0;i<10;i++)
        {
 
        printf("Podaj %d liczbe: ",i+1);    
        scanf("%f",&podana);
 
            if(podana==0)
            {
            printf("Zle dane\n");
            return 0;
            }
 
            else
            {
            *(tab+i)=podana;
            size++;
            k++;    
            }
        }
 
        printf("\nWielkosc tablicy: %d\n",size);
        for(i=0;i<10;i++)
        {
 
        printf("%f ",* (tab+i)) ;
        }
        sum(tab, size, result);
        avg(tab, size, result);
    return 0;
}
 
int sum(const float* tab, unsigned int size, float *result)
{
 
    int i=0;
    float ile;
    for(i=0;i<10;i++)
        {
 
        ile+=*(tab+i);
 
        }
    *result= ile;
    printf("\nSuma wynosi: %.2f", *result);
    return 0;
}
 
int avg(const float* tab, unsigned int size, float *result)
{
    int i=0;
    float ile=0;
    for(i=0;i<10;i++)
        {
 
        ile+=*(tab+i);
 
        }
    *result= ile/size;
    printf("\nSrednia wynosi: %.2f", *result);
    return 0;
 
}

próbowałem

if(podana == NULL)
if(podana == '\n')
if(podana == '\0')

i kurcze żadne nie działa. Ale to chyba dlatego, że dopóki się nic nie wpisze i będzie się klikać enter to nic nie zostaje wpisane w scanf... I nie wiem co z tym zrobić :/

Może ktoś już się spotkał z takim problemem i pomoże. Będę plusował :D

edytowany 2x, ostatnio: furious programming, 2018-11-09 00:53

Pozostało 580 znaków

2018-11-09 00:28
kq
2

Sprawdzaj wartość zwróconą przez scanf() - jeśli jest inna niż 1 (bo wczytujesz 1 rzecz w danym wywołaniu), to znaczy, że coś poszło nie tak.


Pozostało 580 znaków

2018-11-09 00:42
0

@kq: dodałem część kodu:

        r = scanf("%f",&podana);
 
        if(r!=1)
        {   
        printf("ERROR");
            return 1;
        }

jednak mimo wszystko nie działa. Sprawdzałem printf i jeśli podam jakąś liczbę to scanf zwraca 1. Jeśli nie podam nic, a po prostu wcisnę enter to nic się nie dzieje i konsola jakby czeka na jakąkolwiek liczbę. Tak jakby nie można było niczego nie wpisać, bo program zawsze będzie czekał na cokolwiek...

edytowany 1x, ostatnio: furious programming, 2018-11-09 00:53

Pozostało 580 znaków

2018-11-09 00:46
kq

Aby zakończyć strumień wejściowy, w konsoli wciśnij Ctrl+Z (Windows) lub Ctrl+D (*nixy)


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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