Автор Тема: Грешка в С++ програма.  (Прочетена 3058 пъти)

renesans

  • Напреднали
  • *****
  • Публикации: 28
    • Профил
Грешка в С++ програма.
« -: May 22, 2010, 19:38 »
Ето го кода:
Код
GeSHi (C++):
  1. struct infoSastezateli {
  2.  
  3.        unsigned int nomer;
  4.        string ime;
  5.  
  6.        int postijenie;
  7.        string darjava;
  8.  
  9.  
  10.  
  11. };
  12.  
  13. int vavejdane()
  14. {
  15.        int i;
  16.        cout<<"Въведете броя на състезателите: "; cin>>i;
  17.                struct infoSastezateli sastezatel[i];
  18.  
  19.                for(int br=0; br<i; br++ )
  20.                {
  21.                     cout<<"Въведете номер на състезателя: ";cin>>sastezatel[br].nomer;
  22.                     cout<<"Въведете име и фамилия на състезателя: ";cin>>sastezatel[br].ime;
  23.                     cout<<"Въведете постижение на състезателя: ";cin>>sastezatel[br].postijenie;
  24.                     cout<<"Въведете държава на състезателя: ";cin>>sastezatel[br].darjava;
  25.  
  26.  
  27.                }
  28.  
  29.                for(int br=0; br<i; br++ )
  30.                {
  31.                     cout<<sastezatel[br].nomer<<endl;
  32.                }
  33. }


Обаче при опит да въведа Име и Фамилия между които има шпация нещата стават много омазани.
Пробвах да е:
char ime[60];
char *ime;

обаче нещата са същите.
Някакви идеи?
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Грешка в С++ програма.
« Отговор #1 -: May 22, 2010, 19:50 »
Код:
man gets
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
Re: Грешка в С++ програма.
« Отговор #2 -: May 22, 2010, 20:05 »
Миля, че това ще ти помогне:
http://www.cplusplus.com/reference/iostream/istream/getline/
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

renesans

  • Напреднали
  • *****
  • Публикации: 28
    • Профил
Re: Грешка в С++ програма.
« Отговор #3 -: May 22, 2010, 20:06 »
Код:
man gets
Това не е ли чиста С функция?
Активен

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
Re: Грешка в С++ програма.
« Отговор #4 -: May 22, 2010, 20:16 »
Ето ти цитат от " Програмиране на С++ първа част" на Магдалина Тодорова.

Функция getline
    Синтаксис

    cin.getline(<var_str>, <size> [,<char>]опц)
където
  • <var_str> е променлива от тип низ;
  • <size> е цял израз;
  • <char> е произволен символ.
Ако параметърът <char> е пропуснат, подразбира се символът '\n'

   Семантика

Въвежда от буфера на клавиатурата редица от символи с максимална дължина <size>-1. Въвеждането продължава до срещане на символа зададен в <char>, или до въвеждане на <size>-1 символа (ако междувременно не е достигнат символа <char>). Въведената редица от символи се преобразува в низ и става стойност на променливата <var_str>.

п.с. Между другото този учебник е хубав, ако не си го чел го прегледай. Аз тепърва се захващам с С++ и пише на достатъчно достъпен език.
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

renesans

  • Напреднали
  • *****
  • Публикации: 28
    • Профил
Re: Грешка в С++ програма.
« Отговор #5 -: May 22, 2010, 20:23 »
Ами благодаря за инфото, задачата е на приятелката ми обаче аз нямам никакво голямо желание да се захващам със С++ в детайли но тя пък се ужасява от програмирането още (не питайте какво учи) има  някакво понятие от С но някой неща не са ми ясни в С++ за да и помогна.
Ще погледна линковете, но неразбрах коя е книгата всъщност.
Мисля че ще ми се наложи да питам още за задачата ако не се справя или поне за полезни линкове.
Активен

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
Re: Грешка в С++ програма.
« Отговор #6 -: May 22, 2010, 20:25 »
Книгата ти я казах "Програмиране на С++ първа част" се казва автор е Магдалина Тодорова от СУ е мисля.

п.с. Има я и в нета обаче си я намери сам тъй като не знам дали има съгласие от автора за електронно разпространение.
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

