为什么我不能在C++中重新定义这个变量?

为什么我不能在C++中重新定义这个变量?,c++,variables,C++,Variables,在默认值之后,我得到一个错误:说我不能重新定义变量。另外,它在底部说,变量tf不是一个变量。我对C++很陌生,我只知道Python能帮我解决问题吗?p> 新代码给我一个错误: char x; bool tf; void IsNumber(char x) { switch (x) { case '1': case '2': case '3': case '4': case '5': ca

在默认值之后,我得到一个错误:说我不能重新定义变量。另外,它在底部说,变量tf不是一个变量。我对C++很陌生,我只知道Python能帮我解决问题吗?p> 新代码给我一个错误:

char x;
bool tf;
void IsNumber(char x)
{
    switch (x)
    {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '0':
            bool tf(true);
            break;
        default:
            bool tf(false);
            break;
    }
}

int main(int argc, const char * argv[])
{
    using namespace std;
    cout << "Test if a character is a number: " << endl;
    char x;
    cin >> x;
    IsNumber((char) x);
    if (bool tf = true)
        cout << "True" << endl;
    if (bool tf = false)
        cout << "False" << endl;
    return 0;
}

您在最顶端将x定义为全局变量,然后在main中再次尝试定义它。您必须选择一个或另一个,或重命名一个。你们可能想做的就是把一个放在一边

你还可以将你的胸部与=进行比较,而不是将它们与==进行比较

编辑:实际上你根本不需要比较

#include <iostream>
bool tf;
tf = true;
bool IsNumber(char x)
{
    switch (x)
    {
        case '1':

这将看到tf是否为真,输出是否为真,如果不是,输出是否为假

您没有为tf分配任何内容,对于比较运算符,我们希望使用==,而不仅仅是='s

if(tf){
    cout << "True\n"
}
else cout << "False\n"

您只能定义一个变量,您可以根据需要多次分配该变量

if (tf == true) {
}
意味着我正在定义一个变量并分配它

如果我只是想以后分配它

bool tf = false 
如果我想做条件测试

tf = false 

您试图在同一范围内声明两个同名的变量。switch语句本身定义了一个作用域,但每个case子句都没有定义。如果您希望在case子句中包含一个范围,那么您必须自己提供一个:

if (tf){do stuff} 
虽然还不清楚这有什么好处;您正在声明一个局部变量,然后忽略它。也许您想设置全局变量:

case '0':
{
    bool tf(true);
    break;
}
这样你就可以和我核对一下

case '0':
    tf = true;
    break;
或者,更不奇怪的是,您可能希望返回一个值:

if (tf) // NOT if (bool tf = true) - that also declares a new local variable
并用计算机进行测试

bool IsNumber(char x) {
    switch (x) {
        case '0': 
        // and so on
            return true;
        default:
            return false;
    }
}
或者,如果你不喜欢唠叨的话

if (IsNumber(x)) {
    cout << "True" << endl;
} else {
    cout << "False" << endl;
}
甚至

cout << (IsNumber(x) ? "True" : "False") << endl;

在熟悉范围、声明和定义等基础知识之前,您可能需要花一些时间阅读一本介绍性书籍。有一些建议。

您需要==检查相等性,您不需要一直输入所有布尔值。另外,如果x是char,则不需要强制转换它。我建议从课本或其他教程开始,从基础开始;到tf=真;这个程序应该没有全局变量,布尔值应该与if b和if!b、 不带==和!=。而布尔是假的;到tf=假;最基本的问题是代码太糟糕了,而问题是关于一个很小的问题,你会得到多个你没有问的问题的答案。花些时间学习C++,这不是一种简单的语言,完全不同于Python。你现在把它们作为作业。这很有帮助,除非我做tf=true;部分说C++需要一个全局的identifier@user2312690:我不明白你怎么能从那代码中得到那个错误。在第二行声明全局变量tf。不过,一旦你学会了语言的基本知识,你就会明白为什么你根本不想要一个全局的。@user2312690:我的意思是,你需要tf=true;在switch语句内部,而不是bool tftrue;它声明一个新的局部变量,而不是设置全局变量。你不能在函数外编写随机的代码位。如果你坚持比较布尔值和真值,那么记住比较的结果也是布尔值。如果tf==true==true,则应该是这样
cout << boolalpha << IsNumber(x) << endl;