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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
lordPS
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 55
#1

Не могу найти ошибку в исходнике. - C++

28.05.2012, 22:38. Просмотров 1056. Ответов 5
Метки нет (Все метки)

Привет програмёры.Я учусь програмировать на С++ и для закрепления начала изучения функций и массивов написал небольшую програмку massiv, и она компилируется, но работает неправильно(после ввода чисел работа почемуто обрывается.Не могу найти ошибку.Вот текст програмки:

#include<cstdio>
#include<cstdlib>
#include<iostream>

using namespace std;


int Proizved(int mass[], int velechina);
void tabl(int mass[], int velechina);

int main(int nNumberofArgs, char*pszArgs[])
{
int accumulator;
int massiv[100];

int nom;

for(nom=0;nom < 100;nom++)
{
int chislo;
TCHAR * s1 = "Введите число: ";
TCHAR * s2 = new TCHAR(strlen(s1)+1);
CharToOem(s1,s2);
cout << s2;
cin >> chislo;
if(chislo < 0)
{
break;
}
massiv[nom]=chislo;
}
tabl(massiv,nom);

cout << "Proizvedenie:" <<Proizved(massiv,nom) << endl;

system("PAUSE");
return 0;
}


void tabl(int mass[], int velechina)
{
TCHAR * s3 = "В массиве находятся числа:";
TCHAR * s4 = new TCHAR(strlen(s3)+1);
CharToOem(s3, s4);
cout << s4;
for(int i=0;i < velechina; i++)
{
cout.width(3);
cout << i << ":" << mass[i] << endl;
}
cout << endl;
}


int Proizved(int mass[], int velechina)
{
int accumulator = 0;

for(int i = 0; i < velechina;i++)
{
accumulator += mass[i];
}
return accumulator;
}
Коментарии не - писал на 100% уверен что всё поймёте.Прошу с меня не ржать-всётаки только начал изучать С++ и 14 лет мне.
P.S: интереса ради пожалуйста напишите во сколько начали учиться програмировать и восколько
професионально програмировать.
GGGGGGGG-Unit
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2012, 22:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу найти ошибку в исходнике. (C++):

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) - C++
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой находится наименьшее // количество...

Не могу найти ошибку - C++
Всем привет. НАчал читать учебник Дейтеля (5е издание), дошел до момента &quot;отделение интерфейса от реализации&quot;, и в примерах, которые...

Не могу найти ошибку - C++
Не получается вывести сформированную матрицу. Выводит с каким-то мусором. #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include...

Не могу найти ошибку! - C++
#include &lt;iostream.h&gt; int main() { cout &lt;&lt; &quot;Hello there.\n&quot;; cout &lt;&lt; &quot;Here is 5:&quot; &lt;&lt; 5 &lt;&lt; &quot;\n&quot;; cout &lt;&lt; &quot;The manipulator end1...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
29.05.2012, 03:25 #2
Попробовал выполнить программу, действительно валится при выводе массива введенных чисел.

Небольшие эксперименты показали, что проблема в выводе строки в std::cout, конвертированной при помощи CharToOem. Если строка превышает длинной 23 символа, то после функции CharToOem и вывода строки в std::cout последний становится не пригоден для использования.

Поздно уже думать сегодня ^_^ Поэтому, в качестве временного решения могу порекомендовать уменьшить сообщение до 23 символов или писать по-английски и не используй CharToOem вообще.

Удачи,
Владимир
0
arist
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 100
29.05.2012, 08:21 #3
вместо
TCHAR * s2 = new TCHAR(strlen(s1)+1);
должно быть
TCHAR * s2 = new TCHAR[strlen(s1)+1];

В первом случае выделяется память размером sizeof(TCHAR) и инициализированная значением strlen(s1)+1, а во втором (то, что нужно) выделяется память размером sizeof(TCHAR) * (strlen(s1)+1) и не инициализируется.

на счёт s4 - тоже самое.
0
lordPS
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 55
29.05.2012, 18:56  [ТС] #4
Спасибо большое!Пограмка заработала.В принципе оба совета подходят но я
воспользовался вторым.Ещё раз спасибо, с меня пивоP.S:жаль на последний вопрос не ответили, создам отдельную тему в FLAME.
0
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
30.05.2012, 12:20 #5
arist абсолютно прав, забудь мой предыдущий ответ, я чей-то просмотрел очевидную ошибку 23 символа тут ни при чем. Массивы нужно создавать как массивы, иначе программа начинает использовать область памяти выходящую за рамки выделенной.

Удачи,
Владимир
0
lordPS
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 55
30.05.2012, 15:36  [ТС] #6
ОК.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2012, 15:36
Привет! Вот еще темы с ответами:

Не могу найти ошибку - C++
Помогите найти ошибку: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; using namespace std; ...

Не могу найти ошибку - C++
ошибка в строке 24..не могу исправить. Помогите, пожалуйста. #include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using...

Не могу найти ошибку! - C++
Написал функцию &quot;Сортировка пузырьком&quot;, но почему то в конце функции выводит те же значения, что были изначальноO_o вот код: #include...

Не могу найти ошибку - C++
Здравствуйте,столкнулся с такой проблемой ,нужно было написать программу,которая определяет количество элементов,которые находятся в...


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

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

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