chen_dzen

  • Напреднали
  • *****
  • Публикации: 623
  • Distribution: Debian 6.0 Squeeze
  • Window Manager: GNOME
    • Профил
Re: Грешка в С++ програма.
« Отговор #7 -: May 22, 2010, 20:33 »
ами ти си дефинирал масив от 60 символа .След исписването на специален символ интервал следващите данни отивът във входния буфер .По добре помисли вариант с три променливи или двумерен масив.
ама всъщност има много готина функция getline().
 ???  ;D
« Последна редакция: May 22, 2010, 20:47 от chen_dzen »
Активен

c111100101

  • Гост
Re: Грешка в С++ програма.
« Отговор #8 -: May 22, 2010, 21:14 »
Що не дадеш условието на задачата?
Активен

renesans

  • Напреднали
  • *****
  • Публикации: 28
    • Профил
Re: Грешка в С++ програма.
« Отговор #9 -: May 22, 2010, 23:06 »
Да се състави програма за обслужване на ски-състезание. За всеки състезател се въвежда следната информация: номер, име и фамилия, постижение, държава. Програмата да дава възможност за получаване на следните резултати:

1.      Извеждане на списък на всички състезатели с въведените данни за тях;

2.      Извеждане на списък на всички  състезатели, подредени в низходящ  ред на постиженията им. Ако има състезатели с едно и също постижение, по-напред в списъка да се изведе този, чието име започва с по-предна буква от азбуката.

3.      Пресмятане и извеждане на средното постижение на състезателите;

4.      Извеждане на списък на всички състезатели от дадена държава, които имат постижение по-ниско от средното за състезанието.
Активен

Arvigeus

  • Напреднали
  • *****
  • Публикации: 123
  • Distribution: Arch Linux
  • Window Manager: Whatever
    • Профил
Re: Грешка в С++ програма.
« Отговор #10 -: May 22, 2010, 23:36 »
Елементарно предложение: съхрани името и фамилията като 2 отделни променливи. cin>> има навика да разделя думите. И после cin>>Ime>>Familia;
Активен

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
Re: Грешка в С++ програма.
« Отговор #11 -: May 22, 2010, 23:49 »
Абе какъв е тоя мазохизъм какво му е на getline че предлагате да се заемат две променливи със cin? Не съм програмист и съм зле със С++ ако е по-удачно така моля някой да ми каже защо?
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

schemer

  • Напреднали
  • *****
  • Публикации: 49
  • Distribution: Debian
  • Window Manager: Gnome 2
    • Профил
Re: Грешка в С++ програма.
« Отговор #12 -: May 22, 2010, 23:51 »
Елементарно предложение: съхрани името и фамилията като 2 отделни променливи. cin>> има навика да разделя думите. И после cin>>Ime>>Familia;

// offtopic

Компютрите нямат навици, а ясно дефинирано поведение.
Активен

renesans

  • Напреднали
  • *****
  • Публикации: 28
    • Профил
Re: Грешка в С++ програма.
« Отговор #13 -: May 23, 2010, 22:54 »
Добре де какво правя не както трябва че cin.getline() не работи коректно?
При компилация компилатора не отчита грешка обаче при изпълнение редовете в които извиквам фикцията се прескачат и се минава направо на тези дето са си само с cin?

Как може да мога да я направя да работи нормално в С а в С++ да не става?
Активен

remotex

  • Напреднали
  • *****
  • Публикации: 344
    • Профил
Re: Грешка в С++ програма.
« Отговор #14 -: May 25, 2010, 08:45 »
1. Какво значи "се прескачат" - така се получава когато начинещите слагат по много оператори на един ред - пробвай да ги разделиш само по един оператор на ред и тогава пак кажи дали се прескачат.
2. Покажи кода да видим как точно я викаш тази функция getline()
3. borovaka правилно те е насочил. И аз миcля, че това ще ти помогне:
http://www.cplusplus.com/reference/iostream/istream/getline/
Като трябва да внимаваш : според това какво ще ползваш string или char * да извикаш правилния вариаант на функцията
« Последна редакция: May 25, 2010, 08:48 от remotex »
Активен