Member 13044605 Ответов: 3

Как запретить пользователям вводить более 2 знаков после запятой в языке C


Например, это не допускается 2.00000 из-за его более чем 2. d. p, но это 2.00
У меня есть код ниже, который разбивает значение и только как .000 или .00 зависит от числа. И я думал о том, чтобы создать такое условие, как если бы оно было больше 99 .
Но это не работает

Что я уже пробовал:

int Substring(char string[]) 
{
int i; int lengt; int index;
   //char string[5], 
   char sub[1000];
   int position, length, c = 0;
 
   //printf("Input a string\n");
   //gets(string);
   printf("%s",string);
 
   lengt=strlen(string);
   for(i=1;i<lengt;i++)
   {
                     
                  //   if("."==string)
                  // {
                  //printf("error please re-type your value with a dot\n");
                  //break;
                  //}
                      if('.'==string[i])
                     {
                          index=i;
                          printf("%d : %d \n",index,lengt);
                          //break;
                          
                     }
   }
   //printf("%d",lengt);
   position=index;
   length=lengt;
   
   //printf("Enter the position and length of substring\n");
   //scanf("%d%d", &position, &length);
 
   while (c < length) {
      sub[c] = string[position+c];
      c++;
   }
   sub[c] = '\0';
 
   printf("Required substring is \"%s\"\n", sub);
 system("pause");
   return 0;
}

3 Ответов

Рейтинг:
2

Richard MacCutchan

Воспользуйся strchr[^] чтобы найти десятичную точку и strlen чтобы получить количество цифр после него.


Рейтинг:
19

OriginalGriff

Это твое домашнее задание, так что никакого кода!
Но это простая задача: все, что вам нужно, - это четыре части информации:
1) количество символов в строке.
2) Количество точек в строке.
3) положение последней точки.
4) Если есть что-нибудь, кроме цифр и точек.

Если (4) истинно или 2) больше 1, это плохо.
В противном случае вычтите 3 из 1, и если оно больше 3, это плохо.


Member 13044605

тап_п()
{
инт я; внутр длина; индекс инт ;
строка символов [5];
char sub[1000];
int позиция, длина, c = 0;
int deci; int dots=0;
printf ("Input a string\n");
gets(string);
//printf ("%s", строка);

lengt=strlen(строка);
для(i=1;i< lengt; i++)
{

if ('.'= = string[i])
{
индекс=i;
//printf ("%d : %d \n", индекс, длина);
перерыв;

}

}

для(i=1;i< lengt; i++)
{

if ('.'= = string[i])
{
точки=точки+1;


}

}







позиция=индекс;
длина=длина;



deci=длина-положение;
//printf ("%d", deci);

если (deci > 3)
{
printf ("error\n");
}
иначе если (точки > 1 )
{
printf ("error\n");

}

иначе если (deci == 3)
{
printf ("success\n");
}






система ("пауза");
возвращает 0;
}

Отделка торговом

Рейтинг:
0

CPallini

Функция dec2 изменяет входную строку на месте. Предоставляется тестовая программа.

#include <stdio.h>

char * dec2(char * s)
{
  char * p = s;
  int decpoint = -1;

  while ( *p && decpoint < 2)
  {
    if ( decpoint >= 0)
      ++decpoint;
    if ( *p == '.')
    {
      decpoint = 0;
    }
    else if (*p < '0' || *p > '9')
    {
      return s; // error in input number
    }
    ++p;
  }
  *p = '\0';
  return s;
}

int main()
{
  char a[] = "12.02";
  char b[] = ".123456789";
  char c[] = "12567.0";
  char d[] = "123.456";
  char e[] = "12.F4";

  printf("in '%s'", a);
  dec2(a);
  printf(", out '%s'\n", a);

  printf("in '%s'", b);
  dec2(b);
  printf(", out '%s'\n", b);

  printf("in '%s'", c);
  dec2(c);
  printf(", out '%s'\n", c);

  printf("in '%s'", d);
  dec2(d);
  printf(", out '%s'\n", d);

  printf("in '%s'", e);
  dec2(e);
  printf(", out '%s'\n", e);

  return 0;
}