我正在运行这个C程序,但它没有回答“答案是10”,而是发回消息:“答案是0”,即使它在正确的时间断开。
你能告诉我什么是错的吗?
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
int i;
for(int i = 0; i < 12; i++){
printf("Checking i = %d\n", i);
if(i + 90 == i * i) {
break;
}
}
printf("The answer is %d.\n", i);
}
答案 0 :(得分:2)
问题是你有两个i
。
int main (int argc, const char * argv[])
{
int i; //Declares outer i
for(int i = 0; i < 12; i++) //Declares a NEW i
{
printf("Checking i = %d\n", i);
if(i + 90 == i * i)
{
break;
}
}
printf("The answer is %d.\n", i); //Uses the outer i
}
答案 1 :(得分:1)
基本范围混淆:你有两个不同的变量i
:一个在main
函数体的外部范围内,另一个在for
内覆盖一个变量1}}循环。
外部变量未初始化,因此实际上您有未定义的行为。
你的意思是:
int i;
for (i = 0; i < 12; i++)
/* ^^^^^ use existing variable! */
{
printf("Checking i = %d\n", i);
if (i + 90 == i * i)
{
break;
}
}
答案 2 :(得分:0)
可能是额外的“int”吗?当循环退出时,你在for循环中声明另一个“i”实例超出范围。
答案 3 :(得分:0)
for(int i = 0; i < 12; i++){
您在此处创建另一个 i
,这会将i
隐藏在for
循环范围之外。
更改为:
int i;
...
for (i = 0; i < 12; i++){
答案 4 :(得分:0)
因为你有两个不同的变量“i” - 内部范围中的一个(从0..11递增),以及外部范围中的变量。您打印外部范围内的那个。
解决方案:
将“for(int i = ...)”更改为“for(i = ...)”