使用scanf的C多维数组大小

标签 c arrays file scanf multidimensional-array

我在为程序使用多维数组时遇到了一些问题。本质上,该程序使用 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/

相关文章:

php - 哪个更快/更有效 - 许多小的 MySQL 查询或一个大的 PHP 数组?

Python 安全删除文件

c - 为什么在 C 中输入为 0 时我的 getc() 总是返回 30?

javascript - react 替换数组中的项目

c++ - 为什么 C++ 中的可变大小数组 (VLA) 需要具有自动 (auto) 存储类?

c - C 中的文件处理

c - C 代码的输出,例如通过引用调用

c++ - C++中是否有任何默认函数来搜索字符串中的单词?

c - 从文件 (CSV) c 中高效读取和复制数据/字符串

c - Hook 窗口消息循环 WM_CLOSE