gpt4 book ai didi

计算数组大小

转载 作者:行者123 更新时间:2023-11-30 15:27:14 24 4
gpt4 key购买 nike

我有这个代码:

int main() {
int array[5];
int x;
int n;
for(x = 0; x != 5; x++) {
scanf("%d", &n);
if(n % 2 == 0) {
array[x] = n;
}
printf("%d", sizeof(array))

我想知道数组中保存了多少个变量。

假设用户输入“2,3,5,6,7,8”,但只会得到“2,6,8”,有什么方法可以获取它的大小吗?

我可以做到这一点的一种方法是创建另一个 int:

int main() {
int array[5];
int x;
int g = 0;
int n;
for(x = 0; x != 5; x++) {
scanf("%d", &n);
if(n % 2 == 0) {
array[x] = n;
g++;
}
printf("%d", g);

有没有办法在不增加 g 的情况下做到这一点?在 if block 内?

最佳答案

您必须跟踪计数,否则您将不知道该数组使用什么索引。您当前的代码不起作用,因为您在偶数之间的数组中留下了间隙:

    for (x = 0; x != 5; x++) {
scanf("%d", &n);
if (n % 2 == 0) {
array[x] = n;
g++;
}

对于输入“2 3 5 6 7”,您将数字 2 存储在数组的位置 0 处,将数字 6 存储在位置 3 处。其他位置处有随机数据。它们甚至不是零值,因为您在函数内声明了数组。顺便说一句,固定大小的数组应该在全局范围内声明,在任何函数之外。这是因为函数内部的变量是在堆栈帧中分配的,堆栈帧是一小块短暂的内存。您希望数组位于堆上,堆很大且生命周期很长。

以下代码包含多项改进。它定义了数组长度的常量,并在保存数字之前检查当前计数。 (如果写入超出数组末尾,则会发生不好的事情。)此外,此代码对其将读取的数据量没有固定的限制。它不断调用 scanf 直到返回文件结束值 EOF

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

#define MAX_COUNT 1000

int even[MAX_COUNT];

int main() {
int x,
count = 0; /* Track the number of even numbers. */
while (scanf("%d", &x) != EOF) { /* Get an integer from standard input. */
if(x % 2 == 0) { /* Is it even? */
if (count == MAX_COUNT) { /* If so, check the count first. */
printf("I have reached the limit of %d! I cannot store %d.",
MAX_COUNT, x); /* Fail gracefully if the array is */
} else { /* full. Otherwise, we can go */
even[count++] = x; /* ahead and save the number. */
}
}
}
printf("There are %d even numbers.\n", count);
return 0;
}

关于计算数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com