Top.Mail.Ru
Ответы

Помогите решить проблему

Почему когда я хочу проверить тип float и char и то что тесты смотря на данный код неверные , но компилятор так не думает помогите решить.
код :
#include <iostream>
#include <cassert>


using namespace std;

float Num1(float x) {return x;}


void TestsNum1(){
assert(Num1(1));
assert(Num1(11.2));
assert(Num1(115.1));
assert(Num1(1111.2));
assert(Num1(11111.2));
assert(Num1(111111.2));
assert(Num1(1111111.2));
assert(Num1(111111111.211111111111111));
cout << "TestsNum OK" << endl;
}

char Num2(char x) {return x;}
void TestsNum2(){
assert(Num2('As'));
cout << "TestsNum OK" << endl;
}

int main(){
TestsNum1();
TestsNum2();
return 0;
}

По дате
По рейтингу
Аватар пользователя
Искусственный интеллект
123456789101112131415161718192021222324
 // C++20
#include <iostream> 
#include <string> 
#include <typeinfo>

using namespace std;

template<typename T> 
void type(const T& t) { 
    auto name = string(typeid(t).name()); 
    if (name == "char"s || name.front() == 'c') { 
        puts("char type"); 
    } else if (name == "float"s || name.front() == 'f') { 
        puts("float type"); 
    } else { 
        puts("unknown type"); 
    } 
}

int main() { 
    type('8'); 
    type(12.5F); 
    type(12.5); 
} 
Аватар пользователя
Мудрец

Что значит "проверить тип"? Вы тип сами указываете в программе, и меняться он не может.
A assert любое не булево выражение пытается преобразовать в булево. Например если это число - то любые числа не равные нулю воспринимаются как истинные. У вас ни одного числа равного нулю нет - поэтому все ассерты пропустились.

Аватар пользователя
Мудрец

Ваш код содержит ошибку в функции TestsNum2(). Вы пытаетесь передать строку 'As' в функцию Num2(char x), которая принимает только один символ. Строка 'As' содержит два символа, поэтому компилятор выдаст ошибку. Чтобы исправить эту проблему, вы можете передать только один символ в функцию Num2(char x), например assert(Num2('A')). Также обратите внимание, что функция assert проверяет истинность условия, а не равенство значений. Если вы хотите проверить равенство значений, вы можете использовать assert(Num1(1) == 1) вместо assert(Num1(1)).

Аватар пользователя
Мастер

дашь в попу сергио

Аватар пользователя
Ученик

Так ти char может принимать только 1 символ а я это и хочу проверить

Удаленный ответ Ответ удалён
Аватар пользователя
Ученик

?



Видео по теме