我在为程序使用多维数组时遇到了一些问题。本质上,该程序使用 scanf 从重定向文件中读取用户 ID 和一串字符。文件格式是一个三位数的用户 ID、一个空格和一个字符字符串,代表每行测试中多项选择题的答案,例如。
111 dabac
102 dcbdc
251 dbbac
我遇到的问题是不知道有多少用户,无法多次读取文件数据。我试过使用
for (lineNumber = 0; lineNumber != -1; lineNumber++)
{
int result = scanf("%d ", &data);
if (result == EOF)
break;
for(i = 0; i < numProblems; i++)
{
scanf("%c", &input);
}
获取文件的行数,然后设置数组的大小。然后将该数组传递给另一个读取数据的函数,使用相同的 for 循环但带有
input = arrayName[numProblems][lineNumber];
在第二个 for 循环中。我遇到的问题是 scanf 只能从文件中读取一次数据,并且在初始化之前无法将数据存储在数组中,这需要我知道有多少用户。
按照我设置的方式,程序可以找到行数(用户)或将数据存储在数组中(如果我将大小设置为任意数字),但是不是两者。
我必须使用 scanf,因为文件名不是常量(而且这是针对一个类的……教授要求使用 scanf),而且我不知道如何获取文件名中的行数文件并仍然能够读取数据。如果有人知道在不使用 scanf 的情况下查找行数或读取数据两次的解决方法,我将非常感谢您的帮助。如果发布整个程序会有所帮助,我也可以这样做。
谢谢,
埃里克
最佳答案
有多种方法可以做到这一点。我会推荐一个使用结构的链表,并记录到目前为止已阅读的内容。
如果你真的想继续使用数组,先使用malloc分配数组,然后使用realloc重新分配数组。您将获得用于重新分配的数组大小的运行计数。
应该是这样的:
POINTER *array = realloc(orig_array_pt, size);
if (array == NULL)
{
// realloc failed
}
else
{
orig_array_pt = array;
}
关于使用scanf的C多维数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15670273/