【发布时间】:2012-12-24 21:04:51
【问题描述】:
相当简单的程序:
int main (void)
{
int i = 0, length=0;
char password[] = SECRET;
char guess[10];
for (i=0; i<3; i++){
printf( "Enter the password: " );
fgets (guess, 10, stdin );
length=strlen(guess);
guess[length]='\0';
if(strcmp( guess, password ) == 0 ){
printf("\aYou got it right!\n" );
return 0;
}
else printf("You wrote %s Incorrect guess\n\n", guess);
}
puts("Sorry, you're all out of guesses");
return 0;
}
但它不起作用。
即使在我可以让程序说的奇怪情况下: “你猜是‘黑色’。对不起,密码是‘黑色’” 认为某些隐藏字符、空格、垃圾信息或任何导致字符串比较的问题可能存在问题,但我似乎找不到它是什么!
【问题讨论】:
-
“它不起作用”是什么意思?您发布的代码甚至无法编译(
char password[] = SECRET;并且没有解释您要解决的问题。 -
@KenWhite SECRET,正如大写字母所暗示的那样,是一个常数,在这种情况下,它是在预处理器代码中定义的。密码本身并不重要
-
@Duncan:我们(他们无法访问您对代码的个人知识)应该如何知道这一点? (我不太在意密码是什么;硬编码为
"password"之类的值。)我们无法从这里看到您的屏幕,也无法读懂您的想法;如果您需要帮助解决问题,您的问题应该包含实际的、可编译代码来演示问题,并清楚地描述该问题是什么。 “它不起作用”不是问题描述;在您解释“不起作用”的含义之前,这是一个没有任何意义的声明。 -
@KenWhite 使代码可编译并不难。要获得可编译的代码,必须包含
#include和#define SECRET。请注意声明“不起作用”在下一段中解释。 -
@JanDvorak:不,要使代码可编译,需要本地
#define SECRET或将其更改为char password[] = "SECRET";,因为我们不知道这个问题的发布者的经验水平(基于发布的代码的简单性,它可以由从事新课程作业的人发布),并假设其他地方可能是#defined或不是#defined(以及 CASE 是否暗示#defined ) 是错的。至于是否解释了“不起作用”,我不同意您的评估,但感谢您的意见。 :-)