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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2009, 00:22   #11
Winston123
Пользователь
 
Регистрация: 17.05.2009
Сообщений: 15
По умолчанию

Большое прибольшое Вам спасибо)

Подписал комменты к функции output, правильно ли я всё понимаю???

Код:
void output (int *R, int f) //функция вывода данных
{
 char str[200],buf[100]; //объявление символьных переменных
if (f==0) printf("\nNevozmozhno postroit massiv: kolichestvo elementov massiva = 0"); //вывод на экран сообщения при введённом нуле
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");          //двойной перенос строки
}

Последний раз редактировалось Winston123; 11.06.2009 в 17:33.
Winston123 вне форума Ответить с цитированием
Старый 11.06.2009, 18:26   #12
Winston123
Пользователь
 
Регистрация: 17.05.2009
Сообщений: 15
По умолчанию

Ну вот... Не успел разобраться с output, как вдруг преподавателю захотелось поиздеваться со вводом

1) Максимум переменной n сделать 999. Ну это не проблема
Строки
Код:
char str[4];
           for (int i=0;i<4;i++)
заменяем на
Код:
char str[3];
           for (int i=0;i<3;i++)
2) Сейчас после ввода последней цифры, сразу происходит построение массива. Преподавателю хочется чтобы вычисления начинались только после нажатия <ENTER>

3) И ещё, у меня в функции предусмотрена возможность введения только цифр от 0 до 9 и ENTER, соответственно backspace не работает.. А оказывается надо, чтобы работал, ну то есть чтобы можно было стирать

Кажется мне, что вообще всю функцию с нуля надо будет переписывать, иль можно обойтись малой кровью???
Winston123 вне форума Ответить с цитированием
Старый 11.06.2009, 18:55   #13
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
2) Сейчас после ввода последней цифры, сразу происходит построение массива. Преподавателю хочется чтобы вычисления начинались только после нажатия <ENTER>
Сделайте так: используйте не for, а while как внешний цикл (даже do-while). И символ вводите не сразу в str[i], а в промежуточную переменную c. Условие выхода - c==13.
Если символ - цифра, то
Код:
str[i++] = c;
при этом нужно проверять, чтобы i не вылезло за границы массива.
Если c == 8, то уменьшаем i и выводим символ (8).

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

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

Что если создать строку, или массив, в котором будут все запрещённые символы, и потом введённые данные сравнивать с ним? Хотя.. не легче наверное

может как то проще сделать, чтобы возможно было вводить только цифры от 0 до 9, ну и ещё backspace и enter
Winston123 вне форума Ответить с цитированием
Старый 13.06.2009, 19:38   #15
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Что если создать строку, или массив, в котором будут все запрещённые символы
У вас запрещенных символов намного больше, чем разрешенных.
Цитата:
может как то проще сделать, чтобы возможно было вводить только цифры от 0 до 9, ну и ещё backspace и enter
Так а куда проще-то? Проверка на принадлежность диапазону (0-9) и на равенство двум кодам (backspace и enter).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

13, это я так понимаю вы имеете ввиду код энтера, то есть 0x0D???

Честно признаюсь, не совсем уловил как всё это сделать.. точней смысл то понятен, опять туплю с кодом..
Winston123 вне форума Ответить с цитированием
Старый 13.06.2009, 22:17   #17
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Winston123
13, это я так понимаю вы имеете ввиду код энтера, то есть 0x0D???
Да. Вот так сделайте:

Код:
int input()
{
printf ("Vvedite znachenie n (ot 1 do 9999): ");

char str[4],c;
int pos=0;

do
 {
  c = getch();
  if(c>='0'&&c<='9' && pos<4)
   {
    str[pos++]=c;
    printf("%c",c);
   }
  else if(c==0x08)
   {
    pos--;
    printf("%c",c);
   }

 } while(c!=0x0D);

return atoi(str);
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

Сразу вопрос, переменную pos в этом и подобных случаях всегда необходимо обнулять? Чем это грозит, если данное действие не сделать.. счётчик не от нуля пойдёт??

Ничего не понимаю... При нажатии backspace происходит перенос курсора на позицию влево, а введённый символ не стирается(((
Winston123 вне форума Ответить с цитированием
Старый 13.06.2009, 23:39   #19
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Winston123
Сразу вопрос, переменную pos в этом и подобных случаях всегда необходимо обнулять? Чем это грозит, если данное действие не сделать.. счётчик не от нуля пойдёт??
Да нужно обнулять. А точнее - инициализировать. Иначе там будет мусор (если повезет, то ноль).

Вот так измените:
Код:
int input()
{
printf ("Vvedite znachenie n (ot 1 do 9999): ");

char str[4],c;
int pos=0;

do
 {
  c = getch();
  if(c>='0'&&c<='9' && pos<4)
   {
    str[pos++]=c;
    printf("%c",c);
   }
  else if(c==0x08)
   {
    pos--;
    printf("%c %c",c,c);
   }

 } while(c!=0x0D);
str[pos]=0;
return atoi(str);
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

Бэкспейс работает..
Но если вводим значение 9999 вылетает ошибка:
Run-Time Check Failure #2 - Stack around the variable 'str' was corrupted.


Может быть нужно задавать char str[5]
Winston123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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