[pytanie] wprowadzanie typu INT do bazy danych

Odpowiedz Nowy wątek
2007-07-09 18:28
0

Poniższy program opiera się wyłącznie na wprowadzaniu typu char. Co zrobić, zeby numer telefonu można było wpisywać tylko numerycznie? Wiem, ze char akceptuje wszystko ale mi chodzi o to, zeby inne znaki niz cyfry były odrzucane przez program.

/* * * * * * * * * * * * * Pliki  naglowkowe * * * * * * * * * * * * */

#include <stdio.h>    /* Standardowe funkcje wejscia/wyjscia */
#include <string.h>   /* Funkcje przetwarzania tekstu */
#include <stdlib.h>   /* Makrodefinicje EXIT_SUCCESS i EXIT_FAILURE,
                         funkcja system */
#include <ctype.h>    /* toupper */

/* * * * * * * * * * * * * * Komentarz  ogolny * * * * * * * * * * * */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *  Nazwa:     KSIAZKA TELEFONICZNA wersja ANSI-C 0.8d (DOS/UNIX)    *
 *  Autor:     Piotr Grabowski [email protected] www.kursc.prv.pl   *
 *  Opis:      Program umozliwia wprowadzanie, wyszukiwanie,         *
 *             usuwanie, sortowanie oraz przechowywanie w pliku      *
 *             danych o numerach telefonicznych                      *
 *  Data:      10.2000                                               *
 *  Copyright: public domain                                         *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/* * * * * * * * * Makrodefinicje i definicje struktur * * * * * * * */

/* starsze kompilatory */
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif
#ifndef EXIT_FAILURE
#define EXIT_FAILURE 1
#endif

#define MAX   30   /* Maksymalna liczba wpisow w bazie danych  */
#define INPUT 4    /* Maksymalna dlugosc wprowadzanego indeksu */
#define FALSE 0
#define TRUE  1
#define DOS    /* Wybierz syst. oper.: DOS lub UNIX (ANSI - zaden) */

typedef short int BOOL;   /* Definicja relacji  */

typedef struct        /* Definicja typu strukturalnego telefony   */
{
    char personalia[50];    /* Nazwisko i imie, firma lub pseudonim */
    char adres[50];         /* Miejscowosc                          */
    char telefon[20];       /* Numer telefonu                       */
} telefony;

/* * * * * * * * * * * * * Prototypy funkcji * * * * * * * * * * * * */

void /*inline*/ wyczysc_ekran(void); /* Czysci ekran monitora        */
void /*inline*/ potwierdzenie(void); /* Wyswietla komunikat koncowy  */
int wszystkie_wpisy(void);   /* Listuje wszystkie wpisy w bazie      */
int dane_osoby(void);        /* Prezentuje dany wpis                 */
int szukaj_wpisu(void);      /* Przeszukuje baze                     */
int dodaj_wpis(void);        /* Dodaje nowy wpis                     */
int usun_wpis(void);         /* Usuwa wpis                           */
int zachowaj_baze(void);     /* Zapisuje baze danych do pliku        */
int wczytaj_baze(void);      /* Laduje baze z pliku do pamieci       */
void sortuj_baze(void);       /* Sortuje baze wg pola personalia      */
void info(void);             /* Wyswietla informacje o programie     */

/* * * * * * * * * * * * * Zmienne  globalne * * * * * * * * * * * * */

telefony baza[MAX];   /* Zmienna strukturalna baza */
int numer = 0;        /* Licznik wszystkich wpisow */

/* * * * * * * * * * * * * F u n k c j e * * * * * * * * * * * * * * */

void /*inline*/ wyczysc_ekran(void)
{
#ifdef DOS
    system("cls");
#elif UNIX
    system("clear");
#else
 #define ROWS 40
    for (int i = 0; i < ROWS; i++)
        printf("\n");   /* Wyswietl puste linie */
 #undef ROWS
#endif
}

