这是我的代码:
#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循环中创建变量的地方,但没有用。
你能解释一下这里出了什么问题吗?
答案 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 ();
在你的声明之前,那应该清除问题。通常,最好在函数开头初始化变量,然后稍后设置它们的值。