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

Счетчик указателя в цикле - C++

Восстановить пароль Регистрация
 
konstantin vl
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 59
02.03.2014, 01:14     Счетчик указателя в цикле #1
Посмотрите пожалуйста почему у меня указатель не увеличивает массив на одну градацию, т.е при каждой итерации записывает значение в нулевое значения массива. Всю задачу решать не надо просто помогите с указателем

Задача: Разработайте структуру по имени саг, которая будет хранить следующую
информацию об автомобиле: название производителя в виде строки в символьном
массиве или в объекте string, а также год выпуска автомобиля в виде целого
числа. Напишите программу, которая запросит пользователя, сколько
автомобилей необходимо включить в каталог. Затем программа должна применить new
для создания динамического массива структур саг указанного пользователем
размера. Далее она должна пригласить пользователя ввести название
производителя и год выпуска для наполнения данными каждой структуры в массиве (см.
главу 4). И, наконец, она должна отобразить содержимое каждой структуры.
Пример запуска программы должен выглядеть подобно следующему:
Сколько автомобилей поместить в каталог? 2
Автомобиль #1:
Введите производителя: Hudson Hornet
Укажите год выпуска: 1952
Автомобиль #2:
Введите производителя: Kaiser
Укажите год выпуска: 1951
Вот ваша коллекция:
1952 Hudson Hornet
1951 Kaiser

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
#include "stdafx.h"
#include "iostream"
#include "cstring"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    struct car
    {
        char vendorName[50];
        int dateManuf;
    };
    
    cout << "Razmer kataloga: ";
    int limitCat;
    cin >> limitCat;
    car *p = new car[limitCat];
 
    int i = 0;
    do {
    cout << "Enter name vendor: ";
    cin >> p->vendorName;
    cout << "Enter date manufacture";
    cin >> p->dateManuf;
    i++; p++;
    } while (i < limitCat);
    
 
    system("pause");
    return 0;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.03.2014, 04:15     Счетчик указателя в цикле #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от konstantin vl Посмотреть сообщение
Посмотрите пожалуйста почему у меня указатель не увеличивает массив на одну градацию, т.е при каждой итерации записывает значение в нулевое значения массива.
Откуда видите?
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
//#include "stdafx.h"
#include "iostream"
#include "cstring"
using namespace std;
 
int main()
{
    struct car
    {
        char vendorName[50];
        int dateManuf;
    };
    
    cout << "Razmer kataloga: ";
    int limitCat;
    cin >> limitCat;
    car *p = new car[limitCat];
    car *p2 = p;
 
    int i = 0;
    do {
    cout << "Enter name vendor: ";
    cin >> p->vendorName;
    cout << "Enter date manufacture";
    cin >> p->dateManuf;
    i++; p++;
    } while (i < limitCat);
 
    for (int i = 0; i < limitCat; ++i)
    {
        cout << p2[i].vendorName << ' ' << p2[i].dateManuf << endl;
    }
    
    system("pause");
    return 0;
}
Миниатюры
Счетчик указателя в цикле  
Chang875
1 / 1 / 0
Регистрация: 14.01.2015
Сообщений: 12
24.02.2015, 07:37     Счетчик указателя в цикле #3
Подскажите, пожалуйста, попытался решить эту задачу иначе, чем коллега, но не могу понять почему у меня второй цикл for не попадает в область видимости динамического массива и приходится вводить через pcar.name, а не pcar-> name и, соответственно результат выдает только одного значения, заранее благодарю.

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
#include <cstdlib>
#include <iostream>
#include <string> 
#include <cstring>
using namespace std;
 
 struct car
 {
    string name;    
    int year;
 };
         
int main()
 {
    int n;
    cout<<"Ââåäèòå êîëè÷åñòâî Г*âòîìîáèëåé: ";
    cin >> n;
    
    car *pcar = new car[n];
    
        for(int i= 0; i<n; i++)
        {
            
             pcar[i];
            {
                cout << "Àâòîìîáèëü "<< i+1 <<endl;
                cout<<"Ââåäèòå Г¬Г*ðêó Г*âòîìîáèëÿ: ";
                cin >> pcar->name;
                cout<< endl;
                cout<< "Ââåäèòå ãîä Г*âòîìîáèëÿ: ";
                cin >> pcar->year;
                cout << endl;
            };  
            
        }
    
        for(int j = 0;j<n;j++)
        {
            
            cout << pcar[j].name << " "<< pcar[j].year << endl;
        }
      delete pcar;
    return 0;
 }
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
24.02.2015, 09:22     Счетчик указателя в цикле #4
C++
1
2
3
4
5
6
7
    for(int i= 0; i<n; i++)
        {
                cout<<"Введите марку "<< i+1<<" автомобиля: ";
                cin >> pcar[i].name;
                cout<< "Введите год автомобиля: ";
                cin >> pcar[i].year;
        }
