Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
#1

Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] - C++

24.03.2011, 21:52. Просмотров 693. Ответов 17
Метки нет (Все метки)

Какие ошибки у меня в программе и как мне их исправить ? Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a]

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
#include<string>
using namespace std;
struct person
{
string name;
int rost;
};
int main()
{setlocale(LC_ALL,"Russian");
int a;
cout<<"Введите колличество человек --> ";
    cin>>a;
    int *arrive=new int[a];
    person p[a];
for(int x = 0;x<a;x++)
{
    cout<<"Введи имя --> ";
    getline(cin, p[x].name);
    cout<<"Введи свой рост --> ";
    cin>>p[x].rost;
    cin.get();
}
cout<<"+++++++++++ Вывод +++++++"<<endl;
for(int x = 0;x<a;x++)
    cout<<"Персона "<<x+1<<" имя "<<p[x].name<<" и твой рост "<<p[x].rost<<endl;
delete [] arrive;
cin.get();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2011, 21:52     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a]
Посмотрите здесь:
Проверяю, являются ли 4 строки стихом. "й" принимает за "и", тем самым принимает за слог C++
C++ Как принять код клавиши, а вписать саму клавишу? (Принимает "57", что означает "9")
C++ Компилятор выдает ошибку: error C2041: недопустимая цифра "8" для основания "8"
Что делает цикл "while(cin.getline(buf,l_buf))" ? C++
C++ Работа с линейными списками. Ошибка "getline: идентификатор не найден"
"Проскакивает" getline(), если ранее вводилась целочисленная переменная. Почему? C++
C++ Ошибка : Class не содержит члена "getline" С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
24.03.2011, 21:58     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #2
Цитата Сообщение от parkito Посмотреть сообщение
и не хочет массив объявлять peson p[a]
Цитата Сообщение от parkito Посмотреть сообщение
C++
1
person p[a];
Оно и понятно, так-как у статичексого масива, размер должен быть константным выражением.

Добавлено через 43 секунды
Цитата Сообщение от parkito Посмотреть сообщение
Мой компилятор не принимает "getline"
Всмисле ошибку выдает или как ?
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
24.03.2011, 22:41  [ТС]     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #3
Поработал с программой. Ошибок больше нет, но не могу вести в нее имя персоны.
как исправить ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include<string>
using namespace std;
int main()
{setlocale(LC_ALL,"Russian");
int a;
char name[100];
cout<<"Введите колличество человек --> ";
    cin>>a;
    int *arrive=new int[a];
    arrive[a];
    
for(int x = 0;x<a;x++)
{
    cout<<"Введи имя --> ";
    cin.getline(name, 80);
    cout<<"Введи свой рост --> ";
    cin>>arrive[x];
    cin.get();
}
cout<<"+++++++++++ Вывод +++++++"<<endl;
for(int x = 0;x<a;x++)
    cout<<"Персона "<<x+1<<" имя "<<name<<" и твой рост "<<arrive[x]<<endl;
delete [] arrive;
cin.get();
return 0;
}
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
24.03.2011, 22:48     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #4
parkito,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
#include<string>
using namespace std;
int main()
{setlocale(LC_ALL,"Russian");
int a;
char name[100];
cout<<"Введите колличество человек --> ";
        cin>>a;
        int *arrive=new int[a];
        arrive[a];
 
for(int x = 0;x<a;x++)
{
        cout<<"Введи имя --> ";
        cin.sync();//Очистка потока
        cin.getline(name, 80);
        cout<<"Введи свой рост --> ";
        cin>>arrive[x];
        cin.get();
}
cout<<"+++++++++++ Вывод +++++++"<<endl;
for(int x = 0;x<a;x++)
        cout<<"Персона "<<x+1<<" имя "<<name<<" и твой рост "<<arrive[x]<<endl;
delete [] arrive;
cin.get();
return 0;
}
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
24.03.2011, 22:55  [ТС]     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #5
asics Спасибо. А что за очистка потока ? не разу не слышал.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
24.03.2011, 23:02     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #6
parkito, Когда Вы первый раз ввели имя(нажали Enter) в строку не записался символ \n, то бишь он остался в потоке и что бы его от-туда удалить используем метод sync() класа istream http://www.cplusplus.com/reference/i.../istream/sync/
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
25.03.2011, 09:07  [ТС]     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #7
Как сделать струкутуру

