为什么scanf不会保存我请求的“数组'n'的大小”并将其传递给for循环?

时间:2016-11-05 02:59:49

标签: c scanf

'scanf'不会将值n传递给for循环

感谢您抽出宝贵时间表示感谢。终端打印阵列的大小。我希望扫描该值并将其称为'n'。然后将该值'n'传递给循环,其中将小于999的随机数分配给该数组的不同部分。

#include <stdio.h>
#include <stdlib.h>

int n;
int arraySize;
int randN;
int rand();
int parameter = 999;

int main()
{
printf("What is the size of the array\n");
scanf("%d\n", &n);
//here is the scanf  


int i;
for(i = 0 ; i < n; i++ )
{
    int array[n];

    randN=rand();
    if (randN  <= parameter)
 {
        array[i]=randN;
        return 0;
    }
    return 0;
}

}

4 个答案:

答案 0 :(得分:1)

数组被声明为循环体中的第一行。

这意味着,对于每次循环迭代,都会创建数组,设置一个元素,然后数组不再存在。

如果您希望循环填充整个数组,请在循环之前声明数组。这也将确保数组可以在循环之后使用....所有元素都在循环中填充。

答案 1 :(得分:0)

删除格式字符串末尾的\ n。 scanf尝试按格式字符串中的指定获取输入,\ n强制用户输入其他换行符

scanf("%d", &n);

答案 2 :(得分:0)

见user3279954的回答

参见AnT的评论

“返回0;”语句将在循环的第一次迭代中终止程序,无论调用rand()返回的值是什么

另外:不要自己声明库函数(比如rand()),而是包含相应的头文件,这里已经包含了stdlib.h。

#include <stdio.h>
#include <stdlib.h>

int n;
int arraySize;
int randN;
int parameter = 999;

int main()
{
    printf("What is the size of the array\n");
    scanf("%d", &n);

    int array[n];
    int i;

    for (i = 0 ; i < n; i++ )
    {
        // This loop below should be optimized for any productive use
        // easy solutions like random%1000 (yielding values from 0
        // to 999) will bias some values over others.
        do {
            randN=rand();
        } while (randN > parameter);
        // This loop above should be optimized for any productive use

        array[i]=randN;
    }

    for (i = 0 ; i < n; i++ )
    {
        printf("%i ", array[i]);
    }

    return 0;
}

答案 3 :(得分:-1)

好的,所以你的代码有些东西:

#include <stdio.h>
#include <stdlib.h>

int n;
int arraySize;
int randN;
int rand();
int parameter = 999;

int main()
{
    printf("What is the size of the array\n");
    scanf("%d", &n); // remove the \n

    // in C, you have to use a const to create an array
    const int arrSize = n;
    // create the array BEFORE, entering the for loop
    int array[arrSize];
    int i;
    for(i = 0 ; i < n; i++ )
    {
       // this guarantees that you will get a number less than "parameter"
        randN=rand() % parameter;
        array[i]=randN; 
        // return 0; you don't want this return
    }

    // so you can see what got stored
    for(i = 0 ; i < n; i++ )
        printf("%d ", array[i]);

return 0;
}

编辑:为数组中的值添加了printf