Помогите решить проблему
Почему когда я хочу проверить тип 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;
}
// 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 символ а я это и хочу проверить
?