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

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

Войти
Регистрация
Восстановить пароль
 
Петр1
3 / 1 / 1
Регистрация: 09.10.2012
Сообщений: 25
#1

первый gets() игнорируется, а второй работает - C++

25.10.2012, 14:41. Просмотров 397. Ответов 4
Метки нет (Все метки)

Здравствуйте!
Не могу понять почему первый gets() игнорируется, вернее в него записывается '\n';

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
#include<iostream>
#include<stdio.h>
#include<string.h>
 
using namespace std;
 
struct person
{
    char *surname; 
    char *name; 
    int day;
};
 
void main(){
    int n=2;
    person **ar=new person*[n];
    for(int i=0; i<n; i++){
        ar[i] =new person [40];
    }
    ar[0][0].surname=new char[40];
    ar[0][0].surname[40] ='\0';
    ar[0][0].name=new char[40];
    ar[0][0].name[40] ='\0';
    cin>>ar[0][0].day;
    cin>>ar[0][1].day;
 
    for(int i=0; i<1; i++){
        for(int j=0; j<1; j++){
            cout<<"sur - ";
            gets(ar[i][j].surname);
            cout<<"nam - ";
            gets(ar[i][j].name);
        }
    }
    for(int i=0; i<1; i++){
        for(int j=0; j<1; j++){
            cout<<ar[i][j].surname<<" "<<ar[i][j].name<<" "<<ar[i][j].day<<" "<<ar[i][j+1].day<<endl;
        }
    }   cout<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2012, 14:41     первый gets() игнорируется, а второй работает
Посмотрите здесь:

Массив: Первый способ сортировки массива работает, а второй - нет, почему? - C++
Первый способ работает, а второй нет #pragma hdrstop #pragma argsused #ifdef _WIN32 #include &lt;tchar.h&gt; #include &lt;windows.h&gt;...

Сравнить первый и второй элементы массива - C++
Здравствуйте. У меня возникли проблемы решением задачки. Подскажите формулу. &quot;Дан 2 -ух мерный массив. Сравнить первый и второй элементы...

Отсортировать по возрастанию первый и второй столбец матрицы - C++
Нужна помощь в задаче с использованием многомерного массива 2. Відсортувати за зростанням перший рядок та другий стовпець матриці. 2....

Преобразовать строку, заменив в ней первый символ на второй. - C++
Ребят, помогите с задачкой, пожалуйста. Желательно для Borland C++ Builder 6.0. Вводится строка произвольного текста и два...

Поменять местами первый и последний столбцы, второй и предпоследний и т.д - C++
Не могу понять почему не работает.((((( В двумерном массиве размерности N x M поменять местами первый и последний столбцы, второй и...

GetPixel, почему первый иф равен тру, а второй - нет - C++
Уважаемые знатоки, в первом GetPixel корды верхнего левого угла иконки поплавка (певая вкладка, опять таки вверху слева), а во втором...

Сколько раз второй прямоугольник можно вписать в первый. - C++
Описать функцию, которая принимает высоту и ширину прямоугольника. а так же высоту и ширину второго прямоугольника. Возвращает сколько раз...

Биты (поменять нулевой и первый бит, второй и третий и т.д.) - C++
Нужно поменять нулевой и первый бит, второй и третий и т.д. Тип числа - unsigned int. Хотя б алгоритм.

Реализовать два потока: первый выводит единицы, а второй двойки - C++
Условие : два потока. первый выводит единицы, а второй двойки. Нужен какой то пример, чтобы от него отталкиваться

Найти, через сколько лет второй вклад превысит первый - C++
Помогите пожалуйста с задачей. Есть два вклада в 100 долларов, один вклад простой 10% каждый год от изначальной суммы, а второй сложный 5%...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
25.10.2012, 15:32     первый gets() игнорируется, а второй работает #2
C++
1
2
3
4
5
6
7
8
...
cin>>ar[0][0].day;
cin>>ar[0][1].day;
...
gets(ar[i][j].surname);
...
gets(ar[i][j].name);
...
Первый cin пропускает все симолы пробела и начала новой строки и читает ar[0][0].day. При этом символ начала новой строки остается во входном потоке... Его пропускает второй cin. Но после ввода ar[0][1].day опять этот символ остается во входном потоке. И его зибирает gets...
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
25.10.2012, 16:05     первый gets() игнорируется, а второй работает #3
после ввода через cin >> в потоке остается '\n', он у вас и попадает в gets
и вообще не стоит использовать gets и уж темболее мешать код си и си++
Петр1
3 / 1 / 1
Регистрация: 09.10.2012
Сообщений: 25
25.10.2012, 17:05  [ТС]     первый gets() игнорируется, а второй работает #4
а как тогда записать day (type int)
или как тогда записывать surname? через cin>>?
gets() мне кажется удобно, может только кажется?
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
25.10.2012, 19:03     первый gets() игнорируется, а второй работает #5
Метод cin возвращает ссылку на поток, потому можно использовать конструкцию (cin>>...).get();
в этом случае get() заберет символ новой строки...
Можно сигнорить весь поток, пока не встретится символ перевода строки
istream& ignore ( streamsize n = 1, int delim = EOF );
Пропускает n-символов или пока не встретится delim.

Добавлено через 1 минуту
cin.ignore(256,'\n');

Добавлено через 16 минут
аа.. кстати, если будет интересно, можешь почитать у Стивена Прата "Язык программирования с++. Лекции и упражнения" на стр. 85 Строчно ориентированный ввод...
Yandex
Объявления
25.10.2012, 19:03     первый gets() игнорируется, а второй работает
Ответ Создать тему
Опции темы

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