Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 00:04   #21
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Winston123
Может быть нужно задавать char str[5]
да-да, именно так. Там под символ конца строки нужно место.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 14.06.2009, 00:11   #22
Winston123
Пользователь
 
Регистрация: 17.05.2009
Сообщений: 15
По умолчанию

Теперь бэкспейс работает слишком хорошо
Он стирает и всю надпись перед местом ввода)) там где Vvedite znachenie n (ot 1 do 9999):

Пробую поставить \n в конце этой строки, чтобы ввод данных с клавы начинался на следующей строчке

но если я ввожу 4444, а кнопку backspace нажимаю больше 4 раз, то вылазит та же самая ошибка
Winston123 вне форума Ответить с цитированием
Старый 14.06.2009, 00:19   #23
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Теперь бэкспейс работает слишком хорошо

Вот так измените
Код:
else if(c==0x08 && pos>0)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 14.06.2009, 00:32   #24
Winston123
Пользователь
 
Регистрация: 17.05.2009
Сообщений: 15
По умолчанию

В else можно ещё одно условие включать))) Клёво)))

Ну вроде бы теперь всё, спасибо..
Winston123 вне форума Ответить с цитированием
Старый 14.06.2009, 12:52   #25
Winston123
Пользователь
 
Регистрация: 17.05.2009
Сообщений: 15
По умолчанию Результат

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

Код:
/*         Дано натуральное число n. Сформировать целочисленный  массив IM(2n), 
            элементами которого являются числа
		                                  1  2n  2  2n-1  3  2n-2  ...  n  n+1
*/



#include "stdafx.h" //подключение директив
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <conio.h>



void title() //функция текстового заголовка
{
printf("Dano naturalnoe chislo n. Sformirovat celochislennyj massiv IM(2n)\n");
printf("1  2n  2  2n-1  3  2n-2  ...  n  n+1\n\n\n");
}



int input() //функция ввода данных
{
printf ("Vvedite znachenie n (ot 1 do 999) and press <ENTER>: "); //вывод на экран приглашения на ввод данных
char str[4],c;  //объявление символьных переменных
int pos=0;  //инициализация переменной количества вводимых символов
do //выполняем ввод данных
 {
  c = getch();  //считывание введённого символа без эхо-отображения
  if(c>='0'&&c<='9' && pos<3)  //если переменная соответствует диапазону 
                  //и не превышает разрешённое количество вводимых символов
   {
    str[pos++]=c; //двигаем позицию курсора на шаг вправо, и присваиваем введённое значение
    printf("%c",c); //то выводим его на экран
   }
  else if(c==0x08 && pos>0) //если введён <backspace>
   {
    pos--; //двигаем позицию курсора на шаг влево
    printf("%c %c",c,c);
   }
 } while(c!=0x0D); //ввод данных выполняется, пока не введён <enter>
str[pos]=0;
return atoi(str);  //преобразование символьной строки в число типа int и её возврат в основную функцию
}



void mas (int *Z, int y) //функция формирования массива
{
for (int i=0; i<y; i++)  
  {                          
  Z[2*i]=i+1;
  Z[2*i+1]=2*y-i;
  }
}



void output (int *R, int f) //функция вывода данных
{
 char str[200],buf[100]; //объявление символьных переменных
if (f==0) printf("\nNevozmozhno postroit massiv: dannie vvedeny nekorrektno"); 
//вывод на экран сообщения при введённом нуле
else
{
int razm=2*f;          //подсчёт количества элементов массива
printf("\nKolichestvo elementov massiva = %d \n\n", razm); //вывод на экран количества элементов массива
printf("Massiv: \n");
strcpy(str,"");        //Обнуление значения результирующей строки
for (int i=0; i<razm; i++)
 {
  sprintf(buf,"%d",R[i]); //Конвертирование текущего элемента массива в строку
  if(strlen(str)+strlen(buf)>=79) //Если общая длина строки с новым элементом больше 79
   {
    printf("%s\n",str); //Вывод строки без этого элемента
    strcpy(str,buf);    //Замена выведенной строки этим элементом
   }
  else
   {
    strcat(str," ");    //Добавить пробел
    strcat(str,buf);    //Добавить к общей строке значение текущего элемента
   }
 }
 printf("%s\n",str);     //Вывод оставшейся строки
}
printf("\n\n");          //двойной перенос строки
}


int main() //основная функция
{
title(); //вызов функции title
char r; //объявление символьной переменной
do //начало выполнения цикла
  {
  int en = input(); //вызов функции input
  int *IM=(int *)malloc(2*en*sizeof(int)); //объявление массива с динамич. выделением памяти
  mas(IM, en); //вызов функции mas
  output(IM, en); //вызов функции output
  free(IM); //освобождение выделенной памяти
  printf("PRESS <ENTER> TO CONTINUE \nPRESS <ANY KEY> TO EXIT \n"); //диалог о завершении/продолжении работы
  r=getch(); //считывание введённого символа без эхо-отображения
  printf("\n\n"); //перенос строки
  }
while (r==0x0D); //программа будет выполняться до тех пор, пока не будет нажат <ENTER>
}

Последний раз редактировалось Sazary; 14.06.2009 в 13:20.
Winston123 вне форума Ответить с цитированием
Старый 15.06.2009, 21:21   #26
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Нет. Все правильно. Программа работает (компилю в MinGW).
Это что-то студия творит...

Кстати, Math и iostream вам здесь ни к чему.
у вас здесь написано
Код:
printf("%d ", A[2*i]);
а условие цикла определено до tr, тоесть через несколько тактов программа обратиться за пределы массива, либо попробуйте как viper сказал или поспользуйтесь
Код:
int * i = (int*)calloc(2*t1,sizeof(int));
lennon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите пожалуйста что не правильно в скрипте. 6AT9 JavaScript, Ajax 1 25.11.2008 00:21
Visual C++: Что не так делаю? N!ckeL Помощь студентам 8 19.05.2008 11:28
правильно ли я делаю? andrey4623 Общие вопросы Delphi 2 07.03.2008 20:14