-1

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

5 回答 5

4

您的问题的答案是:当您按“enter”时,文本将被转储到标准输入中。scanf(..) 从标准输入读取数据,从而为您解析所有 5 个整数(一个接一个)。scanf 只会在 stdin 为空时阻塞。因此这些值不存储在数字变量中,而是存储在标准输入中。

于 2013-02-26T14:31:26.340 回答
2

这是因为打印发生在每次读取之间。请注意,scanf它在循环内部for ( i = 1; i <= 5; i++ ),第二个循环也是如此for ( j = 1; i <= number; j++ )

所以实际发生的是:
1. 将输入读入number
2. 打印星号
3. 转到 1。

该代码实际上并不记住所有 5 个数字 - 它只记住当前数字。

于 2013-02-26T14:22:47.207 回答
1

是的,这是一个非常 IQ 类型的问题。查看行 printf("请输入 1 到 30 之间的 5 个数字:");

而不是他们是一个“for循环”来取值。这个循环覆盖了其余的代码。因此,当第一个“数字”取值时,第二个“for循环”开始工作,完成后返回第一个“for循环”以从键盘获取第二个输入等等......

于 2013-02-26T16:56:16.073 回答
0

它不包含所有 5 个数字。您的代码设置 number 的值,然后打印相关数量的 * 字符。然后它会在您的第一个 for 循环的连续迭代中接收一个新值。该变量被重复使用,而不是同时设置为多个值。

于 2013-02-26T14:22:24.663 回答
0

每次您在程序中输入一个数字时,“int number”都会设置为该数字。

旧值已被替换,不再可访问。

在这里阅读http://en.wikipedia.org/wiki/Variable_(computer_science)

我可以建议不要从 C 开始编程,而是从 Python 之类的东西开始。

于 2013-02-26T14:22:38.283 回答