下面的代码要求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;
}
答案 0 :(得分:4)
您的问题的答案是: 按“enter”键时,文本将被转储到stdin中。 scanf(..)从stdin读取,从而为你解析所有5个整数(逐个)。 scanf只会在stdin为空时阻止。因此值不存储在数字变量中,而是存储在stdin中。
答案 1 :(得分:2)
这是因为打印发生在每次读取之间。请注意,scanf
位于循环for ( i = 1; i <= 5; i++ )
内,第二个循环for ( j = 1; i <= number; j++ )
也是如此。
实际发生的是:
1.将输入读入number
2.打印星号
3.转到1.
代码实际上并不记得所有5个数字 - 它只会记住当前的数字。
答案 2 :(得分:1)
是的,它是非常智商类型的问题。看看这条线 printf(“在1到30之间输入5个数字:”);
比他们的“for循环”取值。这个循环覆盖了其余的代码。 因此,当第一个“数字”取值时,第二个“for循环”开始它起作用&amp;完成返回第1个“for循环”后从键盘输入第2个输入等......
答案 3 :(得分:0)
它不包含所有5个数字。您的代码设置数字的值,然后打印相关的*字符数。然后它会在您的第一个for循环的连续迭代中接收新值。该变量被重用,而不是同时设置为多个值。
答案 4 :(得分:0)
每次在程序中输入数字时,'int number'都会设置为该数字。
旧值已被替换,无法再访问。
在此处阅读http://en.wikipedia.org/wiki/Variable_(computer_science)
我可以建议不要用C语言开始编程,也可以从Python开始。