Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод только цыфр, Хелп 
:(
    Опции темы
Warden
Дата 22.11.2008, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 5.11.2008
Где: Ukraine

Репутация: -1
Всего: -1



Код

void main(){
int n=0;
int *pa;
int i,j,action,sort;
clrscr();
randomize();
printf("Enter number of array element ->\n");
scanf("%d",&n);
pa=(int*)malloc(n*sizeof(int));

 for(i=0;i<n;i++){
 printf("Enter element number %d  ->",i);
 scanf("%d",&*(pa+i));
 }
 printf("Enter array  ->  ");
 for(j=0;j<n;j++){
 printf(" %d",*(pa+j));
 }
printf("\n Choose action");
printf("\n1.Sort");
printf("\n2.Amount zero element");
printf("\n3.Find nember of element");
scanf("%d",&action);
switch(action){
case 1:{
       printf("\nChoose sort method:");
       printf("\n1 - Buble sort");
       printf("\n2 - Select sort");
       printf("\n3 - Paste method\n");
       scanf("%d",&sort);

     switch(sort){
      case 1:buble_Sort(pa,n);break;
      case 2:select_Sort(pa,n);break;
      case 3:insert_Sort(pa,n);break;
     };
    break;
       }

case 2:amount_Zero(pa,n);break;
case 3:find_Element(pa,n);break;
}
getch();


}

Вот есть фрагмент моей проги, кто знает подскажите плз как сдлать так чтобы при вводе размерности масива и его елементов пользователь мог ввести только цыфры а не буквы и символы
PM MAIL ICQ Skype GTalk   Вверх
Remiznik
Дата 22.11.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: 1
Всего: 1



думаю нужно перед передачей строки проверить её на правельность ввода ... нужна  функция проверки  отстусвия знаков и символов кроме нужных !!! но тут я думаю могут быть проблемы так как числа могут буть вешественые !!! 
PM MAIL   Вверх
IKM2007
Дата 22.11.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Уже была такая тема. Вот код.
Код

#include <iostream>
#include <cstring>
#include <cctype>
#include <cstdlib>
using std::cout;
using std::cin;
void in(int &digit)
{
char x[11];
cout<<"*******Vvedite chislo*******\n";
l:
cin.getline(x,11,'\n');

int n=(int)strlen(x);

for(int i=0;i<n;i++)
if(!isdigit(x[i]))
{
cout<<"Vvedite snova\n";
goto l;
}
digit=atoi(x);
}
void main()
{
int x,y;
in(x);
in(y);
}



--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
sQu1rr
Дата 22.11.2008, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



Могу предложить альтернативный способ... Тока над решением придутся подумать но расскажу логику

команда cin >> x; пре условии что x = int, считывает только цифры, и когда в потоке ввода встречается не цифра, то cin ее не использует, а остовляет в потоке и читает следующий символ. Так как символ не цифры cin остовляет в потоке, то это приводит к бескоечному циклу прочтения одного и того же символа. Это можно использовать для удаления символов прямо во входном потоке.

Ну разумеется легче не пудрить сбе мозги, а действовать по варианту IKM2007 
PM MAIL Skype GTalk   Вверх
Remiznik
Дата 22.11.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: 1
Всего: 1



работает только с целыми !! если вводиш вешественое определяет что это строка (
PM MAIL   Вверх
Warden
Дата 22.11.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 5.11.2008
Где: Ukraine

Репутация: -1
Всего: -1



а теперь кто поможет перевести его на си?smile
PM MAIL ICQ Skype GTalk   Вверх
Warden
Дата 23.11.2008, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 5.11.2008
Где: Ukraine

Репутация: -1
Всего: -1



Код

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int collums=0,lines=0;

int create_array(int,int);
void sort_Array(int**,int,int);


void main(){
clrscr();
printf("\nEnter number of collums  ->");
scanf("%d",&collums);
printf("\nEnter number of lines  ->");
scanf("%d",&lines);
create_array(collums,lines);

//sort_Array(**pa,collums,lines);
}


int create_array(int collums,int lines){
int *(*pa);
**pa = (int)malloc(collums * sizeof(int));

 for(int i = 0;i<collums;i++){
 *(pa + i) = (int*)malloc(lines * sizeof(int));
 }

 for(i=0;i<collums;i++){
  for(int j=0;j<lines;j++){
  printf("\nWrite element number  [%d,%d] ",i+1,j+1);
  scanf("%d",&*(*(pa + i) + j));
  }
 }
printf("Enter array\n");
 for (i=0;i<collums;i++){
    for(int j=0;j<lines;j++){
    printf(" %d ",*(*(pa + i) + j));
    }
    printf("\n");
 }
getch();
return(**pa);
}

void sort_Array(int **pa,int collums,int lines){
int tmp=0;
 for(int i=0;i<(collums*lines);i++){
  if(pa[i]>pa[i+1]){
  tmp=*pa[i];
  pa[i]=pa[i+1];
 *pa[i+1]=tmp;
  }
 }
 for(i=0;i<collums;i++){
  for(int j=0;j<lines;j++){
   printf(" %d ",*(*(pa + i) + j));
  }
  printf("\n");
 }
}

Люди, у меня после того как функция создание масива создала его, но не хочет возвращать поинтер на поинтер посотрите плз, а он мне нада в следущей функции, а делать в майне заполнение масива не хочеть
PM MAIL ICQ Skype GTalk   Вверх
IKM2007
Дата 23.11.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



В 26 строке вместо
Код

**pa = (int)malloc(collums * sizeof(int));

напиши
Код

pa = (int**)malloc(collums * sizeof(int));



--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Warden
Дата 23.11.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 5.11.2008
Где: Ukraine

Репутация: -1
Всего: -1



спс большреsmile
PM MAIL ICQ Skype GTalk   Вверх
Warden
Дата 23.11.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 5.11.2008
Где: Ukraine

Репутация: -1
Всего: -1



может есть какието ещё варианты, всё равно когда я возвращаю 
Код

return(**pa);

и потом 
Код

sort_Array(**pa,collums,lines);

пишет что не знает что такое pa
PM MAIL ICQ Skype GTalk   Вверх
IKM2007
Дата 23.11.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



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


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
OhMyGod
Дата 24.11.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.11.2009
Где: Харьков

Репутация: нет
Всего: нет



Код
istream & operator>>(istream & is, Rabota & R)
{          
    int i, y=0;
    char Pr[10];
    cout<<"--------------------------------Vvedite dannie po otdelu--------------------------"<<endl;
    cout<<"1. Vvedite nazvanie tovara: ";
    is>>R.Name;
    cout<<"2. Vvedite zenu na tovar: ";
    do
    {
        is>>Pr;
        for (i=0; i<strlen(Pr); i++)
            if (!isdigit(Pr[i]))
                y++;
        if (y>0)
            cout<<"Nepravilniy vvod. Vvedite snova."<<endl;
    }
    while (y!=0);
    R.Price=atoi(Pr);
            .............


Это часть кода.....Почему-то не всегда работает, если ввожу нормальные цифры, то все равно выбивает, что есть ошибка... А бывает и нормально работет.....

 И ещё....Скажите, как сделать проверку для типа float?
Плиз.. Надо на курсач, уже помираю тут с ним))))


Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) OhMyGod - 24.11.2009, 23:54
PM MAIL   Вверх
bsa
Дата 24.11.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Warden, почитай это.
PM   Вверх
OhMyGod
Дата 24.11.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.11.2009
Где: Харьков

Репутация: нет
Всего: нет



Это типа,что у меня как попало все напечатано.?...

В проге нормально, просто сюда копировала, шо попало получилось.....

Мне бы вот решить проблему с этой проверкой ввода данных и я была б счастлива smile 

Это сообщение отредактировал(а) OhMyGod - 24.11.2009, 23:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0872 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.