[C] wpisywanie znak po znaku, realloc

matma17
Użytkownik
Użytkownik
Posty: 157
Rejestracja: 5 gru 2008, o 17:04
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C] wpisywanie znak po znaku, realloc

Post autor: matma17 »

Witam,
Mam taki problem, muszę wpisywać dane z klawiatury aż do pojawienia się znaku 0.
Napisałem to tak ale program działa nie poprawnie, po wpisaniu 1 znaku się wyłącza.
Oto kod.

Kod: Zaznacz cały

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void wczytaj(char *tab);
int main()
{
char *tab;
wczytaj(tab);

}
void wczytaj(char *tab)
{
       int i=0;
       char znak=1;
       while(znak!=0)
       {
               printf("Podaj znak: 
");
               scanf("%c", &znak);
               tab = (char*)realloc(tab, (i+1)*sizeof(char));
               tab[i]=znak;
               i++;
       }
}
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[C] wpisywanie znak po znaku, realloc

Post autor: bartek118 »

Po pierwsze: powinno być:

Kod: Zaznacz cały

char znak='1';
oraz

Kod: Zaznacz cały

while(znak!='0')
Po drugie - sugeruję dać spację:

Kod: Zaznacz cały

scanf(" %c", &znak);
matma17
Użytkownik
Użytkownik
Posty: 157
Rejestracja: 5 gru 2008, o 17:04
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C] wpisywanie znak po znaku, realloc

Post autor: matma17 »

Dalej nie działa, tak jak powinno.
marcinz
Użytkownik
Użytkownik
Posty: 370
Rejestracja: 26 sty 2010, o 21:41
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 2 razy
Pomógł: 53 razy

[C] wpisywanie znak po znaku, realloc

Post autor: marcinz »

Spróbuj dodać na koniec funkcji main

Kod: Zaznacz cały

return 0;
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C] wpisywanie znak po znaku, realloc

Post autor: miki999 »

A może spróbuj dać char *tab=NULL; w linijce 7.
matma17
Użytkownik
Użytkownik
Posty: 157
Rejestracja: 5 gru 2008, o 17:04
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C] wpisywanie znak po znaku, realloc

Post autor: matma17 »

miki999 pisze:A może spróbuj dać char *tab=NULL; w linijce 7.
Dodałem i działa, ale chyba nie zapisuje do tablicy. Chciałem ją wyświetlić i jest pusta.
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C] wpisywanie znak po znaku, realloc

Post autor: miki999 »

Trochę po omacku, bo nie mam zainstalowanego kompilatora, ale może trafię w problem :)
Zauważ, że do funkcji podajesz jedynie wskaźnik na tab, więc możesz modyfikować wartości, na które on sam wskazuje, a nie jego samego.



Robiąc coś takiego:

Kod: Zaznacz cały

char *wczytaj(char *tab)
{
       int i=0;
       char znak='1';
       while(znak!='0')
       {
               printf("Podaj znak: \n");
               scanf(" %c", &znak);
               tab = (char*)realloc(tab, (i+1)*sizeof(char));
               tab[i]=znak;
               i++;
       }
       return tab;
}
i w mainie wywołując tab= wczytaj(tab);. Powinno według mnie zadziałać.
Ewentualnie do funkcji można by dawać wskaźnik na wskaźnik tablicy.
matma17
Użytkownik
Użytkownik
Posty: 157
Rejestracja: 5 gru 2008, o 17:04
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C] wpisywanie znak po znaku, realloc

Post autor: matma17 »

Teraz już wszystko działa tak jak powinno. Dzięki.
ODPOWIEDZ