所以我有一个20 x 20的数组,并且全部填充为-1。
我也有一个input.txt,其中包含一些数字,例如:
2,3
5,6
如何填充数组,使array[0][0]
成为2
,
array[0][1]
将是3
,array[1][0]
将是5
,array[1][1]
将是6
,所有其他元素将是-1。>
我已经尝试过使用fscanf的for循环,直到有新行,但是那行不通。
答案 0 :(得分:0)
尝试使用“文件结尾”(eof),其中m和n是行和列
for (i = 0; i < m && !feof(input); i++)
for (j = 0; j < n && !feof(input); j++)
fscanf(input, "%f", &a[i][j]);
如果文件中还给出了数组的大小(m和n),请在前面加上一个if条件
if (!feof(input))
fscanf(input, "%d %d", &m, &n);
for (i = 0; i < m && !feof(input); i++)
for (j = 0; j < n && !feof(input); j++)
fscanf(input, "%f", &a[i][j]);
答案 1 :(得分:0)
我已经尝试过使用fscanf的for循环,直到有新行,但是那行不通。
与OP prior question中一样,fscanf(in, "%d,%d\n", &x, &y)
上的变化无法检测行尾。格式中的'\n'
将匹配输入上的任何空白,包括'\n'
,' '
,'\t'
等
fscanf(..., "%d",...)
的简单使用很容易失败,因为"%d"
将消耗所有前导空白,而不会'\n'
与其他空白之间进行区分。
如何填充数组...
尽管可以使用fscanf()
解决此任务,但请考虑 fgets(),strtol()。
最好的方法是使用fgets()
到达行:直到最后一个'\n'
为止的所有字符。然后使用strtol()
,strtoll()
等读取整数。
long
整数和空格每个都需要合理地少于21个字符。为了适应额外的前导零间距,请使用预期大小的2倍。
#define CHAR_PER_NUMBER 21
#define NUM_PER_LINE 20
#define LINE_NUM 20
#define LINE_SIZE (NUM_PER_LINE * CHAR_PER_NUMBER * 2)
long array[LINE_NUM][NUM_PER_LINE];
// read data
for (int i = 0; i < LINE_NUM; i++) {
char buf[LINE_SIZE + 1]; // +1: room for the appended the null character
if (fgets(buf, sizeof buf, in) == NULL) {
buf[0] = '\0';
}
// Now parse the line
char *p = buf;
for (int j = 0; j < NUM_PER_LINE; j++) {
char *endptr;
array[i][j] = strtol(p, &endptr, 10);
if (p == endptr) {
array[i][j] = -1; // no conversion
}
p = endptr; // advance to the next number
}
}
其他问题包括处理病理长行,超出long
范围的值,I / O错误处理和效率详细信息。
输入应包含表示浮点数的文本,因此应保证每个值都具有更大的最大大小。