C++
1
2
3
4
5
6
 string name
cout<<"Введи имя --> ";
    cin>>name;
    cout<<"Введи свой рост --> ";
    cin>>arrive[x];
    cin.get();
Похожую на

C++
1
2
3
4
5
6
char name [80];
cout<<"Введи имя --> ";
    cin.getline(name,80)
    cout<<"Введи свой рост --> ";
    cin>>arrive[x];
    cin.get();

То есть чтоб в
C++
1
string name
строка записывалась целая (с пробелами)

как

C++
1
cin.getline(name,80)
??
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
25.03.2011, 17:08     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #8
parkito,
C++
1
getline(cin, str);
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
28.03.2011, 22:57  [ТС]     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #9
Имеется прога

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
int main()
{setlocale(LC_ALL,"Russian");
cout<<"После работы программы сохранит данные в файл (Y\\N) ? ";
char c; 
cin>>c;
if(c=='Y'||'y')
    {
int a;
string name;
cout<<"Введите колличество человек --> ";
    cin>>a;
    int *arrive=new int[a];
    arrive[a];
ofstream outfile;
outfile.open("st.txt"); 
for(int x = 0;x<a;x++)
{
    cout<<"Введи имя --> ";
    cin>>name;
    cout<<"Введи рост --> ";
    cin>>arrive[x];
    cin.get();
 
cout<<"+++++++++++ Вывод +++++++"<<endl;
 
for(int x = 0;x<1;x++)
    {cout<<"Персона "<<x+1<<" имя "<<name<<" рост "<<arrive[x]<<endl;
  outfile<<"Персона "<<x+1<<" имя "<<name<<" рост "<<arrive[x]<<endl;
}}
outfile.close();
cout<<"Файл Список.TXT помещен на рабочий стол,"<<endl;
    cout<<"для завершения нажмите Enter";
    cin.get();
delete [] arrive;
 
}
else
{int a;
char name[100];
cout<<"Введите колличество человек --> ";
    cin>>a;
    int *arrive=new int[a];
    arrive[a];
    
for(int x = 0;x<a;x++)
{
    cout<<"Введи имя --> ";
    cin.ignore();
    cin.getline(name, 80);
    cout<<"Введи свой рост --> ";
    cin>>arrive[x];
    cin.get();
}
cout<<"+++++++++++ Вывод +++++++"<<endl;
for(int x = 0;x<a;x++)
    cout<<"Персона "<<x+1<<" имя "<<name<<" рост "<<arrive[x]<<endl;
delete [] arrive;
cin.get();
}return 0;}
Как заставить ее чтоб проверяла введинно ли число
C++
1
2
cout<<"Введите колличество человек --> ";
    cin>>a;
если введино не число, а символ например бы завершало программу ?
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
28.03.2011, 22:59     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #10
После ввода напиши
C++
1
2
if(!cin)
  //ERROR
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
28.03.2011, 23:00  [ТС]     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #11
Цитата Сообщение от asics Посмотреть сообщение
После ввода напиши
C++
1
2
if(!cin)
  //ERROR