pcar[i] - это непосредственно i- й Объект, а не указатель на него.
Поэтому через точку, а не стрелочку.
Chang875
1 / 1 / 0
Регистрация: 14.01.2015
Сообщений: 12
24.02.2015, 22:51     Счетчик указателя в цикле #5
чуть мозг не лопнул, нахожусь на стадии освоения с++, тяжеловато дается по учебнику. Собственно вопрос, правильно ли я решил задачу и используется ли динамический массив? или он закончил свою службу еще на этапе первого цикла for, в котором я использовал по совету товарища, указавшего на ошибку постом выше pcar[i].name, вместо pcar[i]->name и т. д.?

Рабочее решение:
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
#include <cstdlib>
#include <iostream>
#include <string> 
#include <cstring>
using namespace std;
 
struct car
{
    string name;
    int year;
};
 
int main()
{
    int n;
    cout << "Введите количество автомобилей: ";
    cin >> n;
 
    car *pcar = new car[n];
 
    for (int i = 0; i<n; i++)
    {
 
        pcar[i];
        {
            cout << "Автомобиль " << i + 1 << endl;
            cout << "Введите марку автомобиля: ";
            cin >> pcar[i].name;
            cout << endl;
            cout << "Введите год автомобиля: ";
            cin >> pcar[i].year;
            cout << endl;
        };
        
    }
    for (int j = 0; j != n; j++)
    {
        cout << pcar[j].name << " " << pcar[j].year << endl;
    }
        system("pause");
        delete[]pcar;
    return 0;
}
Счетчик указателя в цикле
GREGOR_812
 Аватар для GREGOR_812
25 / 25 / 3
Регистрация: 23.04.2014
Сообщений: 123
25.02.2015, 00:48     Счетчик указателя в цикле #6
Цитата Сообщение от Chang875 Посмотреть сообщение
C++
1
pcar[i];
что ты этим хотел показать?
задачу решил, массив используется
а чтобы было проще понять, надо увидеть следующее:
C++
1
2
ptr[i] /* эквивалентно */ *(ptr + i)
ptr[i][j] /* эквивалентно */ *(*(ptr + i) + j)
Chang875
1 / 1 / 0
Регистрация: 14.01.2015
Сообщений: 12
25.02.2015, 01:05     Счетчик указателя в цикле #7
я не особо ориентируюсь еще в указателях, поэтому мне проще понять если там будет
Цитата Сообщение от GREGOR_812 Посмотреть сообщение
pcar[i];
индекс по которому я могу его использовать. Если я правильно понял, то имени динамический массив не имеет, а только указатель, вот и решил что можно будет использовать через индекс массива, для обращения к которому нужно просто указать i, хотя не уверен что правильный подход.
Было бы правильно если бы я не добавлял индекс, а обращался к * (pcar + 1) для отображения последующей структуры, как бы ссылаясь на ее адресс в памяти?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2015, 01:16     Счетчик указателя в цикле
Еще ссылки по теме:

C++ Почему счетчик в цикле for начинается с нуля, а не с единицы?
C++ Не определен счетчик в цикле for
C++ Неправильная разадресация указателя на массив в цикле

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

Или воспользуйтесь поиском по форуму:
GREGOR_812
 Аватар для GREGOR_812
25 / 25 / 3
Регистрация: 23.04.2014
Сообщений: 123
25.02.2015, 01:16     Счетчик указателя в цикле #8
эта строчка вообще не нужна, я не понимаю, какой сакральный смысл ты в неё вкладываешь))
Использовать индекс или арифметику указателей - это дело вкуса. Если дело происходит в циклах, то выгоднее пользоваться всё же указателем, получается меньше операций

Добавлено через 1 минуту
Chang875, имя массива - это и есть указатель. На его первый элемент) можно это заметить, т.к. p[0] и *(p + 0) это одно и то же, т.е. p[0] = *p
Yandex
Объявления
25.02.2015, 01:16     Счетчик указателя в цикле
Ответ Создать тему
Опции темы

Текущее время: 06:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru