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

问题描述 投票:1回答:1

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

我注意到的是,当我首先进行循环时,转到n-1而不是n(但第二个循环仍然转到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]);
}
c scanf
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.