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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2013, 15:50   #1
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию Нужно чтобы принимал минус перед нулем

Если ввести -00043 то работает, а вот если -000000000000000000000000000005353 то нет, потому что берет минус и первые 16 нолей и пишет что больше 16 символов. Как сделать чтобы он так же отбрасывал нули но принимал минус?(Если ввести без минуса то нули отбрасываются и все работает)Вот код:
Код:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
 
char * d(char * s)
{
    char * p = s;
    while(*p=='0') 
        ++p;
    memmove(s,p,strlen(p)+1);
    return s;
}
 
int main()
 
{
setlocale(0,"rus");
 
double A, Z, U;
char a[256];
char *c=0;
char *p=a;
while(true)
{   
puts("Введите значение числа A(Не более 16 символов)");
gets(a);
d(a);
while(*p=='0')p++;
if (strlen(a)>16)
    {
    printf("\nБольше 16 символов, попробуйте заново\n\n");
    continue;
    }
sscanf(p, "%16s", &a);
if(getchar()==' ')
        {
        fflush (stdin);
        }
fflush (stdin);
A=strtod(a,&c);
 
            {
            printf("\nA=%.16f \n",A);
            if(!isdigit(c[0]) && c[0]!=0)
                {
                printf("\nОшибка в следующем:%s\n", c);
                printf("\nПопробуй еще раз\n\n");
                continue;
                }
break;
            }
}
 
while(true)
{
puts("Введите значение числа Z(Не более 16 символов)");
gets(a);
d(a);
while(*p=='0')p++;
if (strlen(a)>16)
    {
    printf("\nБольше 16 символов, попробуйте заново\n\n");
    continue;
    }
sscanf(p, "%16s", &a);
if(getchar()==' ') 
    {
    fflush (stdin);
    }
fflush (stdin);
Z=strtod(a,&c);
            {
            printf("\nZ=%.16f \n",Z);
            if(!isdigit(c[0]) && c[0]!=0)
                {
                printf("\nОшибка в следующем:%s\n", c);
                printf("\nПопробуй еще раз\n\n");
                continue;
                }
break;
            }
}
 
printf("U=%.16f\n", U=(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z));
 
return 0;
}
MishkaSh вне форума Ответить с цитированием
Старый 31.03.2013, 16:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А в чем задача? Длинная арифметика?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2013, 16:23   #3
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А в чем задача? Длинная арифметика?
Нужна умножить A на Z и чтоб не принимал всякие прочие символы. Вот осталась последняя проблема, просто нули он убирает а вот если перед нулем минус то он берет первые 16 символов и пишет что мол больше 16 символов
MishkaSh вне форума Ответить с цитированием
Старый 31.03.2013, 16:30   #4
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Код:
while (str[i++] == '0') ;
не?
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 31.03.2013, 16:34   #5
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от alexander13 Посмотреть сообщение
Код:
while (str[i++] == '0') ;
не?
Можешь в коде моем показать?
MishkaSh вне форума Ответить с цитированием
Старый 31.03.2013, 16:38   #6
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от MishkaSh Посмотреть сообщение
Можешь в коде моем показать?
Ну, в Вашем коде, по сути, так и сделано. Только как-то странно.

Нужно что-то типа такого: смотрим, является ли первый символ '+' или '-', если да, то устанавливаем переменную sgn в 1 или -1, соответственно, переходим к след. символу, пропускаем все нули тем циклом, что выше. Читаем число, домножаем его на sgn.

upd.
Почему нельзя просто scanf использовать?
Μολὼν λαβέ

Последний раз редактировалось alexander13; 31.03.2013 в 16:40.
alexander13 вне форума Ответить с цитированием
Старый 31.03.2013, 16:41   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нужна умножить A на Z
А зачем строкой вводишь? Вводи уже как вещественное что ли..
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2013, 16:46   #8
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от alexander13 Посмотреть сообщение
Ну, в Вашем коде, по сути, так и сделано. Только как-то странно.

Нужно что-то типа такого: смотрим, является ли первый символ '+' или '-', если да, то устанавливаем переменную sgn в 1 или -1, соответственно, переходим к след. символу, пропускаем все нули тем циклом, что выше. Читаем число, домножаем его на sgn.

upd.
Почему нельзя просто scanf использовать?
Ну вот можешь показать как это?)

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем строкой вводишь? Вводи уже как вещественное что ли..
там не строка а массив

Последний раз редактировалось Stilet; 31.03.2013 в 16:49.
MishkaSh вне форума Ответить с цитированием
Старый 31.03.2013, 16:51   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

char a[256]; - означает стандартную строку в Си. Массив символов там, а не чисел. И для ввода значения он тебе не нужен.
scanf("%lf",&A) сделает все как надо и без ввода строк.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2013, 16:55   #10
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Тогда защиту от дурака не будет
MishkaSh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тема:Модуль граф,-нужно чтобы получилась фигура и чтобы она двигалась Gulnaz379 Помощь студентам 6 27.10.2012 17:38
Как добавить нули перед числом, чтобы длина числа получилась 8? artemavd Общие вопросы Delphi 2 07.07.2011 19:30
чтобы выводились данные по дате минус n-дней almik Microsoft Office Excel 8 22.04.2011 16:38
что нужно чтобы написать вирус? JOFRIF Свободное общение 24 21.10.2008 01:38