C 程序的输出 |设置 1
预测以下程序的输出。问题 1
#include
int main()
{
int n;
for(n = 7; n!=0; n--)
printf("n = %d", n--);
getchar();
return 0;
}
输出:上面的程序进入无限循环,因为在检查循环条件 (n != 0) 时 n 永远不会为零。
问题2
#include
int main()
{
printf("%x", -1<<1);
getchar();
return 0;
}
输出取决于编译器。对于 32 位编译器,它将是 fffffffe,对于 16 位编译器,它将是 fffe。
问题 3
# include
# define scanf "%s Geeks For Geeks "
main()
{
printf(scanf, scanf);
getchar();
return 0;
}
输出:%s Geeks For Geeks Geeks For Geeks
说明:经过编译的预处理阶段后,printf 语句将变为。
printf("%s Geeks For Geeks ", "%s Geeks For Geeks ");
现在您可以轻松猜出为什么输出是 %s Geeks For Geeks Geeks For Geeks。
问题 4
#include
#include
enum {false, true};
int main()
{
int i = 1;
do
{
printf("%d\n", i);
i++;
if (i < 15)
continue;
} while (false);
getchar();
return 0;
}
输出:1
说明: do wile 循环在每次迭代后检查条件。所以在 continue 语句之后,控制转移到语句 while(false)。由于条件为假,'i' 只打印一次。
现在试试下面的程序。
#include
#include
enum {false, true};
int main()
{
int i = 1;
do
{
printf("%d\n", i);
i++;
if (i < 15)
break;
} while (true);
getchar();
return 0;
}
问题 5
char *getString()
{
char *str = "Nice test for strings";
return str;
}
int main()
{
printf("%s", getString());
getchar();
return 0;
}
输出:“很好的字符串测试”
上面的程序之所以有效,是因为字符串常量存储在数据段(而不是堆栈段)中。因此,当 getString 返回时 *str 不会丢失。