c为什么?数字变量如何获得5个不同的值?它是如何记忆的



下面的代码请求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之类的东西开始。

最新更新