为什么是这样?数字变量如何获得5个不同的值?怎么记得?

时间:2013-02-26 14:18:51

标签: c

下面的代码要求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; 
 } 

5 个答案:

答案 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开始。