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

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

Войти
Регистрация
Восстановить пароль
 
 
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
#1

Подскажите почему указатель работает неправильно? - C++

05.10.2013, 21:44. Просмотров 457. Ответов 16
Метки нет (Все метки)

Вот код:
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
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <vector>
using namespace std;
void fn_pointer(char *ptr_array)
{
     for(int j=0;j<10;++j)
     {
       for(int i=0;i<10;++i)
       {
           cout<<*ptr_array++;
     }
       cout<<endl;
   }
}
int main()
{
   srand(time(NULL));
   vector <string> vec;
   string str;
   int i,j;
   char *ptr_array;
   for(j=0;j<10;++j)
   {
       for(i=0;i<10;++i)
       {
           str+=(char)65+rand()%90;
       }
   vec.push_back(str);
   cout<<vec[j]<<endl;
   str.clear();
   }
   cout<<endl;
   ptr_array=&vec[0][0];
   fn_pointer(ptr_array);
   return 0;
}
P.S. Почему при передаче функции указателя, она выводит совсем не то, что нужно???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 21:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите почему указатель работает неправильно? (C++):

подскажите почему программа работает неправильно - C++
Использование двумерного массива как аргумента функции и возвращаемого значения функции выдает предупреждение:1&gt;------ Build...

Почему программа неправильно работает - C++
string IntToStr(int a) { if (a == 0) return &quot;0&quot;; string str = &quot;&quot;; int b = a; if (a &lt; 0) a *= -1; while (a &gt; 0) str =...

Почему деструктор работает неправильно? - C++
на лабараторной столкнулся в проблемой. деструктор вызывается только один раз. #include &lt;cstring&gt; #include &lt;iostream&gt; using...

Почему программа работает неправильно - C++
не могу понять почему программа работает не правильно # include &lt;stdio.h&gt; # include &lt;conio.h&gt; # include &lt;math.h&gt; float f1(int...

Почему моя программа неправильно работает? - C++
Постоянно выводится сообщение Incorrect letter grade entered. Enter a new grade. #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; int...

Почему функция atanh работает неправильно? - C++
Задание http://content-15.foto.my.mail.ru/mail/megabayt_m/_answers/i-359.jpg Кусок кода for (double X = Xn; X &lt;= Xk; X += dX) { ...

16
Simpson_
15 / 15 / 3
Регистрация: 06.02.2013
Сообщений: 55
05.10.2013, 22:24 #2
del

Добавлено через 6 минут
Функцию fn_pointer замени на
C++
1
2
3
4
5
6
7
8
void fn_pointer(char *ptr_array)
{
       for(int i=0;i<10;++i)
       {
           cout<<*ptr_array++;
     }
       cout<<endl;
}
Добавлено через 3 минуты
или на:

C++
1
2
3
4
void fn_pointer(char *ptr_array)
{
           cout<<ptr_array<<endl;
}
1
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.10.2013, 22:26  [ТС] #3
Simpson_, А почему она не работает в моем варианте, ведь в принципе нечего не меняется, просто убираем один цикл???
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2013, 22:27 #4
Без #include <string> у меня не компилируется. А что не то выводит?
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.10.2013, 22:31  [ТС] #5
C++
1
2
3
4
5
6
7
8
void fn_pointer(char *ptr_array)
{
 for(int i=0;i<10;++i)
 {
 cout<<*ptr_array++;
 }
 cout<<endl;
}
quote]
P.S. В этом варианте фуекция выведет только первые 10 символов, а мне нужно вывести весь вектор.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2013, 22:32 #6
Цитата Сообщение от Nikko12 Посмотреть сообщение
А почему она не работает в моем варианте, ведь в принципе нечего не меняется, просто убираем один цикл???
Потому что в векторе объеты string лежат, а не строки, с которыми эти объекты связаны.
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.10.2013, 22:35  [ТС] #7
alsav22, Выводится просто мусор, как будто указатель указывает в неизвестность

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Потому что в векторе объеты string лежат, а не строки, с которыми эти объекты связаны.
Как тогда правильно организовать работу программы??
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2013, 22:43 #8
Зачем эти извращения? Есть вектор со строками, вывести строки, в чём проблема?
Если с извращениями, то можно так:
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
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <vector>
#include <string>
using namespace std;
 
void fn_pointer(string *ptr_array)
{
     for(int j = 0; j < 10; ++j)
     {
        cout << *ptr_array++;
        cout << endl;
   }
}
 
