我编写了一个简单的代码,该代码应该读取并打印一个数组,但不会打印任何内容。
我注意到的是,当我进行第一个for循环而不是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]);
}
答案 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;
}