我如何使scanf函数打印整个数组

时间:2019-04-06 13:36:09

标签: c scanf

我编写了一个简单的代码,该代码应该读取并打印一个数组,但不会打印任何内容。

我注意到的是,当我进行第一个for循环而不是n-1n时(但是第二个循环仍然去n),它实际上是有效的。示例:

输入:1 2 3 4 5 6
输出:1 2 3 4 5 0

当第二个循环进入n-1时它也起作用,因此错误出在第一个循环或scanf函数中。

我该怎么做才能打印整个数组?

#include <stdio.h>

#define MAX_LENGTH 50

int main() {
    int a[MAX_LENGTH];
    int n, i;
    printf("Insert the length of array: ");
    scanf("%d", &n);
    printf("Insert elements of array: ");
    for (i = 0; i < n; i++)
        scanf("%d ", &a[i]);
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
}

1 个答案:

答案 0 :(得分:1)

问题是您使用scanf()格式的尾随空格:scanf一直在等待更多输入,直到您输入的内容不是空白,换行符是空白。

您应该只将"%d"用作scanf()格式。

此外,您应该检查scanf()的返回值,以避免在输入无效时发生未定义的行为。

这是更正的版本:

#include <stdio.h>

#define MAX_LENGTH 50

int main() {
    int a[MAX_LENGTH];
    int n, i;

    printf("Insert the length of array: ");
    if (scanf("%d", &n) != 1)
        return 1;
    if (n > MAX_LENGTH) {
        printf("too many numbers, limiting to %d\n");
        n = MAX_LENGTH;
    }
    printf("Insert elements of array: ");
    for (i = 0; i < n; i++) {
        if (scanf("%d", &a[i]) != 1)
            return 1;
    }
    for (i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}