Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Ввод только цыфр


Автор: Warden 22.11.2008, 17:01
Код

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();


}

Вот есть фрагмент моей проги, кто знает подскажите плз как сдлать так чтобы при вводе размерности масива и его елементов пользователь мог ввести только цыфры а не буквы и символы

Автор: Remiznik 22.11.2008, 17:16
думаю нужно перед передачей строки проверить её на правельность ввода ... нужна  функция проверки  отстусвия знаков и символов кроме нужных !!! но тут я думаю могут быть проблемы так как числа могут буть вешественые !!! 

Автор: IKM2007 22.11.2008, 17:37
Уже была такая тема. Вот код.
Код

#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);
}

Автор: sQu1rr 22.11.2008, 17:50
Могу предложить альтернативный способ... Тока над решением придутся подумать но расскажу логику

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

Ну разумеется легче не пудрить сбе мозги, а действовать по варианту IKM2007 

Автор: Remiznik 22.11.2008, 17:54
работает только с целыми !! если вводиш вешественое определяет что это строка (

Автор: Warden 22.11.2008, 19:48
а теперь кто поможет перевести его на си?smile

Автор: Warden 23.11.2008, 01:36
Код

#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");
 }
}

Люди, у меня после того как функция создание масива создала его, но не хочет возвращать поинтер на поинтер посотрите плз, а он мне нада в следущей функции, а делать в майне заполнение масива не хочеть

Автор: IKM2007 23.11.2008, 10:19
В 26 строке вместо
Код

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

напиши
Код

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

Автор: Warden 23.11.2008, 11:34
спс большреsmile

Автор: Warden 23.11.2008, 18:06
может есть какието ещё варианты, всё равно когда я возвращаю 
Код

return(**pa);

и потом 
Код

sort_Array(**pa,collums,lines);

пишет что не знает что такое pa

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

Автор: OhMyGod 24.11.2009, 21:49
Код
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?
Плиз.. Надо на курсач, уже помираю тут с ним))))


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

Автор: bsa 24.11.2009, 22:25
Warden, почитай http://forum.vingrad.ru/forum/topic-269805/kw-faq-coding-style-%D1%81%D1%82%D0%B8%D0%BB%D1%8C-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F.html.

Автор: OhMyGod 24.11.2009, 23:52
Это типа,что у меня как попало все напечатано.?...

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)