void /*inline*/ potwierdzenie(void)
{
#ifdef DOS
    printf("\n   ");
    system("pause");
#else
    printf("\n   Nacisnij ENTER, aby kontynuowac...");
    while (getchar() != '\n');
#endif
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Glowna funkcja int main(void)                           *
 *                                                         *
 * zadania: wyswietlanie glownego menu programu;           *
 *          wywolywanie odpowiednich funkcji -             *
 *          modulow programu.                              *
 *                                                         *
 * argumenty przekazywane: brak                            *
 * argumenty zwracane do systemu: kod pomyslnego           *
 *                    zakonczenia programu (EXIT_SUCCESS)  *
 *                                                         *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

int main(void)
{
char wybor;

    do  /* Petla do-while musi wykonac sie przynajmniej raz */
    {
        /* Menu glowne programu */
        wyczysc_ekran();

        printf("\n   KSIAZKA TELEFONICZNA wersja ANSI-C 0.8d \n\n");

        printf("    [1]  Wyswietl wszystkie wpisy w bazie   \n\n"
               "    [2]  Przedstaw informacje o osobie      \n\n"
               "    [3]  Znajdz wpis w bazie danych         \n\n"
               "    [4]  Dodaj wpis do bazy danych          \n\n"
               "    [5]  Usun wpis z bazy                   \n\n"
               "    [6]  Zachowaj baze danych               \n\n"
               "    [7]  Zaladuj baze danych                \n\n"
               "    [8]  Sortowanie bazy danych             \n\n"
               "    [9]  Informacje o programie             \n\n"
               "    [0]  Wyjscie                            \n\n");

        /* Pobierz dane od uzytkownika */
        printf("   Twoj wybor: ");
        wybor = getchar();
        fflush(stdin);    /* Wyczysc bufor klawiatury */

        wyczysc_ekran();

        /* Wywolanie funkcji w zaleznosci od wyboru uzytkownika */
        switch (wybor)
        {
            case '1' : wszystkie_wpisy();
                break;
            case '2' : dane_osoby();
                break;
            case '3' : szukaj_wpisu();
                break;
            case '4' : dodaj_wpis();
                break;
            case '5' : usun_wpis();
                break;
            case '6' : zachowaj_baze();
                break;
            case '7' : wczytaj_baze();
                break;
            case '8' : sortuj_baze();
                break;
            case '9' : info();
                break;
            case '0' :
                break;
            default :
            {
                printf("\n   Nie ma takiej opcji! \n");
                potwierdzenie();
            }
                break;
        }
    } while (wybor != '0');

    printf("\n   ZAMYKANIE PROGRAMU \n");
    potwierdzenie();
    return EXIT_SUCCESS;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja int wszystkie_wpisy(void)                           *
 *                                                             *
 * zadania: wyswietlanie wszystkich wpisow w bazie             *
 *                                                             *
 * argumenty przekazywane: brak                                *
 * argumenty zwracane    : kod zakonczenia:                    *
 * EXIT_SUCCESS (sukces) : baza danych nie jest pusta          *
 * lub                                                         *
 * EXIT_FAILURE (niepowodzenie): w bazie nie ma zadnych wpisow *
 *                                                             *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

int wszystkie_wpisy(void)
{
int i;      /* Zmienna pomocnicza - indeks petli */

    printf("\n   WYKAZ WSZYSTKICH WPISOW \n");

    if (numer == 0)    /* Nie ma zadnego wpisu! */
    {
        printf("\n   Baza danych jest pusta"
               " lub nie zostala zaladowana z pliku! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    /* Wyswietl wszystkie osoby wraz z numerami ich indeksow */
    for (i = 0; i < numer; i++)
    {
        printf("\n   %d   %s", i+1, baza[i].personalia);

        /* Zatrzymaj program po zapelnieniu ekranu */
        if ((i + 1)%10 == 0)
        {
            potwierdzenie();
            wyczysc_ekran();
        }
    }
    printf("\n   Koniec danych \n");
    potwierdzenie();
    return EXIT_SUCCESS;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja int dane_osoby(void)                                  *
 *                                                               *
 * zadania: wyswietlanie informacje o wpisie                     *
 *          odpowiadajacemu podanemu indeksowi                   *
 *                                                               *
 * argumenty przekazywane: brak                                  *
 * argumenty zwracane    : kod zakonczenia:                      *
 * EXIT_SUCCESS (sukces) : podany indeks istnieje w bazie        *
 * lub                                                           *
 * EXIT_FAILURE (niepowodzenie): podany indeks jest niepoprawny  *
 *                                                               *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

int dane_osoby(void)
{
char wpis[INPUT];       /* Tekst wpisany przez uzytkownika */
int index;              /* Wpis do prezentacji             */

    printf("\n   PREZENTOWANIE DANYCH \n");

    printf("\n   Wprowadz indeks osoby:  ");
    index = atoi(gets(wpis));   /* Konwersja typu danych */

    if (index < 1 || index > numer) /* Nie ma takiego indeksu! */
    {
        printf("\n   Indeks nie jest poprawny! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }
    /* Drukuj dane na ekranie */
    printf("\n   Nazwisko i imie:  %s", baza[index - 1].personalia);
    printf("\n   Miejscowosc:      %s", baza[index - 1].adres);
    printf("\n   Telefon:          %s", baza[index - 1].telefon);

    potwierdzenie();
    return EXIT_SUCCESS;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja int szukaj_wpisu(void)                            *
 *                                                           *
 * zadania: wyszukanie informacje w bazie -                  *
 *          podanego nazwiska lub miejscowosci               *
 *                                                           *
 * argumenty przekazywane: brak                              *
 * argumenty zwracane    : kod zakonczenia:                  *
 * EXIT_SUCCESS (sukces) : znaleziono minimum jeden wpis     *
 * lub                                                       *
 * EXIT_FAILURE (niepowodzenie): nic nie zostalo znalezione  *
 *                                                           *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

int szukaj_wpisu(void)
{
char szukana[30];      /* Szukane nazwisko lub miejscowosc */
int index, k = 0;      /* Zmienne pomocnicze               */

    printf("\n   WYSZUKIWANIE INFORMACJI W BAZIE \n");

    printf("\n   Wprowadz nazwisko lub miejscowosc do wyszukania: ");
    gets(szukana);
    wyczysc_ekran();
    for (index = 0; index < numer; index++)
    {
        /* Wyswietlanie informacji o wyszukanych wpisach */
        if (strstr(baza[index].personalia, szukana)
            || strstr(baza[index].adres, szukana))
        {
            printf("\n   Nazwisko i imie:  %s", baza[index].personalia);
            printf("\n   Miejscowosc:      %s", baza[index].adres);
            printf("\n   Telefon:          %s", baza[index].telefon);
            printf("\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            k++;
            /* Zatrzymaj program po zapelnieniu ekranu */
            if (k%3 == 0)
            {
                potwierdzenie();
                wyczysc_ekran();
            }
        }
    }
    if (k == 0)  /* Brak rezultatow! */
    {
        printf("\n   Nie znaleziono zadnego wpisu! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    printf("\n   To wszystkie wpisy jakie znaleziono! \n");
    potwierdzenie();
    return EXIT_SUCCESS;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja int dodaj_wpis(void)                              *
 *                                                           *
 * zadania: dodawanie nowego wpisu do bazy danych            *
 *                                                           *
 * argumenty przekazywane: brak                              *
 * argumenty zwracane    : kod zakonczenia:                  *
 * EXIT_SUCCESS (sukces) : dodano nowe informacje do bazy    *
 * lub                                                       *
 * EXIT_FAILURE (niepowodzenie): baza nie zostala zmieniona  *
 *                                                           *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

int dodaj_wpis(void)
{
    printf("\n   DODAWANIE WPISU DO BAZY DANYCH \n");

    if (numer >= MAX)          /* Baza danych jest pelna! */
    {
        printf("\n   Baza danych jest pelna! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    /* Pobierz od uzytkownika wszystkie informacje o osobie */
    /* Sprawdz czy wpisy nie sa za dlugie */
    do
    {
        printf("\n   Nazwisko i imie:  ");
        gets(baza[numer].personalia);
        if (strlen(baza[numer].personalia) > 48)
            printf("\n   Mozna wpisac maksymalnie 48 znakow! \n");
    } while (strlen(baza[numer].personalia) > 48);

    do
    {
        printf("\n   Miejscowosc:      ");
        gets(baza[numer].adres);
        if (strlen(baza[numer].adres) > 48)
            printf("\n   Mozna wpisac maksymalnie 48 znakow! \n");
    } while (strlen(baza[numer].adres) > 48);

    do
    {
        printf("\n   Telefon:          ");
        gets(baza[numer].telefon);
        if (strlen(baza[numer].telefon) > 18)
            printf("\n   Mozna wpisac maksymalnie 18 znakow! \n");
    } while (strlen(baza[numer].telefon) > 18);

    /* Nic nie wpisano w polu Nazwisko i imie lub Telefon */
    if ((strlen(baza[numer].telefon) == 0)
        || (strlen(baza[numer].personalia) == 0))
    {
        printf("\n   Wpis nie zostal dodany do bazy danych!"
               "\n   Musi zostac podane nazwisko i numer telefonu! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    /* Do kazdego pola dodaj znacznik konca lini */
    strcat(baza[numer].personalia, "\n");
    strcat(baza[numer].adres, "\n");
    strcat(baza[numer].telefon, "\n");

    numer++;    /* Zwieksz liczbe wpisow o jeden */
    printf("\n   Wpis zostal dodany do bazy danych! \n");
    potwierdzenie();
    return EXIT_SUCCESS;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja int usun_wpis(void)                               *
 *                                                           *
 * zadania: usuwanie wpisu z bazy danych                     *
 *                                                           *
 * argumenty przekazywane: brak                              *
 * argumenty zwracane    : kod zakonczenia:                  *
 * EXIT_SUCCESS (sukces) : usunieto informacje z bazy        *
 * lub                                                       *
 * EXIT_FAILURE (niepowodzenie): baza nie zostala zmieniona  *
 *                                                           *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

int usun_wpis(void)
{
char wpis[INPUT];       /* Tekst wpisany przez uzytkownika */
int kasuj_nr;           /* Wpis do usuniecia               */

    printf("\n   USUWANIE WPISU Z BAZY \n");

    printf("\n   Podaj indeks wpisu do usuniecia: ");
    kasuj_nr = atoi(gets(wpis));    /* Konwersja typu danych */

    /* Nie ma takiego wpisu! */
    if ((kasuj_nr < 1) || (kasuj_nr > numer))
    {
        printf("\n   Nie ma w bazie wpisu o takim indeksie! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    /* Usuwanie - przeindeksowanie bazy */
    while ((kasuj_nr - 1) < numer)
    {
        baza[kasuj_nr - 1] = baza[kasuj_nr];
        kasuj_nr++;
    }

    numer--;
    printf("\n   Wpis zostal usuniety \n");
    potwierdzenie();
    return EXIT_SUCCESS;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja int zachowaj_baze(void)                         *
 *                                                         *
 * zadania: zapisywanie bazy danych do pliku telefony.dbs  *
 *                                                         *
 * argumenty przekazywane: brak                            *
 * argumenty zwracane    : kod zakonczenia:                *
 * EXIT_SUCCESS (sukces) : baza zostala zapisana           *
 * lub                                                     *
 * EXIT_FAILURE (niepowodzenie): baza nie zostala zapisana *
 *                                                         *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

int zachowaj_baze(void)
{
FILE *PlikBazy;    /* Wskaznik do pliku bazy */
int i;             /* Zmienna pomocnicza     */
char znak;

    printf("\n   ZAPISYWANIE DANYCH DO PLIKU telefony.dbs \n");

    printf("\n   Jestes pewien? [T]ak/[N]ie  ");
    znak = getchar();
    fflush(stdin);
    if (toupper(znak) != 'T')
    {
        printf("\n   Baza danych nie zostala zapisana \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    PlikBazy = fopen("telefony.dbs", "w" ); /* Otworz do pisania */

    /* Nie mozna otworzyc pliku telefony.dbs! */
    if (PlikBazy == NULL)
    {
        printf("\n   Nie mozna otworzyc pliku bazy danych! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    /* Zapisz aktualna liczbe osob w bazie */
    fprintf(PlikBazy, "%d\n", numer);

    /* Zachowaj reszte danych */
    for (i = 0; i < numer; i++)
    {
        fputs(baza[i].personalia, PlikBazy);
        fputs(baza[i].adres, PlikBazy);
        fputs(baza[i].telefon, PlikBazy);
    }

    printf("\n   Baza danych zostala zachowana! \n");
    potwierdzenie();
    return EXIT_SUCCESS;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja int wczytaj_baze(void)                          *
 *                                                         *
 * zadania: wczytywanie bazy danych z pliku telefony.dbs   *
 *                                                         *
 * argumenty przekazywane: brak                            *
 * argumenty zwracane    : kod zakonczenia:                *
 * EXIT_SUCCESS (sukces) : baza zostala zapisana           *
 * lub                                                     *
 * EXIT_FAILURE (niepowodzenie): baza nie zostala zapisana *
 *                                                         *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

int wczytaj_baze(void)
{
FILE *PlikBazy;    /* Wskaznik do pliku bazy */
int i;             /* Zmienna pomocnicza     */

    printf("\n   WCZYTYWANIE DANYCH Z PLIKU telefony.dbs \n");

    /* Otworz plik tylko do odczytu */
    PlikBazy = fopen("telefony.dbs", "r");

    /* Nie mozna otworzyc pliku telefony.dbs!*/
    if (PlikBazy == NULL)
    {
        printf("\n   Nie mozna otworzy pliku bazy danych! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    /* Czytaj z pliku aktualna liczbe wpisow w bazie */
    fscanf(PlikBazy, "%d\n", &numer);
    if (numer > MAX)
    {
        printf("\n   W bazie danych jest za duzo wpisow! \n");
        potwierdzenie();
        return EXIT_FAILURE;
    }

    /* Czytaj reszte danych z pliku */
    for (i = 0; i < numer; i++)
    {
        fgets(baza[i].personalia, 50, PlikBazy);
        fgets(baza[i].adres, 50, PlikBazy);
        fgets(baza[i].telefon, 20, PlikBazy);
    }

    printf("\n   Baza danych zostala zaladowana! \n");
    potwierdzenie();
    return EXIT_SUCCESS;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja void sortuj_baze(void)                          *
 *                                                         *
 * zadania: Sortowanie babelkowe pol                       *
 *          personalia z tablicy baza                      *
 *                                                         *
 * argumenty przekazywane: brak                            *
 * argumenty zwracane    : brak                            *
 *                                                         *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

void sortuj_baze(void)
{
char temp[50];
BOOL chaos = TRUE;
int i;

    printf("\n   SORTOWANIE BAZY DANYCH \n");

    while (chaos != FALSE)
    {
        chaos = FALSE;
        for (i = 0; i < (numer - 1); i++)
        {
            if (strcmp(baza[i].personalia, baza[i+1].personalia) == TRUE)
            {
                /* Personalia */
                strcpy(temp, baza[i].personalia);
                strcpy(baza[i].personalia, baza[i+1].personalia);
                strcpy(baza[i+1].personalia, temp);
                /* Adres */
                strcpy(temp, baza[i].adres);
                strcpy(baza[i].adres, baza[i+1].adres);
                strcpy(baza[i+1].adres, temp);
                /* Telefon */
                strcpy(temp, baza[i].telefon);
                strcpy(baza[i].telefon, baza[i+1].telefon);
                strcpy(baza[i+1].telefon, temp);

                chaos = TRUE;
            }
        }
    }
    printf("\n   Baza danych zostala posortowana! \n");
    potwierdzenie();
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Funkcja void info(void)                                 *
 *                                                         *
 * zadania: prezentowanie informacji o programie           *
 *                                                         *
 * argumenty przekazywane: brak                            *
 * argumenty zwracane    : brak                            *
 *                                                         *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

void info(void)
{
    printf("\n   INFORMACJE O PROGRAMIE \n");

    printf("\n   Nazwa:    Ksiazka telefoniczna wersja ANSI-C 0.8d"
           "\n   Autor:    Piotr Grabowski [email protected] www.kursc.prv.pl"
           "\n   Opis:     Program umozliwia wprowadzanie, usuwanie,"
           "\n             wyszukiwanie, sortowanie oraz przechowywanie"
           "\n             w pliku danych o numerach telefonicznych"
           "\n   Data:     10.2000"
           "\n   Licencja: public domain \n");

    printf("\n   Jeszcze do zrobienia: \n"
           "\n    1) Wybor pliku do zapisu"
           "\n    2) Opcja programu - pomoc \n");

    printf("\n   Poprawiono juz do tej wersji: \n"
           "\n    1) Blad zwiazany z buforem klawiatury"
           "\n    2) Bledy zapisu i odczytu danych z pliku"
           "\n    3) Wiele innych niedociagniec... \n");

    potwierdzenie();
}
/* * * * * * * * * * * *  KONIEC PLIKU telefony.c  * * * * * * * * * */

Pozostało 580 znaków

2007-07-09 19:54
_amator
0

Wystarczy sprawdzić to co zostało wprowadzone w funkcji: int dodaj_wpis(void) dla baza[numer].personalia, można to zrobić np w ten spoób:
do
{
printf("\n Nazwisko i imie: ");
gets(baza[numer].personalia);

            if (strlen(baza[numer].personalia) > 48)
                    printf("\n   Mozna wpisac maksymalnie 48 znakow! \n");
    } while (strlen(baza[numer].personalia) > 48);

Pozostało 580 znaków

2007-07-09 19:59
0

Co zrobić, zeby numer telefonu można było wpisywać tylko numerycznie?

    char* ptr;
    do
    {
        ptr=text;
        scanf("%19s",baza[numer].telefon);
        while(isdigit(*ptr)&&*ptr)++ptr;
        if(*ptr)printf("\n   zły format numeru!!! \n");
    }while(*ptr);

Pozostało 580 znaków

2007-07-09 20:02
_amator
0

sorry mam mały problem z edycja jeszcze raz:
Wystarczy sprawdzić to co zostało wprowadzone w funkcji: int dodaj_wpis(void) dla baza[numer].personalia, można to zrobić np w ten spoób:
do
{

           printf("\n   Telefon:          ");
            gets(baza[numer].telefon);
            if (!sprawdz(baza[numer].telefon))
                    printf ("\n Bledny numer \n");
            if (strlen(baza[numer].telefon) > 18)
                    printf("\n   Mozna wpisac maksymalnie 18 znakow! \n");
    } while (strlen(baza[numer].telefon) > 18 || !sprawdz (baza[numer].telefon));

int sprawdz (char *ptr) {

   for ()

}

Pozostało 580 znaków

2007-07-09 20:24
0

idąc metodą 0x666 po wstawieniu kodu do DEV-C++ w linijce

                ptr=text;

program pokazuje komunikat:

In function dodaj_wpis': text' undeclared (first use in this function)

natomiast przy wersji amatora problem pojawia sie w linijce:

int sprawdz (char *ptr) {

a mianowicie chodzi o komunikat "syntax error before ")" token"

co moze tu stanowic prolbem?:/

Pozostało 580 znaków

2007-07-09 20:44
0
bart87 napisał(a)

idąc metodą 0x666 po wstawieniu kodu do DEV-C++ w linijce


ptr=text;
> 
> program pokazuje komunikat: 
> 
> In function `dodaj_wpis': 
> `text' undeclared (first use in this function)

AAaaa daj
```cpp
char* ptr=baza[numer].telefon;

Pozostało 580 znaków

2007-07-09 21:15
0

Poprzedni problem zniknął, natomiast pojawił sie problem tego typu: Wystąpił problem z aplikacją Telefony.exe i zostanie ona zamknięta. Przepraszamy za kłopoty. Mam do wyboru opcje: wyslij raport o błędach albo nie wysyłaj (kto ma XPka to wie o co chodzi ;) )

Pozostało 580 znaków

2007-07-09 22:41
0

Ogólnie to zamiast gets użyj scanf z ograniczeniem string'a (tak jak podałem w kodzie powyżej).

Takie coś:

gets(baza[numer].personalia);
if(strlen(baza[numer].personalia) > 48)
 [...]

przy wpisaniu powyżej 50 znaków spowoduje zapis poza tablicą, a to jest (dość perfidny) błąd.

Pozostało 580 znaków

2007-07-10 10:41
0

czyli zamiast standartowego:

do
        {
                printf("\n   Telefon:          ");
                gets(baza[numer].telefon);
                if (strlen(baza[numer].telefon) > 18)
                        printf("\n   Mozna wpisac maksymalnie 18 znakow! \n");
        } while (strlen(baza[numer].telefon) > 18);

powinno być zmodyfikowane:

char* ptr;
        do
        {
                char* ptr=baza[numer].telefon;
                scanf("%19s",baza[numer].telefon);
        if(strlen(baza[numer].telefon) > 10)
                while(isdigit(*ptr)&&*ptr)++ptr;
                if(*ptr)printf("\n   zły format numeru!!! \n");
        }while(*ptr);

tak?

Pozostało 580 znaków

2007-07-10 11:33
0

A po co to:

if(strlen(baza[numer].telefon) > 10)

??? Do tego co napisałem wcześniej nie trzeba żadnych strlen. Można jeszcze jeszcze dodać:

...
if(*ptr)printf("\n   zły format numeru!!! \n");
else if(ptr-baza[numer].telefon<7)
      {
          printf("\n   numer zbyt krótki!!! \n");
          ptr=baza[numer].telefon; //<--- coby nie skończyła się pętelka 
      }

Pozostało 580 znaków

2007-07-10 12:07
0

no ale jak wrzuce to:

char* ptr;
        do
        {
                char* ptr=baza[numer].telefon;
                scanf("%19s",baza[numer].telefon);
                while(isdigit(*ptr)&&*ptr)++ptr;
                if(*ptr)printf("\n   zły format numeru!!! \n");
        }while(*ptr);

to windows wyswietla mi błąd systemu :/

chyba, ze ma być tak:

char* ptr;
        do
        {
                char* ptr=baza[numer].telefon;
                ptr=text;
                scanf("%19s",baza[numer].telefon);
                while(isdigit(*ptr)&&*ptr)++ptr;
                if(*ptr)printf("\n   zły format numeru!!! \n");
        }while(*ptr);

??

ewentualnie co zrobic z tym:

ptr=text;

?

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