Поясните пожалуйста как работает это решение.
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,642
28.03.2011, 23:06     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #12
чей то тут накрутили
для того чтобы создать динамический массив структур достаточно вместо
Цитата Сообщение от parkito Посмотреть сообщение
person p[a];
написать
C++
1
person * p=new person[a];
а то получается( в другой версии)
имя вводится в одной и той же переменной
arrive[a];
бесполезная(опасная выход за границы массива) строка
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
29.03.2011, 08:04  [ТС]     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #13
Ой я вас дезынформировал... то что вы видели в предыдущем посте это была прошлая версия программы. В этой исправлены некоторые, мною найденные, недочеты.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
int main()
{setlocale(LC_ALL,"Russian");
cout<<"После работы программы сохранит данные в файл (Y\\N) ? ";
char c; 
cin>>c;
if(c=='Y'||'y')
    {
int a;
char name[100];
cout<<"Введите колличество человек --> ";
    cin>>a;
    int *arrive=new int[a];
    arrive[a];
    
for(int x = 0;x<a;x++)
{
    cout<<"Введи имя --> ";
    cin.ignore();
    cin.getline(name, 80);
    cout<<"Введи свой рост --> ";
    cin>>arrive[x];
    cin.get();
}
cout<<"+++++++++++ Вывод +++++++"<<endl;
ofstream outfile;
outfile.open("st.txt");
for(int x = 0;x<a;x++)
    {cout<<"Персона "<<x+1<<" имя "<<name<<" и твой рост "<<arrive[x]<<endl;
  outfile<<"Персона "<<x+1<<" имя "<<name<<" и твой рост "<<arrive[x]<<endl;
}
outfile.close();
cout<<"Файл Список.TXT помещен на рабочий стол,"<<endl;
    cout<<"для завершения нажмите Enter";
    cin.get();
delete [] arrive;
 
}
else
{int a;
char name[100];
cout<<"Введите колличество человек --> ";
    cin>>a;
    int *arrive=new int[a];
    arrive[a];
    
for(int x = 0;x<a;x++)
{
    cout<<"Введи имя --> ";
    cin.ignore();
    cin.getline(name, 80);
    cout<<"Введи свой рост --> ";
    cin>>arrive[x];
    cin.get();
}
cout<<"+++++++++++ Вывод +++++++"<<endl;
for(int x = 0;x<a;x++)
    cout<<"Персона "<<x+1<<" имя "<<name<<" и твой рост "<<arrive[x]<<endl;
delete [] arrive;
cin.get();
}return 0;}
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,642
29.03.2011, 09:15     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #14
Для чего 17 строка???
куда будет записываться текст в 23 строке???
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
29.03.2011, 15:43  [ТС]     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #15
Цитата Сообщение от ValeryS Посмотреть сообщение
Для чего 17 строка???
Скорее всего осталось от чего-то.
куда будет записываться текст в 23 строке???
в

C++
1
char name[100];
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,642
29.03.2011, 18:25     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #16
Цитата Сообщение от parkito Посмотреть сообщение
в
C++
1
char name[100];
а при второй итерации(проходе цикла) пятой...десятой
Туда же.
т.е в буфере будет последняя введенная строка (остальные затрутся)

Добавлено через 1 минуту
C++
1
2
for(int x = 0;x<a;x++)
        {cout<<"Персона "<<x+1<<" имя "<<name<<" и твой рост "<<arrive[x]<<endl;
вот здесь будет выводится одно и тоже имя. Последнее
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 691
29.03.2011, 19:19  [ТС]     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #17
Так он и выводятся на экран и в файл. Информация не теряется
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2011, 20:38     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a]
Еще ссылки по теме:
C++ Макрос, который принимает два значения (a, b) и возвращает строку "ab"
C++ Работа с классами С++. error C2660: "Функция не принимает 2 аргумента"
C++ Ошибка: "error C2660: getch: функция не принимает 1 аргументов"
C++ Ошибка при передача аргумента: "C2660: calc: функция не принимает 3 аргументов"
C++ Ошибка компиляции "функция не принимает 2 аргументов"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,642
29.03.2011, 20:38     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] #18
т.е. ты хочешь сказать что введя 10 имен
и в файле получишь 10 разных
Yandex
Объявления
29.03.2011, 20:38     Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a]
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru