单独读取数据fscanf
我正试图从文件中读取数字。该文件具有以下格式:单独读取数据fscanf,c,file,scanf,C,File,Scanf,我正试图从文件中读取数字。该文件具有以下格式: 2 4 5 7 3 2 4 7 我尝试使用fscanf收集换行符之前的所有数字,并将数字存储在数组中,第二行也是如此。但是直接从第二行开始不会再次开始并将其存储在另一个数组中。是否可以使用fscanf执行此操作 int main(void) { FILE* fp; int *vec = malloc(sizeof(int)*6); int *vec_2 = malloc(sizeof(int)*6); int ro
2 4 5 7
3 2 4 7
我尝试使用fscanf
收集换行符之前的所有数字,并将数字存储在数组中,第二行也是如此。但是直接从第二行开始不会再次开始并将其存储在另一个数组中。是否可以使用fscanf
执行此操作
int main(void)
{
FILE* fp;
int *vec = malloc(sizeof(int)*6);
int *vec_2 = malloc(sizeof(int)*6);
int row, i;
fp = fopen("vector.txt","r");
for(i = 0; i < row; i++) //I don't know how to read until newline
fscanf(fp, "%d", &vec[k]); //here store the first row in the array
for(i = 0; i < row; i++)
fscanf(fp, "%d", &vec_2[i]); //start reading here from the second row
free(vec);
free(vec_2);
return 0;
}
int main(无效)
{
文件*fp;
int*vec=malloc(sizeof(int)*6);
int*vec_2=malloc(sizeof(int)*6);
int row,i;
fp=fopen(“vector.txt”,“r”);
for(i=0;i|
行必须初始化为6,也可能是col,您可以使用以下二维数组
int main()
{
FILE* fp;
int **vec;
int row = 6, col = 6, i, j;
vec = malloc(sizeof(int *)*row); // allocates space for each row
for (i = 0; i < row; i++) {
vec[i] = malloc(sizeof(int)*col); // now allocate space for each cell within a row
}
fp = fopen("vector.txt","r");
for(i = 0; i < row; i++) {
for (j=0; j < col; j++) {
fscanf(fp, "%d", &vec[i][j]); // read ith row, jth col
}
}
vec = malloc(sizeof(int *)*row);
for (i = 0; i < row; i++) {
free(vec[i]);
}
free(vec);
return 0;
}
intmain()
{
文件*fp;
int**vec;
int行=6,列=6,i,j;
vec=malloc(sizeof(int*)*行);//为每行分配空间
对于(i=0;i|
int main(无效){
文件*fp;
int cols=6;
int*vec_1=malloc(sizeof(int)*cols);
int*vec_2=malloc(sizeof(int)*cols);
inti,i1,i2;
char ch;
fp=fopen(“vector.txt”,“r”);
对于(i1=0;i1 fgScript())< /> >
此解决方案适用于N行和用户可选择的列宽
#define MAX_INT_WIDTH (sizeof (int) * CHAR_BIT/3 + 3)
int **Read_Lines_Of_Numbers(FILE* inf, size_t Expected_Row_Width) {
int **Row = NULL;
size_t RowCount = 0;
size_t RowSize = 0;
char buf[Expected_Row_Width * (MAX_INT_WIDTH + 1) + 2];
while (fgets(buf, sizeof buf, inf) != NULL) {
if (RowCount >= RowSize) {
RowSize = (RowSize + 1) * 2; // Double size
Row = realloc(Row, RowSize * sizeof *Row); // OOM checking omitted
}
Row[RowCount] = calloc(Expected_Row_Width, sizeof *Row[RowCount]); // OOM checking omitted
size_t i;
char *p = buf;
for (i = 0; i < Expected_Row_Width; i++) {
int n;
if (sscanf(p, "%d %n", &Row[RowCount][i], &n) != 1)
break;
p += n;
}
if (*p || i != Expected_Row_Width) { // Bad data on line
free(Row);
return NULL;
}
RowCount++;
}
Row = realloc(Row, (RowCount + 1) * sizeof *Row); // OOM checking omitted
Row[RowCount] = NULL;
return Row;
}
int main(void) {
FILE *inf = fopen("c:/tmp/vector.txt", "r");
size_t Width = 4;
int **Data = Read_Lines_Of_Numbers(inf, Width);
fclose(inf);
if (Data) {
size_t i;
for (i = 0; Data[i]; i++) {
size_t j;
for (j = 0; j < Width; j++) {
printf(" %d", Data[i][j]);
}
fputc('\n', stdout);
}
free(Data);
}
return 0;
}
#定义最大整数宽度(sizeof(INT)*字符位/3+3)
int**Read\u line\u Of \u number(文件*inf,大小\u t预期行宽){
int**Row=NULL;
大小\u t行计数=0;
大小\u t行大小=0;
字符buf[预期行宽*(最大行宽+1)+2];
while(fgets(buf,sizeof buf,inf)!=NULL){
如果(行数>=行大小){
RowSize=(RowSize+1)*2;//大小加倍
Row=realloc(Row,RowSize*sizeof*Row);//省略OOM检查
}
行[RowCount]=calloc(预期的行宽度,sizeof*行[RowCount]);//忽略OOM检查
尺寸i;
char*p=buf;
对于(i=0;i
是的,这是可能的。此外,如果行数固定且已知,则可以执行fscanf(文件“%d%d%d%d”、&a、&b、&c和&d)
。稍等片刻,你就可以开始了。但我的目的是将数字存储在一个数组中。你想为每一列创建一个数组,还是为整个文件创建一个数组?我想将第一行存储在一个数组中,第二行存储在另一个数组中。请发布你尝试过的代码,有很多信息你都不知道。1)new int[col]
在C
中不起作用。建议vec[i]=malloc(col*sizeof*vec[i]);
2)不清楚第二个vec=malloc(sizeof(int*)*row)的用法;
#define MAX_INT_WIDTH (sizeof (int) * CHAR_BIT/3 + 3)
int **Read_Lines_Of_Numbers(FILE* inf, size_t Expected_Row_Width) {
int **Row = NULL;
size_t RowCount = 0;
size_t RowSize = 0;
char buf[Expected_Row_Width * (MAX_INT_WIDTH + 1) + 2];
while (fgets(buf, sizeof buf, inf) != NULL) {
if (RowCount >= RowSize) {
RowSize = (RowSize + 1) * 2; // Double size
Row = realloc(Row, RowSize * sizeof *Row); // OOM checking omitted
}
Row[RowCount] = calloc(Expected_Row_Width, sizeof *Row[RowCount]); // OOM checking omitted
size_t i;
char *p = buf;
for (i = 0; i < Expected_Row_Width; i++) {
int n;
if (sscanf(p, "%d %n", &Row[RowCount][i], &n) != 1)
break;
p += n;
}
if (*p || i != Expected_Row_Width) { // Bad data on line
free(Row);
return NULL;
}
RowCount++;
}
Row = realloc(Row, (RowCount + 1) * sizeof *Row); // OOM checking omitted
Row[RowCount] = NULL;
return Row;
}
int main(void) {
FILE *inf = fopen("c:/tmp/vector.txt", "r");
size_t Width = 4;
int **Data = Read_Lines_Of_Numbers(inf, Width);
fclose(inf);
if (Data) {
size_t i;
for (i = 0; Data[i]; i++) {
size_t j;
for (j = 0; j < Width; j++) {
printf(" %d", Data[i][j]);
}
fputc('\n', stdout);
}
free(Data);
}
return 0;
}