как да проверя дали числото е цяло число c


Отговор 1:

За преобразуване на низ от клавиатурата в правилно цяло число имате няколко сценария:

  • положително цяло число само цифри 0–9 в низ.
  • отрицателно цяло число започва с '-', само цифри 0–9 след това.
  • експоненциално цяло число, има 'e' или 'E' между основа и експонента, може да бъде цяло число, дори ако основата има мантиса, ако експонентата е достатъчно голяма.

Така че е по-добре да проверите дали низът може първо да бъде преобразуван в число с плаваща запетая, след това дали е целочислена стойност и да уловите лоши символи като изключение.

Използвам функцията STL string-to-float std :: stof вътре в две функции, но улавям невалидни символи. В този случай символите след валиден поплавък се игнорират и все още получавате число.

#include #include #include #include #include // хвърля std :: invalid_argument, std :: out_of_range дълъг низ_до_дълъг (const std :: string & s){ float f = std :: stof (s); връщане дълго (f);}// хвърля std :: invalid_argument, std :: out_of_range bool is_integer (const std :: string & s){ плувка f; плувка r; f = std :: stof (s); r = f - дълъг (f); връщане r == 0; }int main (){ дълъг х; std :: низ n; опитвам { std :: cin >> n; if (is_integer (n)) // хвърля {x = низ_до_дълго (n); // хвърля std :: cout << "ОК: \ t" << x; } друго { std :: cout << "само цели числа, без плувки \ n"; } } catch (const std :: invalid_argument & ia) { std :: cerr << "Невалиден аргумент:" << ia.what () << '\ n'; std :: cout << "срещнат се нецелочислен знак"; } улов (const std :: out_of_range & oor) { std :: cerr << "извън обхвата:" << oor.what () << '\ n'; } std :: cout << std :: endl; връщане 0;}

Малко много, но също така правилно, тъй като се справя с проблемни цели числа като

1.23e4 ОК: 12300
123goody ОК: 123

Отговор 2:

Скъпи приятели, направих акаунт в квора, за да отговоря на тези въпроси, на които най-добре мога да отговоря от мен.

Така че вашата програма в C ++, за да проверите дали числото е цяло число или не, е дадена по-долу. Тази програма не е като програмите с други отговори, защото тази програма също така открива дали числото всъщност е цяло число или десетично число, което обикновено не е намерено от вас никъде в интернета.

ВАШАТА ПРОГРАМА Е:

#include използване на пространство от имена std; int main () {cout << "Въведете номера: \ n"; плувка n; cin >> n; int res = n / 1; if (n <= 0 || n> = 0 && res * 1 == n) {cout << "Въведеното число е цяло число. \ n"; } else {cout << "Въведеното число не е цяло число. \ n"; }}

Моля, ГЛАСУВАЙТЕ, ако отговорът ви харесва.

И ако искате да видите всички видове програми на C ++, които могат да присъстват на вашия изпит, моля, посетете

www.webhostssss.weebly.com

.

Досега сме публикували 50 програми, но в бъдеще ще можем да обхванем всички видове програми, които могат да бъдат включени във вашия изпит.


Отговор 3:

Не съм сигурен, че разбирам въпроса. Когато имате стойност, вече знаете нейния тип, както е деклариран в обхвата ... Но когато трябва да знаете дали някаква стойност може да се интерпретира като цяло число, можете да проверите размера на типа. Този начин не се счита за стандартни преобразувания и е начин да се провери дали може да се интерпретира като int без единствените байтове от четенето му в паметта.

#include използване на пространство от имена std;шаблон bool can_be_interpret_as_integer (const T & somedata) {връщане sizeof (somedata)> = sizeof (int);}int main (int argc, char * argv []){двойно d = 1;късо s = 1;int i = 1;cout <cout <cout <cout <cout << * (int *) ((void *) & d) <cout << * (int *) ((void *) & s) < cout << * (int *) ((void *) & i) <cout <система ("пауза");връщане 0;}

Не виждам дали може да е полезно :)


Отговор 4:

C ++ е език със силна система от статичен тип. Не проверявате дали числото е цяло число; Вие го знаете. Когато декларирате типа на променливата, която използвате, за да запазите стойността, казвате „това трябва да съдържа цяло число“. И не можете да го използвате за поплавък или предмет или каквото и да било; само за цели числа.

Но предполагам, че сте питали за низ, който представлява стойност, и как да проверите дали това е цяло число. Ако използвате Boost, продължете и използвайте шаблона lexical_cast. Ако не, използвайте std :: stringstream, като по този начин:

