gpt4 book ai didi

c++ - 我需要帮助编写一个检查另一个变量的数据类型的函数

转载 作者:行者123 更新时间:2023-12-03 07:18:27 24 4
gpt4 key购买 nike

嗨,我在创建一个函数来检查变量的数据类型并检查它以确保数据类型是否与 C++ 中的数据类型相似时遇到问题。这是我到目前为止的代码:

#include <iostream>
#include <typeinfo>
using namespace std;




int main() {

int typeCheck(string words, string typeWanted);

//make number assurance function .

string word;
cin >> word;

typeCheck(word, "string");

}

int typeCheck(string words, string typeWanted) {
if (typeid(words).name() != typeid(typeWanted).name()) {
cin.clear();
cin.ignore();
return 0;
}
else if (typeid(words).name()== typeid(typeWanted).name())
cout << "All good";
}

当我运行代码时,它会一直显示相同的输出,即:All good,即使我输入的字符串或整数不正确。我不想这么说,而是希望它清除缓冲区并忽略它。谁能帮我解决这个问题吗?提前致谢!

最佳答案

C++ 是 statically typed language ,这意味着该类型在编译时是已知的。它永远不会被知道,在运行时。

这意味着在您的示例中:

int typeCheck(string words, string typeWanted);

wordstypeWanted 都将始终是字符串。如果它不是字符串,它将无法编译。因此,使用 typeid()在这种情况下有点毫无意义。你的 if 语句永远是假的,而你的 else-if 语句永远是真的。

相反,当您不知道它们是同一类型时,您可能需要使用 typeid(),例如在某种模板情况下:

template <class WordsType, class TypeWantedType>
int typeCheck(WordsType words, TypeWantedType typeWanted);

在这里,typeid() 比较更有意义,因为您并不真正知道 wordstypeWanted 是否都是字符串。

你可以这样做:

template <class WordsType>
int typeCheck(WordsType words, string typeWanted) {
if (typeid(words).name() != typeWanted) {
//...
}
// ...
}

这会将未知类型与所需类型进行比较。

最后,还有另一个选项,@RSahu 的评论选项:

if(words == typeWanted) {
//...
}

这会将用户提供的输入与字符串“string”进行比较。

我不清楚你到底想做什么,所以我不能推荐你应该使用哪一个,但至少现在你有几个选择。

关于c++ - 我需要帮助编写一个检查另一个变量的数据类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58358764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com