• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czyszczenie tablicy char znajdującej się w strukturze

0 głosów
81 wizyt
pytanie zadane 12 maja w C i C++ przez Białozór Użytkownik (730 p.)

Na trzy sposoby próbowałam wyczyścić tablice char znajdującą się w strukturze, tak by móc edytować dane znajdujące się w niej. Żaden z nich nie zadziałał, co mogę w nich poprawić, lub jakie inne rozwiązanie zastosować?

(TablicaOsob[atoi(osobazm)].imie).clear()

("%s", TablicaOsob[atoi(osobazm)].nazwisko)=NULL;

char * tab = malloc(20);
            memset(tab, 0, 0 * sizeof(char));

 

komentarz 12 maja przez RafalS VIP (113,290 p.)
pokaż definicję struktury
komentarz 12 maja przez Białozór Użytkownik (730 p.)
struct Osoba {
    char imie[20];
    char nazwisko[20];
    char rokurodzenia[10];
    char numerkonta[27]; // +1
    char nazwabanku[20];
    char kwota[20];
};
 
 
struct Osoba TablicaOsob[10] = {
    { "Karol","Kot","1998","31415926535897932384626433","Bank Bank","13248" },
    { "Karol","Kot","1998","31415926535897932384626433","Bank Bank","13246" },
    { "Karol","Kot","1998","31415926535897932384626433","Bank Bank","13247" }
};

1 odpowiedź

+1 głos
odpowiedź 12 maja przez RafalS VIP (113,290 p.)
wybrane 12 maja przez Białozór
 
Najlepsza

wyczyścić tablice char znajdującą się w strukturze, tak by móc edytować dane znajdujące się w niej

Cały czas możesz je edytować. Domyślam się jednak, że próbujesz wykorzystać string literal np "dupa". Skorzystać z niego można tylko przy inicjowaniu zmiennej, a nie przy zmianie wartości istniejącej zmiennej:

char s[] = "dupa"; // ok
s = "dupa2"; // tak nigdy nie mozna

 Po utworzeniu musisz przeiterować po elementach:

	for (int i = 0; i < len; i++)
	{
		s[i] = ' ';
	}

lub użyc memset:

memset(s,' ',len)

Te kody:

(TablicaOsob[atoi(osobazm)].imie).clear()
 
("%s", TablicaOsob[atoi(osobazm)].nazwisko)=NULL;

są totalnie wyssane z palca i nie mają żadnego sensu. W ostatniej próbie byłeś blisko. Choć nie możesz przypisać czegoś do tablicy więc malloc nie zadziałał, a 0*sizeof(char) to wciąż 0 :P. Więc próbowałeś ustawić 0 elementów.

komentarz 12 maja przez niezalogowany

to co wcześniej pisałem

scanf("%i", num)  

//powino być 

scanf("%i", &num)  //referencja do zmiennej

https://pl.wikibooks.org/wiki/C/Podstawowe_procedury_wej%C5%9Bcia_i_wyj%C5%9Bcia

printf(num); // num jest int

printf("%d",num)

komentarz 12 maja przez Białozór Użytkownik (730 p.)
Jasne, poprawione, teraz program uruchamia się lecz nie następuje zerowanie imienia. Sprawdziłam jeszcze działanie dla memset, (skomentowany w kodzie), efekt jest taki sam.
komentarz 12 maja przez Białozór Użytkownik (730 p.)

#include <stdio.h>
#include <stdlib.h>
  
struct Osoba {
    char imie[20];
    char nazwisko[20];
    char rokurodzenia[10];
    char numerkonta[27]; // +1
    char nazwabanku[20];
    char kwota[20];
};


  
struct Osoba TablicaOsob[10] = {
    { "Karol","Kot","1998","31415926535897932384626433","Bank Bank","13248" },
    { "Karol","Kot","1998","31415926535897932384626433","Bank Bank","13246" },
    { "Karol","Kot","1998","31415926535897932384626433","Bank Bank","13247" }
};
  
static int liczba_osob =3;
int main(void) {
    while(1) {
  
        int num;
        //suma=0;
        
  
        int najwieksza;
        najwieksza=0;
        char wybor = 0;
  
  
        printf("wpisz 1\t  Jeśli chcesz wyświetlić pełną listę kont \n");
        printf("wpisz 5\t  Jesli chcesz zmienic dane");
         
  
        wybor = 0;
        wybor=getchar();
        getchar();
  
        switch(wybor) {
        case '1':
            printf("W tablicy struktur ListaOsoba typu Osoba  mamy nastepujace dane:\n");
            for (int i = 0; i < liczba_osob; i++) {
                printf("TablicaOsob[%d]\n", i);
                printf("imie: %s,   nazwisko: %s\n, rokurodzenia: %s\n, numerkonta: %s\n,   nazwabanku: %s\n,   kwota: %s\n \n", TablicaOsob[i].imie, TablicaOsob[i].nazwisko, TablicaOsob[i].rokurodzenia, TablicaOsob[i].numerkonta, TablicaOsob[i].nazwabanku, TablicaOsob[i].kwota);
             
                 
            }
  
            break;
  
        case '5':
  
        
        printf("podaj nr tablicy danej osoby:");
        scanf("%i", &num);
        getchar();
        printf("\n");
        printf("%d", num);
        char imie2[20];
        printf("podaj imie:");
        scanf("%s", imie2);
        getchar();
            for (int i = 0; i < 20; i++)
                {
                  TablicaOsob[liczba_osob].imie[i] = ' ';
                }
            //memset(TablicaOsob[liczba_osob].imie,' ',20);
          /*   for (int i = 0; i < 20; i++)
                {
                   TablicaOsob[liczba_osob].imie[i] = imie2[i];
                  
                } */
            printf("imie nowe: %s\n", TablicaOsob[liczba_osob].imie);
 
            //getchar();
            break;
         
            //case 20:
            //return 0;
  
        }
 
    }
}

 

komentarz 12 maja przez niezalogowany

już wykasowałem pliki z zadaniem więc nie mogę sprawdzić, ale może zaczynimy od tego

TablicaOsob[num].imie[i] = ' ';

 printf("imie nowe: %s\n", TablicaOsob[num].imie);

i na razie włączyć to

// char imie2[20];

      //  printf("podaj imie:");

     //   scanf("%s", imie2);

 

komentarz 12 maja przez Białozór Użytkownik (730 p.)
To działa! Dziękuję bardzo.

Podobne pytania

0 głosów
2 odpowiedzi 117 wizyt
pytanie zadane 14 sierpnia 2015 w C i C++ przez Shiro Stary wyjadacz (10,040 p.)
0 głosów
2 odpowiedzi 385 wizyt
pytanie zadane 24 stycznia 2017 w C i C++ przez spvce Początkujący (260 p.)
0 głosów
1 odpowiedź 95 wizyt
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

66,453 zapytań

113,207 odpowiedzi

239,680 komentarzy

46,704 pasjonatów

Przeglądających: 286
Pasjonatów: 16 Gości: 270

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...