在do-while循环中定义的未声明的标识符

时间:2014-02-09 13:46:13

标签: c do-while cs50 undeclared-identifier

这是我的代码:

#include <cs50.h>
#include <stdio.h>
#include <strings.h>

int main(void)
{
    int answer_compared;

    do  {
        printf("What is your credit card number?\n");
        long long credit_card = GetLongLong ();
        printf("Is your credit card number is %lld?\n", credit_card);
        printf("Please respond Yes or No.\n");
        string answer = GetString ();
        answer_compared = strncasecmp(answer, "y", 1);
    } while (answer_compared != 0);
    int long long cc = credit_card;
    printf("Thank you.\n"); 
    if (cc == 4){
        printf("Visa\n");
    }else if (cc == 34 || cc == 37){
        printf("AMEX\n");
    }else if (cc >= 51 && cc <= 55){
        printf("MC\n");
    }else printf("You did not enter an appropriate credit card.\n");
        printf("I think this is what I need.\n");

}              

我的错误是:

credit.c:17:32: error: use of undeclared identifier 'credit_card'
        int long long cc = credit_card;
                           ^

最初我将所有cc变量设置为credit_card但更改了它因为它增加了5个错误,这些都是出于同样的原因。我试图找到讨论在do-while循环中创建变量的地方,但没有用。

你能解释一下这里出了什么问题吗?

3 个答案:

答案 0 :(得分:1)

C有一个块范围。您需要在外部作用域中声明您的变量(long long credit_card)(例如函数的作用域,就像您使用answer_compared一样),如果您想在那里访问它。

除此之外,信用卡号码在数据类型方面不是“数字”。您不应该将其存储为一个 - 使用char[20]代替(16位,3个分隔符,nul终结符)!您可能希望将其标准化(删除4个块之间的分隔符),这样您就可以正确访问单个数字。

答案 1 :(得分:0)

你必须定义

long long credit_card
循环之外的

答案 2 :(得分:0)

啊,是的,正如其他人所说,这归结为范围。你可以移动

printf("What is your credit card number?\n");
long long credit_card = GetLongLong ();

在你的声明之前,那应该清除问题。通常,最好在函数开头初始化变量,然后稍后设置它们的值。