C problem z bazą imion.

1

Mam problem, usiłuję zrobić baze danych w jezyku C składającą się z imion i nazwisk. Ponizej zamieszczam schemat programu, problemem jest to ze nie nadpisuje nowych danych tylko zmienia zapisane wczesniej. Prosze o pomoc.

 #include <stdio.h>


int main (void)
{
    char imie[100],nazwisko[100];                   //tablice na imie i nazwisko mieszczace 100 znakow
    int lista[100][2];                            //lista imion i nazwisk
    int a,b,c,d;
    a=0;
    b=0;
    c=0;
    d=1;
        for(a=0; a<=99; ++a)
        {
         printf("Podaj autora \n");
         scanf("%99s %99s",&imie,&nazwisko);

                     lista[a][b]=imie;
                     lista[a][d]=nazwisko;

         printf("\n%s %s \n",lista[a][b],lista[a][d]);  
         printf("\n%s %s \n",lista[0][0],lista[0][1]); 

         printf("\nczy chcesz wprowadzic kolejna pozycje? jesli tak wcisnij 1 jesli nie wcisnij 2 \n");      
         scanf("%d",&c);
         if(c==2)
         {
system("PAUSE");	
return 0;
} 
1

o_O? Ale co to w ogóle jest? Zrobiłeś tablicę lista która przechowuje LICZBY i się dziwisz czemu nie dajesz rady wpisać tam słów? o_O

0

Zrobiłem tak bo nie działa na char'ach (kompiluje się ale przy wprowadzeniu 2 nazwiska program się sypie), gdyby to było takie proste to sam bym na to wpadł :)

0
zenek90 napisał(a)

Zrobiłem tak bo nie działa na char'ach (kompiluje się ale przy wprowadzeniu 2 nazwiska program się sypie), gdyby to było takie proste to sam bym na to wpadł :)

Proszę Pana, z tego co widzę jest Pan kompletnym laikiem, nie mającym o programowaniu w tym języku. Zagadnienie, które sprawia Panu problem jest trywialne, a jego rozwiązanie polega na zerknięciu do podręcznika języka C. Robi Pan podstawowe błędy, nie mówiąc już o estetyce pracy. To co Pan napisał po prostu nie trzyma się kupy. Jeżeli jest Pan studentem (zagadnienie typowo projektowe) to doskonale obrazuje Pan tragiczny poziom polskich uczelni technicznych. Krótko mówiąc: do nauki!

0

Przepraszam ale nie rozumiem o co Panu chodzi, co do estetyki programu, przeglądałem podręczniki ale nic nie mogłem w nich znaleźć. Dostałem taki projekt na 1 roku więc mam prawo nie umieć wszystkiego dlatego zwróciłem się o pomoc na forum.

1
scanf("%99s %99s",imie,nazwisko);

bez ampersandu bo imie już jest wskaźnikiem do tablicy charów.

1

Oczywiście że nie działa na charach bo powinieneś tam mieć tablicę charów, to raz. Dwa, kopiowanie napisów w C robi sie za pomocą strcpy / strncpy ale żeby o tym wiedzieć trzeba najpierw coś przeczytać na ten temat :)

0

poczytam i zobaczymy czy podziała :)

0

Poczytałem trochę o strcpy i rzeczywiście jest to bardzo przydatna funkcja, pogodziła nawet problem z kopiowaniem tablicy char do char więc za to wielkie dzięki ale nadal pozostaje problem z dopisywaniem nowych wartości do tablicy.

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

int main(void)
{
    char *imie[100],*nazwisko[100];                         //tablice na imie i nazwisko mieszczace 100 znakow
    char lista[100],lista2[100];                            //lista imion i nazwisk
    int a,b,c,d;
    a=0;
    b=0;
    c=0;
    d=1;
        for(a=0; a<=99; ++a)
        {
         printf("Podaj autora \n");
         scanf("%99s %99s",&imie,&nazwisko);
 
                     strcpy(lista,imie);
                     strcpy(lista2,nazwisko);
                     puts(lista);
                     puts(lista2);
 
         printf("\nczy chcesz wprowadzic kolejna pozycje? jesli tak wcisnij 1 jesli nie wcisnij 2 \n");      
         scanf("%d",&c);
         
         if(c==2)
         {
                       break;
         }    
        
        } 
        
        for(a=0; a<=10; ++a)
        {
         printf("lista  "); puts(lista);
         printf("lista2 "); puts(lista2);       
        }        
  system("PAUSE");	
  return 0;
}
1

Szkoda słów.

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

#define n 100

struct Osoba{
    char imie[100];
    char nazwisko[100];
};

void wypisz(struct Osoba* lista, int rozmiar);

int main(void)
{
    struct Osoba lista[n];
    int i;
    int kontynuuj = 1;
    int wprowadzone = 0;
    for(i=0; i<n && kontynuuj!=0; i++)
    {
        printf("Podaj autora \n");
        scanf("%99s %99s",lista[i].imie,lista[i].nazwisko);
        printf("\nczy chcesz wprowadzic kolejna pozycje? jesli nie wcisnij 0, w przeciwnym wypadku podaj dowolna liczbe > 0\n");
        scanf("%d",&kontynuuj);
        wprowadzone++;
    }
    wypisz(lista,wprowadzone);
    return 0;
}

void wypisz(struct Osoba* lista, int rozmiar){
    int i;
    for(i=0;i<rozmiar;i++){
        printf("%s %s\n",lista[i].imie, lista[i].nazwisko);
    }
}

I ani mi się waż pisac że "nie znam struktur". Jak nie znasz to doczytaj.

0

Dzięki za pomoc. Idę doczytać w dziedzinie struktur:)

0

Rozwiązanie Shaloma +1 oczywiście, ale wtrącę swoje trzy grosze:
Powinieneś też poczytać o wskaźnikach bo

  char *imie[100],*nazwisko[100];                         //tablice na imie i nazwisko mieszczace 100 znakow

to są tablice WSKAŹNIKÓW na char. Gdybyś zadeklarował pamięć dla tych wskaźników, to mogłyby mieścić dane. Inaczej można to zrealizować umieszczając w każdym elemencie tablicy tablicę. Otrzymamy wtedy tablicę dwuwymiarową imiona[100][100]

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