Dodawanie wprowadzonego przez uzytkownika slowa do innego.

Dodawanie wprowadzonego przez uzytkownika slowa do innego.
NE
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:22
0

Wiem ze to bardzo podstawowe pytanie, ale zapomnialem, czytalem o sprintf'ie ale nie wiem, mam slowo, i do niego potem chce dodac podane przez uzytkownika slowo w programie, probuje cos takiego ale mysle ze to malo eleganckie...

Kopiuj
  char buffer[80];
  char ch,*word;
  int i=0;
  
  while((ch = getch()) != ENTER){
    word[i] = ch;
    ++i
      }
  sprintf (buffer, "Slowo+", word);

W sumie tez nie zabardzo wiem jak zaalokowac pamiec dla tablicy "word", no i jak dodac do tego slowa, tak zeby do tego z nawiasu "Slowo+" od razu za, bylo dodane te slowo ktore poda uzytkownik, tez chyba koslawo pobieram input, ale nie wiem jak moglbym to zrobic lepsza metoda.

edytowany 1x, ostatnio: Nejm
kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:10 dni
  • Lokalizacja:Łódź
  • Postów:1402
0
Kopiuj
 word[i] = ch;

Przypisujesz do nieprzydzielonej pamięci... Czuję tu BUM


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
KM
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 4 lata
  • Postów:473
0

char *word
A alokacja pamięci gdzie?
Zapisujesz pobrane znaki do tablicy, której nie zaalokowałeś. Coś takiego może działać tylko przez przypadek.
Musisz napisać: char word[ileśtam] (zadeklarowałeś wcześniej rozmiar buffer na 80, napis "Slowo+" ma 6 znaków, więc sensowna zdaje się deklaracja char word[80-6])
Ewentualnie, jeśli chcesz móc zmieniać długość tablicy w trakcie działania programu, to możesz poczytać o funkcjach malloc, calloc, realloc, free... Ale to, co napisałem wyżej, to prostsze podejście.

Następne sprawy:
Jeśli chcesz pobrać od użytkownika całą linijkę tekstu, to nie ma sensu robić tego „na piechotę”, tak jak Ty to robisz. Poczytaj o funkcji fgets.
A, i oczywiście zdajesz sobie sprawę, że pobierasz od użytkownika całą linijkę tekstu, a nie pojedyncze słowo?
Nie masz średnika po ++i.
Źle używasz sprintf. Funkcje tego rodzaju potrzebują mieć podane „na tacy”, gdzie mają wsadzić jakie zmienne. sprintf(buffer, "Slowo+", word) zignoruje ciąg znaków word i wsadzi do buffer literalnie napis Slowo+. Musisz napisać: sprintf(buffer, "Slowo+%s", word), wtedy zadziała. A najlepiej to używać snprintf zamiast sprintf.
sprintf działa prawie tak samo jak printf. Postaraj się wpierw porządnie ogarnąć printf, to łatwo zrozumiesz snprintf.

Tak na poważnie, to postaraj się robić powoli ale dokładnie jakiś tutorial C, bo zdaje się, że nie ogarniasz najprostszych rzeczy (bez urazy). Może najchętniej jakiś tutorial, który nie będzie korzystał z conio.h, ale w sumie może to i bez znaczenia na razie.

Link do gotowca:
http://ideone.com/3683bd

edytowany 1x, ostatnio: kmph
NE
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:22
0

nie wchodze na ideone.com
sam napisalem jedna funkcje, jesli cos byscie w niej poprawili to piszcie

Kopiuj
char *receiveInput(){
  char *s = malloc(100 * sizeof(char));
  scanf("%99s", s);
  return s;
}
KM
Skoro już upierasz się przy dynamicznej alokacji (czy to nie strzelanie do wróbla z armaty w tym momencie?), to mam nadzieję że pamiętasz, by później tę pamięć zwolnić?
KM
Ale poza tym, to wygląda, że działa. I nawet wczytujesz tylko jedno słowo, a nie całą linijkę. Jak chcesz, to możesz wrzucić tu całość Twojego kodu, gdy już będzie działał, albo gdy nie będziesz sobie z czymś radził.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.