一个包含一堆数字的文件将被管道传输到程序中:
./executable < file.txt
我需要将该文件的内容存储在动态分配的 int 指针数组中,并搜索它以查找最大数字。 我用了fgets()
,但这使用的是字符而不是整数。
有什么办法可以做到这一点吗?
这是获取输入的代码,但这并没有真正按照我想要的方式工作:
#define MAX 100
int main(int argc, char* argv[])
{
int i;
char *buffer = malloc(sizeof(char) * MAX);
fgets(buffer, MAX, stdin);
}
编辑:我试过这个,但它显示值为 0。 (该文件正好有 24 个数字,每个数字都在新行上,后面没有空格(
#include <stdio.h>
#include <stdlib.h>
#define MAX 24
int main(int argc, char* argv[])
{
int i, *ptr;
int *values = malloc(sizeof(int) * MAX);
ptr = &values[0];
for (i = 0; i < MAX; i++) {
scanf("%d", &ptr);
ptr++;
}
ptr = &values[0];
for (i = 0; i < MAX; i++) {
printf("%dn", *(ptr + i));
}
free(values);
return EXIT_SUCCESS;
}
我现在会尝试fread
,看看我是否能弄清楚。
我猜问题是你读&ptr
.ptr
是指向int
的指针,因此您需要读取它,而不是读取其地址。
实际代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 24
int main(int argc, char* argv[])
{
int i, *ptr;
int *values = malloc(sizeof(int) * MAX);
ptr = values;
for (i = 0; i < MAX; i++) {
scanf("%d", ptr);
ptr++;
}
ptr = values;
for (i = 0; i < MAX; i++) {
printf("%dn", ptr[i]);
}
free(values);
return EXIT_SUCCESS;
}
这是最终对我有用的:
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#define INIT_MAX 5
int main(int argc, char* argv[])
{
int size, total, run, i;
int *values = malloc(sizeof(int) * INIT_MAX);
int *ptr;
size = INIT_MAX;
total = 0;
ptr = &values[0];
run = scanf("%d", ptr);
while (run == 1) {
total += 1;
ptr++;
if (total > size - 3) {
values = (int *) realloc(values, sizeof(int) * (size * 2));
size *= 2;
ptr = &values[total];
if (values == NULL) {
printf("Could not allocate memoryn");
return EXIT_FAILURE;
}
}
run = scanf("%d", ptr);
}
ptr = &values[0];
for (i = 0; i < total; i++) {
printf("%dn", *(ptr + i));
}
return EXIT_SUCCESS;
}
弄清楚 realloc(( 很棘手,因为我没有意识到每次重新分配内存时,我的int *ptr
都会遇到问题并搞砸一切。