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

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

Войти
Регистрация
Восстановить пароль
 
konstantin vl
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 59
#1

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

02.03.2014, 01:14. Просмотров 870. Ответов 8
Метки нет (Все метки)

Посмотрите пожалуйста почему у меня указатель не увеличивает массив на одну градацию, т.е при каждой итерации записывает значение в нулевое значения массива. Всю задачу решать не надо просто помогите с указателем

Задача: Разработайте структуру по имени саг, которая будет хранить следующую
информацию об автомобиле: название производителя в виде строки в символьном
массиве или в объекте 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;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2014, 01:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Счетчик указателя в цикле (C++):

Изменение значение указателя в цикле - C++
Добрый день! У меня возникла проблема следущего характера: в цикле for (i=0;i&lt;(n*n);i++) у меня сбивается указатель, тоесть при i=4,...

Счетчик в цикле for - C++
Проблему уже решил.

Неправильная разадресация указателя на массив в цикле - C++
Всем доброго времени суток! Столкнулся с такой проблемой: Есть массив a заполненный неотрицательными целыми числами. Есть...

Счетчик операций в цикле do-while - C++
Счетчик операций i выдает нереально завышенные цифры: всего 4 преобразования - как будто 15 операций в цикле произошло. Как его на работу...

Не определен счетчик в цикле for - C++
Подскажите пожалуйста, в чем ошибка? Выдает ошибку &quot;идентификатор i не определен&quot;. int *mas = new int; for (int i = 0; i &lt; 2;...

Как сделать счетчик в цикле? - C++
как сделать счетчик в цыкле таким образом чтобы он был 1 1 1 2 2 2 3 3 3 4 4 4 итд

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5420 / 4816 / 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;
}
1
Миниатюры
Счетчик указателя в цикле  
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;
 }
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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- й Объект, а не указатель на него.
Поэтому через точку, а не стрелочку.
0
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;
}
Счетчик указателя в цикле
0
GREGOR_812
25 / 25 / 3
Регистрация: 23.04.2014
Сообщений: 128
25.02.2015, 00:48 #6
Цитата Сообщение от Chang875 Посмотреть сообщение
C++
1
pcar[i];
что ты этим хотел показать?
задачу решил, массив используется
а чтобы было проще понять, надо увидеть следующее:
C++
1
2
ptr[i] /* эквивалентно */ *(ptr + i)
ptr[i][j] /* эквивалентно */ *(*(ptr + i) + j)
0
Chang875
1 / 1 / 0
Регистрация: 14.01.2015
Сообщений: 12
25.02.2015, 01:05 #7
я не особо ориентируюсь еще в указателях, поэтому мне проще понять если там будет
Цитата Сообщение от GREGOR_812 Посмотреть сообщение
pcar[i];
индекс по которому я могу его использовать. Если я правильно понял, то имени динамический массив не имеет, а только указатель, вот и решил что можно будет использовать через индекс массива, для обращения к которому нужно просто указать i, хотя не уверен что правильный подход.
Было бы правильно если бы я не добавлял индекс, а обращался к * (pcar + 1) для отображения последующей структуры, как бы ссылаясь на ее адресс в памяти?
0
GREGOR_812
25 / 25 / 3
Регистрация: 23.04.2014
Сообщений: 128
25.02.2015, 01:16 #8
эта строчка вообще не нужна, я не понимаю, какой сакральный смысл ты в неё вкладываешь))
Использовать индекс или арифметику указателей - это дело вкуса. Если дело происходит в циклах, то выгоднее пользоваться всё же указателем, получается меньше операций

Добавлено через 1 минуту
Chang875, имя массива - это и есть указатель. На его первый элемент) можно это заметить, т.к. p[0] и *(p + 0) это одно и то же, т.е. p[0] = *p
1
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
27.12.2016, 10:42 #9
Цитата Сообщение от Chang875 Посмотреть сообщение
for (int j = 0; j != n; j++)
Кстати не обязательно использовать букву j ведь это получается в отдельной области видимости находится твой цикл.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2016, 10:42
Привет! Вот еще темы с ответами:

Табуляция функции в цикле while-не обновляется счетчик - C++
Работаю в Borland C++ Попробовал запустить программу-таблица выводится бесконечно с одними и теми же значениями. Пробовал запустить в...

Почему счетчик в цикле for начинается с нуля, а не с единицы? - C++
привет. почему когда надо сделать какое-то действие, например 4 раза, то пишут: for (int i=0, i&lt;4, i++) { //... } а не так: ...

Объявляется ли каждую итерацию переменная-счетчик в цикле for? - C++
Всем привет, расскажу историю возникшего вопроса. Отходил я как-то на курсы с++, и там преподаватель (авторитетный вроде программист,...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя? - C++
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.12.2016, 10:42
Ответ Создать тему
Опции темы

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