std :: stringstream ss (my_string);int i;if ((ss >> i) .fail ()) { // не е конвертируемо в int}друго { // i съдържа преобразуването на цяло число}

BTW, ако използвате много това, струва си да създадете шаблон за това - и така действително работи Boost lexical_cast ... Не е трудно; Ще ви оставя това като упражнение.


Отговор 5:

A2A.

Всъщност не съм сигурен какво имате предвид под „номер“. Говорите ли за стойност, съхранявана в числов тип (че не можете лесно да разберете какво е ... може би заради шаблон)? Тогава можете да опитате следното:

#include #include int main (){ автоматична стойност = 5.0f; auto testMe = some_function_template_that_returns_numeric_types (стойност); std :: cout << "Оценяване res:" << testMe << ". \ n"; използвайки testMeType = decltype (testMe);constexpr bool isTestMeAnInteger = std :: numeric_limits :: is_integer; std :: cout << "testMe" << (isTestMeAnInteger? "е": "не е") << "цяло число. \ n"; връщане 0; }

Ако обаче имате предвид, че имате някакъв текст, за който имате право да приемете, че е някакво реално число (а не при идентифициране на този статичен тип на числова стойност, както в примера), анализирайте го на двойно. След това използвайте методите в другите отговори, за да тествате двойника, за да видите дали има някакъв дробен компонент.


Отговор 6:

Просто трябва да проверите дали таванната и подовата част на номера са равни.

Обмислете следния фрагмент:

#include

#include

използване на пространство от имена std;

int main ()

{

float a;

cin >> a;

ако (под (а) == таван (а))

cout <

друго

cout << "Не е цяло число";

връщане 0;

}

Следващият фрагмент ще даде изход като Не цяло число, тъй като таванът и подът на поплавъка не са равни.

Наздраве!


Отговор 7:

/ * За да проверите дали дадено число е цяло число или не * /

#include

int main ()

{

float a;

printf ("Въведете номера, който искате да проверите:");

scanf ("% f", & a);

ако (a == (int) a)

printf ("Числото е цяло число. \ n");

друго

printf ("Числото не е цяло число. \ n");

}


Отговор 8:

Различни случаи:

  1. C ++ е силно типизиран език. Следователно, когато променливата е декларирана, вие знаете, че тя е цяло число, защото е декларирана като такава. Дори когато предадете променливата на функция, тя се декларира като int. Когато предадете указател на променливата, тя ще бъде int * или int &. Така че знаете типа на променливата по нейното деклариране.
  2. Да предположим, че изпращате плувка или двойка и трябва да знаете дали дробната част е нула - ако разбирам въпроса ви правилно. В този случай можете да използвате функции таван (закръгляване нагоре) и под (закръгляване надолу).
  3. Като се има дубъл, можете да разбиете части от цело число и дроб, като използвате modf.
  4. Ако използвате C ++ 17, имате "всякакъв" тип променлива, който може да съдържа всеки тип променлива - int, float, низ и т.н.
std :: всяко a = 1;std :: cout << a.type (). name () << ":" << std :: any_cast (а) << '\ n';разпечатки: i: 1

Отговор 9:

Можете да използвате функцията modf, за да проверите дали дробната част е нула:

#include #include използване на пространство от имена std;int main (){ двоен номер, tmp; cout << "Въведете число:" << endl; cin >> num; if (cin.fail () || std :: isnan (num)) {cout << "Не сте въвели номер." << endl; връщане -1; }автоматично str = modf (num, & tmp)? "не е": "е"; cout << num << str << "цяло число" << endl;}

Отговор 10:

Въпросът е малко неясен. Изглежда ясно, че не питате дали това е целият тип данни. Предполагам също, че не искате да знаете синтаксиса на цяло число. Предполагам, че искате да знаете дали float (или double) има цяло число. Да приемем, че F е float / double, който искате да проверите, а I е цяло число. Задайте F на I. Тогава, ако I е равно на F, F има цяло число. Очевидно трябва да се притеснявате за ограниченията на стойността при този тип тест.


Отговор 11:

Кодов фрагмент за проверка дали дадена стойност (float, long) е am integer:

cin >> num;int_val = int (num)ако (int_val == num) {cout << "Цяло число";}друго{cout << "Не е цяло число";}

Типът данни на променлива може да бъде проверен с помощта на typeid оператора от typeinfo.

Справка:

typeid оператор - cppreference.com