Autor Wątek: Przechowywanie x wyrazow do pozniejszego wyswietlenia.  (Przeczytany 4085 razy)

Offline _user

  • Użytkownik

# Maj 09, 2015, 17:05:01
Mam taki kod
#include<stdio.h>

int load(int x[], int y[], char n[]){
  int how_much=0, hm=0;
  scanf("%i", &how_much);
  how_much=hm;

  for(int i=0;i<hm;++i){
    scanf("%s", &n[i]);
    scanf("%i", &x[i]);
    scanf("%i", &y[i]);
  }
  for(int i=0;i<hm;++i){
    printf("%c ", n[i]);
    printf("%i ", x[i]);
    printf("%i ", y[i]);
    printf("\n");
  }
  return 0;
}

int main(void){
  int x[200],y[200];
  char name[200];
  load(x,y,name);
  return 0;
}
Tylko ze wczytuje jeden znak i wypisuje jeden znak a chcialbym zeby zamiast tego wczytalo podana przez uzytkownika ilosc wyrazow o dlugosci 1-10 i wyswietlilo je troche pozniej obok x i y. Gdzie moglbym je przechowac ?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline P@tyS

  • Użytkownik
    • Patys coding

# Maj 09, 2015, 17:17:53
  int how_much=0, hm=0;
  scanf("%i", &how_much);
  how_much=hm;

Przypisujesz zmiennym zero, następnie dla how_much przypisujesz liczbę z wejścia, a następnie dla how_much przypisujesz hm (czyli zero). Możliwe, że powinno być hm=how_much

Offline _user

  • Użytkownik

# Maj 09, 2015, 17:32:07
Faktycznie, okej poprawione, ale  dalej to nie rozwiazuje mojego problemu jak przechowywac dana liczbe slow zamiast pojedynczego znaku.

Offline mawpa

  • Użytkownik

  • +3
# Maj 09, 2015, 17:36:11
Które z zadań ze SPOJa mamy tym razem rozwiązać?

Próbujesz przechowywać tablicę napisów w char[]. Zamiast tego powinieneś użyć char** lub char[][].
« Ostatnia zmiana: Maj 09, 2015, 18:55:34 wysłana przez mawpa »

Offline _user

  • Użytkownik

# Maj 09, 2015, 17:45:15
@mawpa - Kod zadania: PP0506A, i nie masz go calego rozwiazywac, ja chcialbym tylko porade jak przechowywac te rozne zdania, wiec co do tych dwoch sposobow ktore podales to:do char** zapisze sie pare wyrazow ? jak ? a przy char[][] mialem problem wprowadzac dane np scanf("%s", char[i][i]); - nie kompilowalo mi sie to, poprosilbym o informacje jak wczytywac wyrazy do tablicy dwuwymiarowej.
« Ostatnia zmiana: Maj 09, 2015, 18:32:22 wysłana przez _user »

Offline luki992

  • Użytkownik

# Maj 09, 2015, 20:01:04
Spróbuj char*tab[].

Offline _user

  • Użytkownik

# Maj 09, 2015, 20:55:18
sprobowalem
#include<stdio.h>

int load(int x[], int y[], char *n[]){
  int how_much=0, hm=0;
  scanf("%i", &how_much);
  hm=how_much;;

  for(int i=0;i<hm;++i){
    scanf("%s", n[i]);
    scanf("%i", &x[i]);
    scanf("%i", &y[i]);
  }
  for(int i=0;i<hm;++i){
    printf("%s ", n[i]);
    printf("%i ", x[i]);
    printf("%i ", y[i]);
    printf("\n");
  }
  return 0;
}

int main(void){
  int x[200],y[200];
  char *name[200];
  load(x,y,name);
  return 0;
}
ale pewnie zle to zrobilem bo kod nie dziala, dwuwymiarowa tablica bylaby spoko tylko nie wiem jak do niej wczytac dane.

Offline _user

  • Użytkownik

# Maj 09, 2015, 22:48:49
Dobrze by bylo jakby ktos powiedzial gdzie i jak moge przechowac pare slow oraz tez ktos mi niedawno powiedzial ze tablica - tab[2][2] - nie jest to dwuwymiarowa tablica tylko tablica tablic, w c nie ma wielowymiarowych tablic wiec ?

Offline deadeye

  • Użytkownik

# Maj 09, 2015, 23:12:05
Dawno nie oglądałem spoja, ale jeśli nie ma tam wymagań do używania czystego c, to może być sobie zrobił tablicę std::string? O wiele łatwiej to ogarnąć dla początkującego, niż tablice wskaźników na ciągi znaków.

Offline _user

  • Użytkownik

