C语言中从广西读入未知长度的数字,放个数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中从广西读入未知长度的数字,放个数组相关的知识,希望对你有一定的参考价值。

请问一下如果从一个未知长度的存放有许多数字的文件中,把数字全部读出来,然后存入相应大小的数组里面???希望高手写出读的具体的C语言代码,,
需要代码!!!
假设被读的文件为task.txt

#include<stdio.h>
#include<stdlib.h>>
int a[1000];
int main()

int i=0,x,n;
freopen("task.txt","r",stdin);
while(scanf("%d",&x)!=EOF) a[i++] = x;
n = i; /*数组中有效的数字个数*/
freopen("CON","r",stdin);
printf("num:%d\n",n);
for(i = 0; i<n ; i++)
printf("%d ",a[i]);
system("pause");
参考技术A 等下送一个回来再帮你解答哈,应该不是很急吧 参考技术B 看过CSDN的帖子过来的吧,你可以按照那上面说的实现。
我自己设计了以个实现方法,采用动态数组:
char *p;
int i,k;
CFile mFile;
mFile.Open(_T("d:/task.txt"),CFile::modeRead);
k=mFile.GetLength();
p = new char[k];
for(i=0;i<k;i++)

mFile.Read(p,1);
p++;

mFile.Close();
参考技术C 请参看程序注释,不懂可以HI我。

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

int main() //建议使用二进制读写,读的时候效率高,存储的时候也节省空间

long file_len;
int *a = NULL, num = -1;
FILE* input = fopen("input.txt", "r"); //要是用二进制存储的话,读写要容易操作一点
//FILE* output = fopen("input.txt", "w");
//srand(time(0)); //随机生成测试数据
//for (num = 0; num < 10000; num++) fprintf(output, "%d ", rand());

if (!input) printf("open failed!"); return 1;
fseek(input, 0, SEEK_END);
file_len = ftell(input);
if (file_len < 1) printf("file is empty!"); return 1;
a = (int*)malloc(file_len>>1); //文件长度处以2,即便这样也会浪费一部分内存
while (!feof(input))

fscanf(input, "%d", &a[++num]);

return 0;

带有 SWIG 未知长度数组的 NumPy C 扩展

【中文标题】带有 SWIG 未知长度数组的 NumPy C 扩展【英文标题】:NumPy C extension with SWIG unknown length array 【发布时间】:2011-10-28 12:21:11 【问题描述】:

我想用 SWIG 包装一个 C 函数。 该函数将几个数组(长度相同)作为输入并返回另外三个数组。 然而,不可能预先预测返回数组的长度,并且这些是在函数中动态分配的。 是否可以用 SWIG(使用 numpy.i)包装这样的函数,如果可以,如何? 简化的函数声明如下所示:

int func(double **a, double **b, long int *N, double *x, double *y, long int *Nx, long int *Ny);

其中NxNy 是事先已知的,但Nab 的长度)是未知的,并且ab 被分配(malloc)在功能。

【问题讨论】:

这只是一个 C 问题吗? Swig 使使用 C++ 中的std::vector 解决问题变得更加容易,即使您最终包装了原始函数。 是的,它完全是一个 C 问题。我已经为这个问题放弃了 SWIG,并手动编写了工作正常的包装器。我可以发布答案,但这并不是这个问题的真正答案,因为我不使用 SWIG。 没有理由因此放弃 SWIG。只是不要使用 SWIG 的类型图(它们非常复杂)。您可以在需要时编写自己的包装器,返回和接收 PyObject* 参数。 SWIG 将识别这些,同时仍处理简单的案例(如 int)。 【参考方案1】:

似乎 SWIG(或任何其他 Python 包装器生成器)无法做到这一点。 我最终手动编写了 Python 包装器,这实际上非常简单,使用 PyArray_SimpleNewPyArray_SimpleNewFromData 创建输出数组。 对于后者,必须格外小心,以免产生内存泄漏。 玩了一会儿,我发现前者结合简单的memcpy 更安全。

【讨论】:

以上是关于C语言中从广西读入未知长度的数字,放个数组的主要内容,如果未能解决你的问题,请参考以下文章

如何用C语言编出 读入一个五位数,分割该数各位上的数并将分割的数字以间隔三

C语言中如何实现多组数据输入输出?

在C语言中如何固定字符的长度

N组相同固定长度字符数组成员统计 C/C++语言实现

C语言怎么编写输出6个数再换行输出数字的命令?

在c语言中怎么输入一组数字存储在数组里