0

我正在解决一个问题,我必须对输入文件进行文件扫描,然后将变量分配给 i 和 j。输入文件 (input.txt) 必须如下所示:

100 20
500 70
10 3
250 25
600 100

我的代码看起来像这样。

int i, j;
float table[5][5];
FILE * ifp = fopen("input.txt","r");
// initiliaze array
for (i=0; i <=1; i++)
    for (j=0;j<=4;j++)
        fscanf(ifp,"%f",&table[i][j]);

我遇到的问题是所有值都首先按顺序输入到 J 中。我需要将两列拆分,以便 J 先读取左行。例如
,这table[0][3]将代表。250所以这table[1][0]将代表20
或者
如果更容易。将所有列1放入i并将列2放入j。让我知道

           a[0]  a[1]
a[0][0]--> 100   20  <--a[1][0]
a[0][1]--> 500   70  <--a[1][1]
a[0][2]--> 10    3   <--a[1][2]
a[0][3]--> 250   25  <--a[1][3]
a[0][4]--> 600   100 <--a[1][4]

谢谢。我已经为此苦苦挣扎了一段时间。

4

2 回答 2

1

您正在寻找将文件的列复制到数组的行

要做的事:反转for循环

for (j=0;j<=4;j++)
    for (i=0; i <=1; i++)

就这样。你会在你的数组中按照你想要的顺序得到数字

顺便提一句

改用这个

fscanf(ifp," %f",&table[i][j]);

在scanf的字符串格式开头加空格应该是" %f"

添加的空间将允许捕获文件的换行符

于 2013-04-02T17:20:48.353 回答
0

首先有几件事:

  • 您是否看到您的桌子尺寸太大而无法满足您的要求?
  • 您的嵌套for循环块没有用大括号括起来。如果您有多个语句要在一个for循环中执行,则除非将它们括在大括号中,否则您不会全部执行它们。

现在到你的程序的功能。

  • 您可以使用单个fscanf语句读取一行中的两个值。您的格式化字符串将类似于"%f %f",然后您将有两个参数。
  • 总是会有一个不超过五行的输入文件吗?如果它可以更长,那么您需要随时分配内存。

希望对一些人有所帮助。

于 2013-04-02T17:28:43.430 回答