Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [c++] problem z wprowadzaniem danych
Forum PHP.pl > Inne > Hydepark
1010
witajcie, mam taki problem

mam funkcję o takich argumentach:

  1. void funkcja(char *nazwa, char *opis){
  2. //
  3. }


i jak chce ja wywołać to mogę zrobić:

  1. int main(){
  2. char *nazwa = "jakas wartosc";
  3. char *opis = "opis";
  4.  
  5. funkcja(nazwa, opis);
  6. }


i wszystko działa, jednak jeśli chcę, żeby dane mógł wprowadzać użytkownik to nie wiem jak to zrobić, bo musiałbym zrobić

  1. char nazwa[50], opis[50]; //lub jakos podobnie?
  2.  
  3. cin >>nazwa;
  4. cin >>opis;
  5. funkcja(&nazwa, &opis);


ale wtedy jest konflikt typów, właśnie przez to 50. Jak takie coś rozwiązać?

Domyślam się, że może tutaj chodzić o dynamiczną alokację pamięci, jednak nie wiem jak to rozwiązać.
Ilware
użyj klasy string, potem rzutuj ją na char,ew nie przekazuj zmiennych jako wskaźniki
1010
czyli do wczytywania danych mam użyć string, które później mam rzutować do char i potem przekazywać do parametrów funkcji?

EDIT: Dzięki, działa

PS: Forum nie na temat c++ ale zawsze wiedziałem, że tutaj są fachowcy wink.gif Ja w C++ niestety takim jeszcze nie jestem

Pozdrawiam
Ilware
tak, mniej więcej tak

tutaj jest kod pisany z palca,ale powinien chyba działać

  1. #include <iostream>
  2. #include <cstring>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. void funkcja( char * first, char * second ){
  8. cout<< *first<<"\n"<<*second;
  9. }
  10.  
  11. int main(int argc, char *argv[])
  12. {
  13. string a,b;
  14. cin>>a;
  15. cin>>b;
  16.  
  17. funkcja( (char *)a.c_str(), (char *)b.c_str() );
  18. system("PAUSE");
  19. return EXIT_SUCCESS;
  20. }
1010
a jak mógłbym to jeszcze przerobić, aby wprowadzane dane mogły mieć spację?
Ilware
tz jak spację?klasa string normalnie przyjmuje spacje,wczytywanie zakańcza się dopiero po wciśnięciu enteru
zegarek84
Cytat(Ilware @ 31.05.2011, 01:05:07 ) *
tz jak spację?klasa string normalnie przyjmuje spacje,wczytywanie zakańcza się dopiero po wciśnięciu enteru

ale strumień wejścia zakończył pracę na spacji...

Cytat
Spacja, tabulator, powrót karetki kończą dane. Aby wczytywać całe linie tekstu, można zastosować funkcję cin.getline(tekst, sizeof(tekst)):
Kod
char dane[64];
cout <<"\nWprowadz nazwisko i imie i nacisnij ENTER" << endl;

cin.getline(dane, sizeof(dane));
cout << "Wpisales:" << dane << "\n\n\n";

Wywołanie funkcji cin.getline (tekst, 64, 'X') sprawia, że wczytywana będzie linia tekstu aż do wprowadzenia 64 znaków, powrotu karetki lub litery X

i manulal istream::getline

"Thinking in C++" sobie ściągnij ze strony autora - tyle, że będzie po angielsku i w wersji elektronicznej...

ps. tablice są w zasadzie wskaźnikami - Twój poprzedni przykład jest błędny:
Cytat
char nazwa[50], opis[50]; //lub jakos podobnie?

cin >>nazwa; // powinno być cin>>*nazwa; - jest to wskaźnik do tablicy a zarazem do pierwszego znaku tablicy więc prawie to samo co nazwa[0]
cin >>opis;// powinno być cin>>*opis; - jest to wskaźnik do tablicy a zarazem do pierwszego znaku tablicy więc prawie to samo co opis[0]
funkcja(&nazwa, &opis);//w ten sposób adres wyłuskuje się ze "zwykłych" zmiennych - tutaj powinno być samo nazwa i opis - to już są wskaźniki

no i i tak lepiej stosować getline...

ps. fajnie opisane wskaźniki i tablice razem z arytmetyką wskaźników:
http://pl.wikibooks.org/wiki/C/Wska%C5%BAniki
a propo Twojego kodu fragment ze wskazanych wskaźników:
Tablice a wskaźniki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.