int main()
{
   srand(time(NULL));
   vector <string> vec;
   string str;
   int i,j;
   string *ptr_array;
   for(j=0;j<10;++j)
   {
       for(i=0;i<10;++i)
       {
           str+=(char)65+rand()%90;
       }
       vec.push_back(str);
       cout<<vec[j]<<endl;
       str.clear();
   }
   cout<<endl;
   ptr_array = &vec[0];
   fn_pointer(ptr_array);
   
   return 0;
}
Если без извращений:
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
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <vector>
#include <string>
using namespace std;
 
void fn_pointer(const vector <string> &vec)
{
     for(int j = 0; j < vec.size(); ++j)
     {
        cout << vec[j] << endl;
     }
}
 
int main()
{
   srand(time(NULL));
   vector <string> vec;
   string str;
   int i,j;
   
   for(j=0;j<10;++j)
   {
       for(i=0;i<10;++i)
       {
           str+=(char)65+rand()%90;
       }
       vec.push_back(str);
       cout<<vec[j]<<endl;
       str.clear();
   }
   cout<<endl;
  
   fn_pointer(vec);
   
   return 0;
}
1
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.10.2013, 22:59  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Зачем эти извращения?
Что бы лучше разобраться. Можно пойти простым вариантом, но я так не могу. Если смогу реализовать "извращения", то "простой вариант" точно смогу реализовать.
P.S. Но за помощь с кодом с "извращениями" Спасибо.
P.S.S. А подскажите: если функции передать указатель на нулевой элемент вектора, но вывод в функции осуществлять не по строчно, а по символьно?? Буду очень признателен за "отличное извращение".
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2013, 23:19 #10
Цитата Сообщение от Nikko12 Посмотреть сообщение
Если смогу реализовать "извращения", то "простой вариант" точно смогу реализовать.
И где вы реализовали извращение?
Цитата Сообщение от Nikko12 Посмотреть сообщение
P.S.S. А подскажите: если функции передать указатель на нулевой элемент вектора, но вывод в функции осуществлять не по строчно, а по символьно?? Буду очень признателен за "отличное извращение".
Вы хотите научиться реализовывать извращения? Вот вам удобный случай, учитесь.
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.10.2013, 23:34  [ТС] #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Сообщение от Nikko12
Если смогу реализовать "извращения", то "простой вариант" точно смогу реализовать.
И где вы реализовали извращение?
А я и не говорил, что я "извращаюсь", это Ваши слова.
0
alsav22
05.10.2013, 23:38
  #12

Не по теме:

Цитата Сообщение от Nikko12 Посмотреть сообщение
А я и не говорил, что я "извращаюсь", это Ваши слова.
А я и не говорил, что ваши. Учиться - это не значит переписыать чужой код. Хотите поупражняться в таких кодах? Флаг в руки и вперёд... Но при чём здесь я?

0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.10.2013, 23:58  [ТС] #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Учиться - это не значит переписыать чужой код
Вот этого немного не понял?? О чем речь???
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.10.2013, 00:08 #14

Не по теме:

Цитата Сообщение от Nikko12 Посмотреть сообщение
Вот этого немного не понял?? О чем речь???
Вот об этом:
Цитата Сообщение от Nikko12 Посмотреть сообщение
P.S.S. А подскажите: если функции передать указатель на нулевой элемент вектора, но вывод в функции осуществлять не по строчно, а по символьно?? Буду очень признателен за "отличное извращение".



Добавлено через 8 минут

Не по теме:

Польза от упражнений - только для того, кто ими занимается, а не смотрит, как это делают другие.

0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
06.10.2013, 08:54  [ТС] #15
alsav22, Учиться - познавать новое. Если Вы считаете, что после размещения темы на этом сайте с вопрос о помощи, я слепо копирую чужой код, пусть так и будет (не буду Вас переубеждать).
P.S. Думаю наше общение ушло в сторону от намеченной темы.
P.S.S. Скажите alsav22, если после каждой Вашей помощи я не развиваюсь, зачем тогда мне помогать?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2013, 08:54
Привет! Вот еще темы с ответами:

Неправильно работает конструктор копирования list, почему? - C++
#include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;list&gt; #include &lt;iterator&gt; #include &lt;iostream&gt; using namespace std; list...

Почему такой простой алгоритм работает неправильно? - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int i,j,x,n,max,a; int main() { clrscr(); x=0;

Не могу понять, почему программа неправильно работает! - C++
Изучаю С++ по Страуструпу Б. - Программирование. Принципы и практика использования C++. Есть задание: 9. Вычислите сумму введенных...

Фрагмент из метода Зейделя работает почему-то неправильно - C++
Значения на первой итерации высчитывает верно x = -0.8, y = -2.05, а последующие итерации выводит с ошибкой. double A =...


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

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

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