# Maj 09, 2015, 23:40:00
Nie wiem czy sa wymagania ja tam nie oddaje zadan, nie mam tam konta, robie je zeby sie nauczyc, a narazie chce sie c uczyc, tablica wskaznikow na ciagi znakow jak mowisz to bedzie char *tablica[rozmiar] tak ? Nie wiem tylko jak do niej wczytac liczby, czy za pomoca scanf, probowalem juz roznych %s albo %hh ale nie wiem, i jak potem to wyswietlic, printf ? Zrobilbym ta tablica ale nie wiem jak tam wczytac ani jak wyswietlic, czy scanf'em/printf'em czy moze czyms innym albo z innymi parametrami, szperalem w sieci ale ciezko mi znalezc.
« Ostatnia zmiana: Maj 09, 2015, 23:41:59 wysłana przez _user »

Offline timus

  • Użytkownik

# Maj 10, 2015, 00:28:23
Z tego co kojarzę to w języku c [][] to tablica dwuwymiarowa(dane są ułożone po kolei w pamięci) a tablicy tablic nie nie ma(trzeba samemu zrobić) a w innych językach zazwyczaj wielowymiarowe to [,] a [][] to właśnie tablice tablic(jak się mylę to niech ktoś mnie naprostuje).

Co do kodu to widzę postęp bo kod wymagał tylko małych przeróbek aby działał:
#include <stdio.h>

int load(int x[], int y[], char n[][10])
{
  int how_much = 0, hm = 0;
  scanf("%i", &how_much);
  hm = how_much;

  for(int i = 0; i < hm; ++i)
  {
    scanf("%s", &n[i]);
    scanf("%i", &x[i]);
    scanf("%i", &y[i]);
  }
 
  for(int i = 0; i < hm; ++i)
  {
    printf("%s ", &n[i]);
    printf("%i ", x[i]);
    printf("%i ", y[i]);
    printf("\n");
  }
  return 0;
}

int main(void)
{
  int x[200], y[200];
  char name[200][10];
  load(x, y, name);
  return 0;
}

Offline _user

  • Użytkownik

# Maj 10, 2015, 01:42:23
oo, dzieki wielkie ! Wlasnie blad robilem przy podawaniu tej tablicy dwu wymiarowej do funkcji, ciagle probowalem tablica[][] a tu trzeba bylo tablica[][10] :)
« Ostatnia zmiana: Maj 10, 2015, 12:30:26 wysłana przez _user »

Offline _user

  • Użytkownik

# Maj 10, 2015, 12:34:50
Chce jeszcze zapytac jak moge wyswietlic te dane w kolejnosci alfabetycznej ?
zrobilem cos takiego:
  for (int i = 1; i < hm; i++) {
    for (int j = 1; j < hm; j++) {
      if (strcmp(n[j - 1], n[j]) > 0) {
strcpy(t, n[j - 1]);
strcpy(n[j - 1], n[j]);
strcpy(n[j], t);
      }
    }
  }
Wyswietla wyrazy w kolejnosci alfabetycznej ale do tych wyrazow byly przypisane tez dwie liczby calkowite i ich nie sortuje razem z nimi, co moglbym na to poradzic ?
« Ostatnia zmiana: Maj 10, 2015, 12:59:49 wysłana przez _user »

Offline Kyroaku

  • Użytkownik

  • +1
# Maj 10, 2015, 13:23:32
Cytuj
Wyswietla wyrazy w kolejnosci alfabetycznej ale do tych wyrazow byly przypisane tez dwie liczby calkowite i ich nie sortuje razem z nimi, co moglbym na to poradzic ?
Odpowiedź:
  for (int i = 1; i < hm; i++) {
    for (int j = 1; j < hm; j++) {
      if (strcmp(n[j - 1], n[j]) > 0) {
        strcpy(t, n[j - 1]);
        strcpy(n[j - 1], n[j]);
        strcpy(n[j], t);
      }
    }
  }
Pro Tip: Czytaj kod, który kopiujesz z internetu.

Czekam na flame, jaki to mój post jest bezużyteczny :)

Offline _user

  • Użytkownik

# Maj 10, 2015, 13:36:12
Odpowiedź:
  for (int i = 1; i < hm; i++) {
    for (int j = 1; j < hm; j++) {
      if (strcmp(n[j - 1], n[j]) > 0) {
        strcpy(t, n[j - 1]);
        strcpy(n[j - 1], n[j]);
        strcpy(n[j], t);
      }
    }
  }
Gdzie tu odpowiedz ? Przeciez to ten sam kod ktory wkleilem.
Pro Tip: Czytaj kod, który kopiujesz z internetu.
Czytam i wiem jak on dziala, ale co z tego skoro nie w tym problem ?