Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Program z funkcją "gets"

04 Cze 2011 08:25 767 3
  • Poziom 15  
    Dzień dobry!

    Mam do wykonania program o spełniający warunki treści zadania ;
    W tablicy przechowywane są informacje o członkach pewnej spółdzielni. Informacje te obejmują:
    - nazwisko i imię;
    - datę wstąpienia do spółdzielni
    - wysokość wkładu
    Należy napisać program, który umożliwi:
    a) wpisanie nowych informacji do tablicy;
    b) wydruk zawartości tablicy;
    c) wydruk listy członków spółdzielni, których wkład jest wyższy od zadanej wartości;

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

    int main()

    {
    struct czlonek
    { char a[10];
    char dat[3];
    char wys[1];
    };

    printf(" Podaj liczbe czlonkow spoldzielni: \n" );
    int x;
    scanf ("%d", &x);

    int i,a,n;
    struct czlonek spol[2];

    for(n=0;n<2;n++)
    {
    printf("podaj imie i nazwisko czlonka: \n");
    gets(a);
    scanf ("%c",a);
    printf("podaj date przystapienia do spoldzielni: \n");
    gets(&spol[n].dat);
    scanf ("%s",&spol[n].dat);
    printf("podaj wysokosc wkladu: \n");
    gets(&spol[n].wys);
    scanf ("%h",&spol[n].wys);

    }


    for(n=1;n<a;n++)
    {
    printf("imie i nazwisko %c \n\n",a);
    printf("data przyjecia %s \n\n",spol[n].dat);
    printf("wysokosc wkladu %h \n\n",spol[n].wys);
    }

    system("Pause");
    return 0;
    }



    A oto mój program, który ma problem z funkcją gets ( potrzebną do imienia oraz nazwiska członka spółdzielni),
    a także zapętla bez końca ( nie przechodzi do wyświetlenie wpisanych do tej pory informacji. Proszę o korektę kodu, komentarz
  • Poziom 25  
    Nie mieszaj scanf() i gets(). Najlepiej nie używaj gets(), jeśli już to fgets(), ze względu na to, że możesz określić rozmiar pobieranych danych.
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 32  
    Skoro wczytuje się liczbę członków to chyba
    Code:
    struct czlonek spol[x];
    (tak wiem, że to niestandardowe rozszerzenie, ale skoro deklaracja jest przesunięta za wczytamie wielkości...) i
    Code:
    for (n=0; n<x; n++)
    .
    Nieco małe są rozmiary pół - 1 znak na wielkość wkładu? 3 na datę? 10 na imię i nazwisko?

    Imienia i nazwiska nie bardzo idzie wczytać poprzez scanf("%s" - bo to zatrzyma się na spacji. Faktycznie fgets - ale nie na zmiennej int, albo scanf("%[~\r\n]"... - to dość egzotyczny format dla scanfa, w nawiasach wypisujemy literki, które tworzą ciągły napis, lub jeśli zaczyna się na ~ literki, które go kończą.
  • Poziom 15  
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    struct czlonek
    {
    char a[22];
    char dat[10];
    char wys[10];
    };

    printf(" Podaj liczbe czlonkow spoldzielni: \n" );
    int x;
    scanf ("%d", &x);

    int n;
    struct czlonek spol[x];

    for(n=0;n<x;n++)
    {
    printf("podaj imie i nazwisko czlonka: \n");
    scanf ("%s",spol[n].a);
    printf("podaj date przystapienia do spoldzielni: \n");
    scanf ("%s",spol[n].dat);
    printf("podaj wysokosc wkladu: \n");
    scanf ("%s",spol[n].wys);
    }


    for(n=0;n<x;n++)
    {
    printf("imie i nazwisko %s \n\n",spol[n].a);
    printf("data przyjecia %s \n\n",spol[n].dat);
    printf("wysokosc wkladu %s \n\n",spol[n].wys);
    }

    system("Pause");
    return 0;
    }

    probowalem scanf ("%[^\n], spol[n].a ); , ale nie dziala, chyba fgets da rade, tylko nie wiem jak go zastosować . Jeśli ktos potrafi to prosze poprawic mi ten kod z uzyciem fgets, dzieki śliczne wszystkim za pomoc, poprawilem pętle i juz mam to co chcialem