Проверка числового формата C++

Тема в разделе "LANGS.C", создана пользователем shock_X, 2 дек 2008.

  1. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    Здравствуйте. Подскажите пожалуйста функции, примеры как в программе на С++ осуществить проверку числового формата.
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    shock_X
    scanf
     
  3. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    wsd
    что scanf?
    это чтение а не проверка. Если можно проверить, то что ещё нужно прописать?
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    shock_X
    Return Value
    Returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned.
     
  5. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    о, да, был у меня трабл как то с выводом float'a, там вечные 1.#IND, 1.#INF и 1.#INV происходили, я даже в догадках растерялся - как это ловить, так что обошёлся сравнением первого байта с 7F, хотя понимаю что это непохек полный .\
     
  6. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
  7. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    s0larian
    Спасибо - хорошая функция, но немного не то.
     
  8. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    Это ответ на Ваш вопрос. Если он Вас не устраивает -- сформулируйте свой вопрос так, чтобы было понято что Вам нужно.
     
  9. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    flankerx
    эта функция считывает из строки, например: "777lol" 777, но если ввести строку, например: "ThisIsString" то она (функция) возвращает значение равное нулю. В моей задаче это не подходит.
     
  10. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    В общем разобрался немного, получилось вот так:

    Код (Text):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3.  
    4. int main ()
    5. {
    6.   int i;
    7.   char string[256];
    8.   do
    9.   {
    10.       system("cls");
    11.       printf("i=");
    12.       fgets(string, 256, stdin);
    13.       i = atoi(string);
    14.   }
    15.   while (i<=0 || i>100);
    16.   printf ("i=%d", i);
    17.   return 0;
    18. }
     
  11. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    boost::lexical_cast
     
  12. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    isdigit
    Код (Text):
    1. // Ввести целое N.Вывести кол-во десятичных цифр,необходимых для представления этого числа.
    2.  
    3. #include "stdafx.h"
    4. #include <string.h> // strlen
    5. #include <ctype.h>  // isdigit
    6.  
    7.  
    8. char buf[260]="\0";
    9.  
    10. int main(int argc, char* argv[])
    11. {  
    12.  
    13.     printf("Input integer: ");
    14.     gets(buf);
    15.  
    16.     // Проверка наличия только цифр
    17.     for(size_t i=0;i<strlen(buf);i++) if(!isdigit(buf[i])) return 1;
    18.  
    19.     printf("Amount of decimal digits: %d\n",strlen(buf));      
    20.    
    21.     gets(buf);
    22.     return 0;
    23. }
     
  13. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    Возникла проблема. Значит неделю назад сдал преподавателю алгоритм будущей программы, он проверил и сказал что всё верно. Ниже алгоритм, по которому нужно сделать программу:
    Код (Text):
    1. Функция EnterWithCheck
    2.     Вход: -
    3.     Выход: X:integer
    4.     Локальные переменные: NoError:boolean
    5. Начало
    6.     Повторять
    7.     НЦ
    8.         Очистка экрана;
    9.         NoError:=true;
    10.         Вывод("Введите X в интервале от -100 до 100");
    11.         Ввод X;
    12.         Если (X<-100) или (X>100) или (X не число) то
    13.         НЦ
    14.             NoError:=false;
    15.             Error; // Это вызов функции, которая выводит сообщение об ошибке
    16.         КЦ
    17.     КЦ
    18.     Пока NoError=false;
    19. Конец
    Интересует строка: "Если (X<-100) или (X>100) или (X не число)". Нужно написать проверку числового формата именно так. Если преподаватель сказал что так можно сделать - значит можно. Но как?
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    shock_X
    преобразуеш строку в число и если преобразовалась сравниваем
    :)
     
  15. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Для строки "01" твой метод не подойдет.
     
  16. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    wsd
    по-моему надо будет ещё ввести локальные переменные. Но алгоритм уже разработан и изменения не есть хорошо :dntknw:
     
  17. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Partner
    Код (Text):
    1. scanf( "%d", &iTest);
    2. printf("%d", iTest);
    проверь
    shock_X
    я сейчас занят, освобожусь кину сорец
     
  18. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Код (Text):
    1. scanf("%s",buf);
    2. sscanf(buf,"%d%n",&X,&n);
    3. if(!n||buf[n]||X<-100||X>100)
     
  19. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    В названии темы написано С++ и только единственный ответивший предложил С++ :)
     
  20. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    W4FhLF
    Никто не запрещает использовать Си. Это консольный проект (геометрическая задача). Нужно ввести 6 чисел, а ответом будет предложение :) Поэтому что Си, что Си++ - разницы нет
    wsd
    Black_mirror
    Спасибо, сейчас опробуем.