c - 将大整数 txt 文件读入二维数组
问题描述
试图创建一个在大型文本文件中推理并将它们填充到行 + 列中的程序。最终我将不得不计算最佳路径,但在实现一个可以存储值的数组时遇到了麻烦。
#include <stdio.h>
#include <stdlib.h>
//max number of characters to read in a line. //MAXN=5 means 4 chars are read, then a \0 added in fgets. See reference for functionality
#define MAXN 100L
int main(void) //char** argv also ok {
int i=0, totalNums, totalNum,j=0;
size_t count;
int numbers[100][100];
char *line = malloc(100);
FILE* inFile ;
inFile = fopen("Downloads/readTopoData/topo983by450.txt", "r"); //open a file from user for reading
if( inFile == NULL) { // should print out a reasonable message of failure here
printf("no bueno \n");
exit(1);
}
while(getline(&line,&count, inFile)!=-1) {
for(;count>0; count--,j++)
sscanf(line, "%d", &numbers[i][j]);
i++;
}
totalNums = i;
totalNum = j;
for(i=0;i<totalNums; i++){
for(j=0;j<totalNum;j++){
printf("\n%d", numbers[i][j]);
}
}
fclose(inFile);
return 0;
}
解决方案
count 不会告诉你有多少个数字。进一步: sscanf(line, "%d", &numbers[i][j]); 每次只会扫描相同的号码。
所以这
for(;count>0; count--,j++)
sscanf(line, "%d", &numbers[i][j]);
应该是这样的:
j = 0;
int x = 0;
int t;
while(sscanf(line + x, "%d%n", &numbers[i][j], &t) == 1)
{
x += t;
++j;
}
where x
with%n
可以帮助您在扫描数字时移动到字符串中的新位置。
这是一个扫描字符串中数字的简化版本:
#include <stdio.h>
int main(void) {
char line[] = "10 20 30 40";
int numbers[4];
int j = 0;
int x = 0;
int t;
while(j < 4 && sscanf(line + x, "%d%n", &numbers[j], &t) == 1)
{
x += t;
++j;
}
for(t=0; t<j; ++t) printf("%d\n", numbers[t]);
return 0;
}
输出:
10
20
30
40
推荐阅读
- c++ - 从默认注册表中删除测试时遇到问题
- timestamp - 如何将文件的时间戳与 Windows 脚本中的阈值(距当前时间的分钟数)进行比较?
- module - ModuleNotFoundError:没有名为“发行版”的模块
- python - TVM库中relay.build_module.build()后图和库参数的差异
- python - PyTorch Convolution `in_channels` 和 `out_channels` 是什么意思?
- javascript - 为什么当我按下带有文本的文本框时会执行操作?
- php - 取消索引 elasticsearch 元素,deleted_at 不为空
- c++ - /usr/bin/ld: 在 redhat 上找不到 /usr/lib64/libasan.so.0.0.0
- html - 如何在移动视图中将所有引导列与元标记视口保持在同一行?
- django - 如何将变量从 Django 传递到 Typescript?