Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [c++] problem z wprowadzaniem danych
1010
post
Post #1





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ilware
post
Post #2





Grupa: Zarejestrowani
Postów: 248
Pomógł: 31
Dołączył: 14.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


tz jak spację?klasa string normalnie przyjmuje spacje,wczytywanie zakańcza się dopiero po wciśnięciu enteru
Go to the top of the page
+Quote Post
zegarek84
post
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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

Ten post edytował zegarek84 31.05.2011, 11:05:32
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 20:55