下面的代码请求5个数字并打印给定数字的星号。数字变量如何记住5个数字?下一个数字不是在变量中输入了析构函数值吗?我不明白。你能给我解释一下吗?
以下代码给出输出:
Enter 5 numbers between 1 and 30: 28 5 13 24 7
****************************
*****
*************
************************
*******
#include <stdio.h>
int main( void ){
int i;
int j; /* inner counter */
int number; /* current number */
printf( "Enter 5 numbers between 1 and 30: " ); /* loop 5 times */
for ( i = 1; i <= 5; i++ ) {
scanf( "%d", &number ); /* print asterisks corresponding to current input */
for ( j = 1; j <= number; j++ )
printf( "*" );
printf( "n" );
} /* end for */
return 0;
}
您的问题的答案是:当您按下"enter"时,文本将转储到stdin中。scanf(..(从stdin读取,从而为您解析所有5个整数(逐个(。只有当stdin为空时,scanf才会阻止。因此,这些值不是存储在数字变量中,而是存储在stdin中。
这是因为打印发生在每次读取之间。请注意,scanf
在循环for ( i = 1; i <= 5; i++ )
内,第二个循环for ( j = 1; i <= number; j++ )
也是如此。
所以实际发生的是:
1.将输入读取到number
2.打印星号
3.转到1。
该代码实际上并不能记住所有5个数字,它只记得当前的数字。
是的,这是一个非常IQ类型的问题。看那条线printf("输入介于1和30之间的5个数字:"(;
比它们的是一个"for循环"来获取值。这个循环涵盖了代码的其余部分。因此,当第一个"数字"取值时,第二个"for循环"开始工作;在完成返回到第一个"for loop"以从键盘进行第二次输入后;等等…
它不包含所有5个数字。您的代码设置数字的值,然后打印相关的*字符数。然后,它在第一个for循环的连续迭代中接收一个新值。变量将被重复使用,而不是同时设置为多个值。
每次在程序中输入数字时,"int number"都会设置为该数字。
旧值已被替换,无法再访问。
请在此处阅读http://en.wikipedia.org/wiki/Variable_(计算机科学(
我可以建议不要从C开始编程,也许可以从Python之类的东西开始。